gpt4 book ai didi

Linux 下的 C#,WorkingDirectory 无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:54 24 4
gpt4 key购买 nike

WorkingDirectory 有问题,它没有正确设置所需的路径。我写了一个简单的 hello world 测试程序,a.out,来试用 WorkingDirectory。目录层次结构是这样的:

/home/cli2/test
/bin/Debug/netcoreapp2.1/subdir/
a.out
/obj
Program.cs
test.csproj

我对 Process 类有以下设置

process.StartInfo.FileName = "a.out"
process.StartInfo.UseShellExecute = false;
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "/subdir/";

当我执行 dotnet run 时,我会得到一个错误:

Unhandled Exception: System.ComponentModel.Win32Exception: No such file or directory

让我感到困惑的问题是,如果我将 a.out 移动到顶级目录,这样:

/home/cli2/project
/bin/Debug/netcoreapp2.1/subdir/
/obj
Program.cs
test.csproj
a.out

虽然具有相同的 StartInfo 设置,但 process.start() 可以无误地执行 hello world 程序。此外,如果我将 FileName = "ls" 更改为原始子目录层次结构,它会打印出 a.out。对于这种情况,WorkingDirectory 的行为符合预期。所以我理解这种差异以及为什么我不能在不同的目录中调用 a.out

我还尝试了 WorkingDirectory 的绝对路径和相对路径,但在调用 a.out 时都不起作用。

最佳答案

在这种情况下,process.StartInfo.WorkingDirectory 的含义不是可执行文件的位置。

这就是导致您遇到的行为的原因,process.StartInfo.WorkingDirectory 的含义根据 process.StartInfo.UseShellExecute 的值而变化。


来自Microsoft documentation :

The WorkingDirectory property behaves differently when UseShellExecute is true than when UseShellExecute is false.

When UseShellExecute is false, the WorkingDirectory property is not used to find the executable. Instead, its value applies to the process that is started and only has meaning within the context of the new process.


dotnet core 中 UseShellExecute 的默认值为 false。在 Linux 上将 UseShellExecute 设置为 true 时,我遇到了一些奇怪的事情。

就我个人而言,我会保留它 false 并确保使用完整路径或相对于项目根目录的路径,如下所示:

process.StartInfo.FileName="bin/Debug/netcoreapp2.1/subdir/a.out";

关于Linux 下的 C#,WorkingDirectory 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com