运行 来自命令提示符的控制台应用程序

Run console application from the command prompt

我使用 Jetbrains rider 创建了一个控制台应用程序。然后我将控制台应用程序发布到一个文件夹。我将该文件夹添加到我的系统路径中。我可以 运行 echo %PATH% 并看到文件夹在路径中,但是如果我在文件夹中,我只能 运行 控制台应用程序。如果我将完整路径放入可执行文件,它就不会工作。

C:\Program Files<Company Name><Program Name><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();

您的应用程序编码不当。它很可能引用存储在可执行文件目录中的其他文件而不使用任何路径,这意味着使用相对于当前目录的路径引用文件。

请参阅有关 Naming Files, Paths, and Namespaces 的 Microsoft 文档。

您的应用程序的当前目录可能是包含应用程序可执行文件的目录,但还有数千个其他目录可以是启动应用程序时的当前目录。

每个 programming/scripting 语言都有一个方法来 determine/get 自身的完整限定路径,即当前执行的可执行文件或解释的脚本文件存储在哪个目录中,称为 应用程序目录程序文件目录脚本目录.

此路径必须与 executable/script 目录或 application/script 目录的子目录中的其他文件的文件名连接。然后对于 executable/script 哪个目录是当前目录不再重要,因为它引用自己的所有 files/folders 完全限定名称。

解决方案可以在代码中使用:

builder.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location))

另请参阅:How can I get the application's path in a .NET console application?