有没有办法获取当前代码所在程序集的路径?我不想要调用程序集的路径,只想要包含代码的路径。
基本上我的单元测试需要读取一些相对于 dll 的 xml 测试文件。无论测试 dll 是从 TestDriven.NET、MbUnit GUI 还是其他东西运行,我都希望路径始终正确解析。
编辑 :人们似乎误解了我的要求。
我的测试库位于说
C:\projects\myapplication\daotests\bin\Debug\daotests.dll
我想得到这条路:
C:\projects\myapplication\daotests\bin\Debug\
到目前为止,当我从 MbUnit Gui 运行时,三个建议都失败了:
Environment.CurrentDirectory 给出 c:\Program Files\MbUnit
Environment.CurrentDirectory
System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location 给出 C:\Documents and Settings\george\Local Settings\Temp\ ....\DaoTests.dll
System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location
System.Reflection.Assembly.GetExecutingAssembly().Location 给出与前一个相同的结果。
System.Reflection.Assembly.GetExecutingAssembly().Location
我已经定义了以下属性,因为我们经常在单元测试中使用它。
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); } }
使用 NUnit(程序集从临时文件夹运行)时,该Assembly.Location属性有时会给您一些有趣的结果,因此我更喜欢使用CodeBase它为您提供 URI 格式的路径,然后UriBuild.UnescapeDataString删除File://开头的 ,并将GetDirectoryName其更改为正常的 windows 格式.
Assembly.Location
CodeBase
UriBuild.UnescapeDataString
File://
GetDirectoryName