var codebase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
var path = Path.GetDirectoryName(codebase);
它适用于Windows。 在单声道版本4.2.1上,结果是:
codebase: file:///home/...
path: file:/home/...
这是一个错误,还是我做错了什么?
答案 0 :(得分:1)
我找到了解决方案。
Uri应该直接从CodeBase构造,因为它以Uri格式返回路径。然后Uri.LocalPath返回汇编的本地路径(路径格式),这里是可以使用GetDirectoryName的地方。
我做了一个扩展:
using System;
using System.IO;
using System.Reflection;
public static class AssemblyExtensions
{
public static string GetCodeBaseLocation(this Assembly assembly)
{
var uri = new Uri(assembly.CodeBase);
return Path.GetDirectoryName(uri.LocalPath);
}
}