使用C#打开一个.pdf文件
使用C#打开一个.pdf文件
有没有一种方法可以获取当前代码所在的程序集路径?我不想要调用程序集的路径,只想要包含代码的那个程序集的路径。
基本上,我的单元测试需要读取一些相对于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\\MbUnitSystem.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location
给了C:\\Documents andSettings\\george\\Local
Settings\\Temp\\ ....\\ DaoTests.dll
System.Reflection.Assembly.GetExecutingAssembly().Location
与前面的内容相同。
admin 更改状态以发布 2023年5月21日
注意:在.NET Core/.NET 5+中,Assembly.CodeBase已经被弃用: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
删除开头的File://
,GetDirectoryName
将其转换为普通的Windows格式。