21

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は優れたソリューションです-ありがとうございます! 。デバッガーの内外で機能します。

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);
}

もう一度ありがとうございました!

4

9 に答える 9

34

アセンブリのフル パス:

Assembly.GetExecutingAssembly().CodeBase.Dump();

いつでも名前を抽出できますPath.GetFileName

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);
于 2011-10-24T19:55:49.110 に答える
11

「Visual Studioホスティングプロセスを有効にする」チェックボックスを有効にして、デバッグでIDE内で実行しているようです。その場合、現在のプロセス xiixtasks.vshost.exe、デバッグを支援するために使用されるシェル exe です。そのチェックボックスを無効にする必要があります。

ここに画像の説明を入力

于 2011-10-24T19:56:03.483 に答える
4

バージョンを取得するには、これを試してください。

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version

そしてこれは名前を取得するために:

System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
于 2011-10-24T19:54:42.683 に答える
4

必要な情報に応じて、さまざまな呼び出しを使用できます。

ここに画像の説明を入力

于 2011-10-24T20:02:53.583 に答える
2

実際にはvshostファイルをデバッグモードで実行しているので、これは実際に私が期待することです。

vshost ファイルを実行するのではなく、exe を直接実行する場合は、プロジェクト設定に移動し、vshost デバッグ オプションを無効にする必要があります。

于 2011-10-24T19:56:12.277 に答える
2

「vshost.exe」ラッパーは通常、デバッグ ビルドに対してのみ有効であり、使用する必要もないため、プロジェクト設定でオフにすることを検討する必要があります ([デバッグ] タブで、[Visual Studio ホスティング プロセスを有効にする] のチェックを外します)。一番下にあります)。

于 2011-10-24T19:58:06.083 に答える
1

次のコードを使用して、あるディレクトリから別のディレクトリに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);

次に、それを使用してファイルを取得します。

于 2012-05-31T13:18:44.637 に答える
1

試す

var asm = Assembly.GetExecutingAssembly();

于 2011-10-24T19:56:29.283 に答える