現在のアセンブリのパスを取得するにはどうすればよいですか?私は現在のアセンブリ(.dll)の場所に関連して、いくつかのパスからデータを取得する必要があります。現在のアセンブリのパスを取得する
誰かがリフレクション空間を使用するように言ったが、そこに何も見つかりませんでした。
を使用でき現在のアセンブリのパスを取得するにはどうすればよいですか?私は現在のアセンブリ(.dll)の場所に関連して、いくつかのパスからデータを取得する必要があります。現在のアセンブリのパスを取得する
誰かがリフレクション空間を使用するように言ったが、そこに何も見つかりませんでした。
を使用でき:
string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;
コメントのいくつかの提案が任意のパーセントエンコーディングが処理されることを保証するために、そしてTrueWillからPath.GetFullpath
を(使用する(vvnurmiから)System.Uri.UnescapeDataString
を通じてそれを渡すためにあります)は、パスが標準のWindows形式であることを保証します(バックスラッシュの代わりにスラッシュを使用するのではなく)。ここでは、各段階で何を得るの例です:私たちはC:\Temp\Temp App\bin\Debug\TempApp.EXE
を実行している
string s = Assembly.GetExecutingAssembly().CodeBase;
Console.WriteLine("CodeBase: [" + s + "]");
s = (new Uri(s)).AbsolutePath;
Console.WriteLine("AbsolutePath: [" + s + "]");
s = Uri.UnescapeDataString(s);
Console.WriteLine("Unescaped: [" + s + "]");
s = Path.GetFullPath(s);
Console.WriteLine("FullPath: [" + s + "]");
出力場合:
CodeBase: [file:///C:/Temp/Temp App/bin/Debug/TempApp.EXE] AbsolutePath: [C:/Temp/Temp%20App/bin/Debug/TempApp.EXE] Unescaped: [C:/Temp/Temp App/bin/Debug/TempApp.EXE] FullPath: [C:\Temp\Temp App\bin\Debug\TempApp.EXE]
Path.GetFullPathを呼び出して、スラッシュをバックスラッシュにすることをおすすめします。スラッシュを使用すると、Assembly.LoadFile(似ていないタイプなど)から奇妙な動作が発生する可能性があります。 – TrueWill
'.Location'の代わりにこれを使う利点/目的は何ですか? –
@pst:シャドウコピーは実行前にアセンブリを "移動"することができるので、環境によっては場所が間違っている可能性があります。 –
System.Reflection.
Assembly
。 GetExecutingAssembly()
。ちょうどそれを明確にするLocation
+1のドキュメントリンクです。8-) – RichieHindle
これは、MSTest単体テストから呼び出されたときに、アセンブリではなくmscorlibの場所を指定します。 –
私は
new System.Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath;
EscapedCodeBaseは、あなたのローカルパスがそれで、無効なURIの文字を持っているかもしれないシナリオをカバーしてい好む(https://stackoverflow.com/a/21056435/852208を参照)
LocalPathには、ローカルパスとuncパスの両方のフルパスが含まれます。ここで、AbsolutePathは "\\ server"を切り捨てます
Assembly.GetExecutingAssembly()。場所 – RichieHindle