現在のコードが存在するアセンブリのパスを取得する方法はありますか? 呼び出しアセンブリのパスではなく、コードを含むアセンブリのパスだけが必要です。
基本的に、私のユニット テストでは、dll に相対的に配置されているいくつかの xml テスト ファイルを読み取る必要があります。テスト dll が TestDriven.NET、MbUnit GUI、またはその他のものから実行されるかどうかに関係なく、パスが常に正しく解決されるようにする必要があります。
編集: どうやら私が尋ねていることを誤解している人が多いようです。
私のテストライブラリは、例えば
C:\projects\myapplication\daotests\bin\Debug\daotests.dll
そして、私はこのパスを取得したいと思います:
C:\プロジェクト\myapplication\daotests\bin\Debug\
これまでの 3 つの提案は、MbUnit GUI から実行したときには失敗しました。
Environment.CurrentDirectory
c:\Program Files\MbUnitを返しますSystem.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location
C:\Documents and Settings\george\Local Settings\Temp\ ....\DaoTests.dll を返します。System.Reflection.Assembly.GetExecutingAssembly().Location
前と同じ結果になります。
ベストアンサー1
注意: Assembly.CodeBase は .NET Core/.NET 5 以降では非推奨です。https://learn.microsoft.com/en-us/dotnet/api/system.reflection.assembly.codebase?view=net-5.0
元の回答:
ユニットテストで頻繁に使用するため、次のプロパティを定義しました。
public static string AssemblyDirectory
{
get
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
}
このAssembly.Location
プロパティは、NUnit (アセンブリが一時フォルダーから実行される場所) を使用する場合に奇妙な結果をもたらすことがあるため、CodeBase
URI 形式でパスを取得し、先頭のUriBuild.UnescapeDataString
を削除して、通常の Windows 形式に変更する を使用することを好みます。File://
GetDirectoryName