获取C#可执行文件的路径的最佳方法是什么?
我需要将它用于临时文件夹等,目前我正在使用:
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)
但我需要做一个:
.Replace("file:\\", string.Empty)
因为这给了我一个URI类型路径(即在开头有文件:\),这对我的代码的其他部分是不可用的。
答案 0 :(得分:25)
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
答案 1 :(得分:10)
对您的问题不是一个准确的答案,但我建议您查看:
Path.GetTempFileName()
http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx
答案 2 :(得分:4)
尝试使用Environment.CurrentDirectory
这将返回当前工作目录的文件夹。
答案 3 :(得分:3)
对于临时文件夹等,出于安全原因,不应使用执行目录... MS内置了一些内容:
您可以使用ApplicationData
(适用于漫游用户)或LocalApplicationData
(适用于非漫游用户)或CommonApplicationData
(适用于非用户相关内容)来自Environment.SpecialFolder
- 您在这些文件夹中创建的任何内容(文件+文件夹)已经设置了运行您应用程序的用户所需的权限/权限 - 没有其他人(管理员除外)可以去那里......使您可以加密更加安全你放在那里的数据......
请参阅http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
答案 4 :(得分:1)
尝试:
Application.StartupPath
它应该返回没有可执行文件名的路径。
答案 5 :(得分:1)
如果程序集已被复制阴影,则Assembly.Location
将指向dll的卷影副本。
如果您想知道构建输出目录的位置,请使用Assembly.CodeBase
,即:
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath)
如果要从程序集目录中访问其他资源(例如运行测试套件时),则非常有用。
答案 6 :(得分:1)
IHostEnvironment.ContentRootPath
。IHostingEnvironment.ContentRootPath
(自Core 3.0以来已过时)。我个人认为,这些通常是我所需要的:包含内容的位置。
我可以确认IHostEnvironment.ContentRootPath
在作为单元测试运行时也返回了期望的结果。 (使用xUnit进行了测试,但是测试框架应该无关紧要。)
答案 7 :(得分:0)
string executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。Location); string txtfile = Path.Combine(executableLocation," example.txt");