C#Executable执行目录

时间:2011-08-11 11:46:43

标签: c#

获取C#可执行文件的路径的最佳方法是什么?

我需要将它用于临时文件夹等,目前我正在使用:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)

但我需要做一个:

.Replace("file:\\", string.Empty)

因为这给了我一个URI类型路径(即在开头有文件:\),这对我的代码的其他部分是不可用的。

8 个答案:

答案 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)

  • .NET Core 3.0引入了IHostEnvironment.ContentRootPath
  • .NET Core 2.1引入了IHostingEnvironment.ContentRootPath(自Core 3.0以来已过时)。

我个人认为,这些通常是我所需要的:包含内容的位置。

我可以确认IHostEnvironment.ContentRootPath在作为单元测试运行时也返回了期望的结果。 (使用xUnit进行了测试,但是测试框架应该无关紧要。)

答案 7 :(得分:0)

string executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly()。Location); string txtfile = Path.Combine(executableLocation," example.txt");

相关问题