是否有方法获取当前代码所在程序集的路径?我不需要调用程序集的路径,只需要包含代码的路径。
基本上,我的单元测试需要读取一些相对于dll的xml测试文件。无论测试dll是否从TestDriven运行,我都希望该路径始终能够正确解析。NET, MbUnit GUI或者别的什么。
编辑:人们似乎误解了我的问题。
我的测试库位于say
C: \ \项目myapplication \ daotests \ bin \ \ daotests.dll调试
我想得到这条路径:
C: \ \ myapplication \ daotests \ bin \项目调试\
到目前为止,当我从MbUnit Gui运行时,这三个建议都失败了:
环境。CurrentDirectory
给出c:\Program Files\MbUnit
System.Reflection.Assembly.GetAssembly .Location (typeof (DaoTests))
给出C:\Documents和
乔治\ \本地设置
设置\ Temp \…\ DaoTests.dll
.Location System.Reflection.Assembly.GetExecutingAssembly ()
给出与前面相同的结果。
我一直在用汇编。用CodeBase代替Location:
Assembly a;
a = Assembly.GetAssembly(typeof(DaoTests));
string s = a.CodeBase.ToUpper(); // file:///c:/path/name.dll
Assert.AreEqual(true, s.StartsWith("FILE://"), "CodeBase is " + s);
s = s.Substring(7, s.LastIndexOf('/') - 7); // 7 = "file://"
while (s.StartsWith("/")) {
s = s.Substring(1, s.Length - 1);
}
s = s.Replace("/", "\\");
它一直在工作,但我不再确定它是100%正确的。http://blogs.msdn.com/suzcook/archive/2003/06/26/assembly-codebase-vs-assembly-location.aspx的网页上写着:
"The CodeBase is a URL to the place where the file was found, while the Location is the path where it was actually loaded. For example, if the assembly was downloaded from the internet, its CodeBase may start with "http://", but its Location may start with "C:\". If the file was shadow-copied, the Location would be the path to the copy of the file in the shadow copy dir.
It’s also good to know that the CodeBase is not guaranteed to be set for assemblies in the GAC. Location will always be set for assemblies loaded from disk, however."
您可能希望使用CodeBase而不是Location。