我的 .net 核心发布的可执行文件提供了与运行代码时不同的目录路径

Posted

技术标签:

【中文标题】我的 .net 核心发布的可执行文件提供了与运行代码时不同的目录路径【英文标题】:My .net core published executable gives a different directory path than when running the code 【发布时间】:2021-12-01 17:36:09 【问题描述】:

我创建了一个处理 txt 文件的 dotnet 核心控制台。它需要与 txt 文件位于同一文件夹中才能工作,因为它贯穿所有 txt 文件,因此需要定义其当前目录。当我在 Visual Studio 中运行我的解决方案时,它给出了我的应用程序所在的正确目录,但是当我将它发布为独立控制台并从桌面运行它时,它给出了一个错误的目录 (C:\users... \cue2n1g0.eiw)。 我正在使用以下行来定义控制台的当前目录。

 string currentFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

【问题讨论】:

exe真的存在于桌面吗?没有一些捷径/程序集不在其他地方? 没错。因此,当我在 Visual Studio 中配置发布时,我将目标位置设置为我的桌面。 AppContext.BaseDirectory 给你什么?那么Environment.CurrentDirectory呢? AppContext.BaseDirectory() 给出了同样的结果。 Environment.CurrentDirectory 带来错误。 你是英雄。谢啦。 Environment.CurrentDirectory() 工作正常。 【参考方案1】:

在我的测试中,所有这些结果都相同,并返回了桌面的真实路径,对于我使用 VS 的“发布到文件夹”选项在此处发布的 .net 5 控制台应用程序:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
AppContext.BaseDirectory
Environment.CurrentDirectory

【讨论】:

就我自己而言,当我将控制台发布为自包含时,只有 Environment.CurrentDirectory 提供了正确的目录。

以上是关于我的 .net 核心发布的可执行文件提供了与运行代码时不同的目录路径的主要内容,如果未能解决你的问题,请参考以下文章

将 .NET Core 应用程序发布为可移植的可执行文件

转NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办(代

无法在 .net 核心中发布二进制文件

为啥 Git Bash 不能运行我的可执行文件?

为啥 Git Bash 不能运行我的可执行文件?

创建一个自包含的可执行nuget包?