【发布时间】:2021-04-25 02:41:10
【问题描述】:
我正在尝试在 Linux 中运行现有的 .NET Core 2.2 控制台应用程序。应用程序从第三方服务读取一些数据,然后将其保存为这样的文件。
var filename = Guid.NewGuid().ToString() + ".xml";
await File.WriteAllTextAsync(Path.Combine(savedir,filename), fileData);
savedir 的值是/home/ubuntu/saved/ 并且该目录存在,但每次程序到达该点时我仍然收到此错误。
Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path
'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ubuntu/.dotnet/tools/12466311-7cd7-4328-8654-2dfaac1f230d.xml'.
提前致谢。
更新
感谢接受的答案,很容易找出问题所在。变量sadir初始化如下:
var path = _cfg.GetValue<string>("Path", @"/home/ubuntu/saved");
Path 的值应该来自 appsettings.json,但在初始化代码中是这样的:
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
似乎 .NET Framework 对环境变量的访问不区分大小写,因此我们最终将 Path 参数与环境变量 PATH 的值一起使用。
更新 2
感谢大家的cmets和回答!!!
【问题讨论】:
-
手动连接字符串是否有效?
-
刚试了一下,还是一样的错误信息
-
Path.Combine 调用的结果是什么?它应该类似于
"/home/ubuntu/saved/f239ae55-45b2-4708-ad1b-10a86121dc2d.xml" -
“试一试,它显示相同的错误消息”——这让我完全空白:-|
-
啊...我明白了 :-) 谢谢