从命令提示符运行控制台应用程序

时间:2021-02-18 15:22:21

标签: c# windows cmd .net-5 rider

我使用 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();

1 个答案:

答案 0 :(得分:1)

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

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

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

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

此路径必须与可执行文件/脚本所在目录或应用程序/脚本目录的子目录中的其他文件的文件名连接。那么对于可执行文件/脚本来说,哪个目录是当前目录就不再重要了,因为它用全限定名引用了自己的所有文件/文件夹。

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

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

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