我使用Jetbrains rider创建了一个控制台应用程序。然后,我将控制台应用程序发布到一个文件夹中。我将文件夹添加到我的系统路径。我可以运行echo %PATH%
并看到该文件夹在路径中,但是如果我在该文件夹中,则只能运行控制台应用程序。如果将完整路径放入可执行文件,则不会起作用。
C:\ Program Files <公司名称> <程序名称> <文件>
我还检查了对另一个文件的文件权限,这似乎是相同的。我禁用了病毒防护,但也未能解决问题。
有什么想法为什么不能运行?我正在运行Windows 10。
解决方案
在创建应用程序配置时设置基本路径。
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();
您的应用程序编码不正确。它很可能引用可执行文件目录中存储的其他文件,而不使用任何路径,这意味着使用相对于当前目录的路径引用文件。
请参阅有关命名文件,路径和命名空间的Microsoft文档。
应用程序的当前目录可能是包含应用程序可执行文件的目录,但是有成千上万个其他目录可以是启动应用程序时的当前目录。
每种编程/脚本语言都有一种方法来确定/获取自身的完整限定路径,即,当前执行的可执行文件或解释脚本文件存储在哪个目录中,该目录称为应用程序目录或程序文件目录或脚本目录。
此路径必须与可执行文件/脚本或应用程序/脚本目录的子目录位于同一目录中的其他文件的文件名串联在一起。然后,对于可执行文件/脚本来说,哪个目录是当前目录就不再重要了,因为它以全限定名引用其所有文件/文件夹。
该解决方案可以在代码中使用:
builder.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句