VS2008のC#コンソールモードアプリケーションである「xiixtasks.exe」をデバッグしています。
Xiixtasks.exeからバージョン情報を取得しようとしています。
「Process.GetCurrentProcess()」を試してみると、xiixtasks.exeではなく、vshost.exeのファイル名とバージョン情報が表示されます。
// WRONG: this gives me xiixtasks.vhost.exe, version 9.0.30729.1
// I *want* "xiixtasks.exe", version 1.0.0.1024
System.Diagnostics.FileVersionInfo fi =
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileVersionInfo;
代わりに何をすべきですか?
前もって感謝します!
================================================== ====
解決:
1)最初の問題は、実際にはIDEの「vshost」ラッパーでした。回避策の1つは、ビルド設定を変更することでした。
2)Assembly.GetExecutingAssembly()。CodeBaseはexcellentソリューションです-ありがとうございます!。デバッガーの内外で機能します。
3)残念ながら、通常のファイルパスを期待する関数(GetExecutingAssembly()のようなURIではなく)で呼び出しようとすると、「Uri形式はサポートされていません」という例外で終了しました。
4)最終的な解決策:GetExecutingAssembly()を呼び出し、次にUri.LocalPath()を呼び出します。
...
else if (cmdArgs.cmd.Equals(CmdOptions.CMD_SHOW_VERSION))
{
string codeBaseUri =
Urifile.System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
string codeBase =
new Uri (codeBaseUri).LocalPath;
string sVersion = Util.GetWindowsVersion(codeBase);
System.Console.WriteLine ("version({0}): {1}: ",
Util.Basename(codeBase), sVersion);
}
もう一度ありがとうございました!
アセンブリのフルパス:
Assembly.GetExecutingAssembly().CodeBase.Dump();
名前はいつでもPath.GetFileName
で抽出できます。
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);
[Visual Studioホスティングプロセスを有効にする]チェックボックスを有効にして、デバッグ中にIDE内で実行しているようです。この場合、現在のプロセスisxiixtasks.vshost.exe
-デバッグを支援するために使用されるシェルexeです。そのチェックボックスを無効にする必要があります。
必要な情報に応じて、さまざまな通話を使用できます。
バージョンを取得するには、これを試してください。
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
そしてこれは名前を取得するために:
System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
'vshost.exe'ラッパーは通常、デバッグビルドに対してのみ有効であり、使用する必要もないため、プロジェクト設定でオフにすることを検討する必要があります([デバッグ]タブで、[VisualStudioホスティングプロセスを有効にする]をオフにします]下部)。
これはあなたの名前/バージョンも取得します
name: Assembly.GetExecutingAssembly().GetName().Name
version: = Assembly.GetExecutingAssembly().GetName().Version
実際にはvshostファイルをデバッグモードで実行しているので、これは実際に私が期待することです。
Vshostファイルを実行するのではなく、exeを直接実行する場合は、プロジェクト設定に移動して、vshostデバッグオプションを無効にする必要があります。
次のコードを使用して、あるディレクトリから別のディレクトリにxmlファイルをコピーしているときに、「URI形式はサポートされていません」などの例外が発生する場合。
string path=System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
DirectoryInfo dir=new DirectoryInfo(path+"\\App2");
FileInfo[] Files=dir.GetFiles();
次に、のようにURIに変換します。
string path =Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
URI uri = new URI(path);
string FileName = Path.Combine(uri.LocalPath, "\\App2"+file.Name);
次に、それを使用してファイルを取得します。