我有一个项目,将模板存储在\TemplatesDLL和EXE旁边的文件夹中.
我想在运行时确定这个文件路径,但使用的技术可以在单元测试和生产中使用(我不想在NUnit中禁用阴影复制!)
Assembly.Location 是不好的,因为它在NUnit下运行时返回阴影复制程序集的路径.
Environment.CommandLine 也是有限的用途,因为在NUnit等人它返回NUnit的路径,而不是我的项目.
Assembly.CodeBase 看起来很有希望,但它是一个UNC路径:
file:///D:/projects/MyApp/MyApp/bin/debug/MyApp.exe
Run Code Online (Sandbox Code Playgroud)
现在我可以使用字符串操作将其转换为本地文件系统路径,但我怀疑有一种更简洁的方法可以将它隐藏在.NET框架中.有人知道这样做的推荐方法吗?
(如果UNC路径不是file:///URL,则抛出异常在此上下文中绝对正常)
string path = Path.GetDirectoryName(
Assembly.GetAssembly(typeof(MyClass)).CodeBase);
Run Code Online (Sandbox Code Playgroud)
输出:
文件:\ d:\学习\ CS \测试\的test.xml
返回d:\ learning\cs\test\test.xml的最佳方法是什么
file:\\doc.Save(returnPath)但是doc.Load(returnPath),当我打电话时会抛出异常; 效果很好.谢谢.
我有C#代码试图LocalPath使用以下代码行获取正在执行的程序集:
Uri uri = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
这段代码适用于各种路径.它开始失败给出正确的AbsolutePath,Localpath因为执行的程序集路径包含一个#.
Assembly.GetExecutingAssembly().CodeBase 给 "C:\c#\ExcelAddin1.1.0\GSRExcelPlugin\bin\Debug\Common.dll"
但是新的Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath给出"C:\ c",而它应该给出"C:\ c#\ ExcelAddin1.1.0\GSRExcelPlugin\bin\Debug \".
有没有我需要处理的东西,或者Uri类使用的方式有什么不对吗?
如果这是.net框架问题,我该如何向Microsoft报告此问题?