我使用Jetbrains rider创建了一个控制台应用程序。然后,我将控制台应用程序发布到一个文件夹。我将该文件夹添加到我的系统路径中。我能跑echo %PATH%
并看到文件夹在path中,但是,如果我在文件夹中,则只能运行控制台应用程序。如果我放入可执行文件的完整路径,它不会发生事件。
C:\Program Files
我还检查了另一个文件的文件权限,这似乎是相同的。我禁用了一个病毒防护,但也没有解决这个问题。
有没有想过为什么它不能运行?我运行的是Windows10。
解决方案
在创建应用程序配置时设置基本路径。
builder
.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location)) // set the base path
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
发布于 2021-02-19 02:45:31
您的应用程序的编码不是很好。它很可能引用存储在可执行文件目录中的其他文件,而不使用任何路径,这意味着使用相对于当前目录的路径引用这些文件。
请参阅有关的Microsoft文档
命名文件、路径和命名空间
..。
您的应用程序的当前目录可以是包含应用程序可执行文件的目录,但还有数千个其他目录可以是启动应用程序时的当前目录。
每种编程/脚本语言都有一种方法来确定/获取其自身的完全限定路径,即当前执行的可执行或解释的脚本文件存储在哪个目录中,这称为
应用程序目录
或者
程序文件目录
或者
脚本目录
..。
此路径必须与与可执行文件/script相同的目录或application/script目录的子目录中的其他文件的文件名连接在一起。然后,对于可执行文件/脚本来说,哪个目录是当前目录就不再重要了,因为它使用完全限定名引用了它自己的所有文件/文件夹。
解决方案可以在代码中使用:
builder.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location))
另请参阅:
如何在.NET控制台应用程序中获取应用程序的路径?
https://stackoverflow.com/questions/66262899
复制相似问题