【问题标题】:Run console application from the command prompt从命令提示符运行控制台应用程序
【发布时间】:2021-02-18 15:22:21
【问题描述】:

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

【问题讨论】:

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


    【解决方案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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多