ASPNET核心:ContentRootPath的错误值

m20*_*33m 5 .net c# asp.net .net-core

我有一个ASP.NET核心应用程序,具有以下配置:

public Startup(IHostingEnvironment hostingEnvironment)
{
    _configuration = new ConfigurationBuilder()
        .SetBasePath(hostingEnvironment.ContentRootPath)
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", true)
        .AddEnvironmentVariables()
        .Build();
}
Run Code Online (Sandbox Code Playgroud)

当我发布应用程序并使用dotnet MyApp.dll应用程序目录内部运行它时,它运行没有问题.当我执行该命令时dotnet /dir1/dir2/MyApp.dll,它无法加载appsettings.json文件.我做了一点挖掘,发现它ContentRootPath被设置为我正在运行dotnet命令的目录而不是应用程序的实际目录.谁能告诉我如何解决这个问题?

小智 4

我也有同样的问题。我经常将代码存储在包含多个项目的 /src 文件夹中。因此,我想从 CLI 执行以下操作:

cd /c/code/repo
dotnet restore /src/solution.sln
dotnet build /src/solution.sln
dotnet run /src/project/project.csproj
Run Code Online (Sandbox Code Playgroud)

前两个工作没有问题,但 .NET Core 2.0 的 CLI 无法将 .SetBasePath(env.ContentRootPath) 识别为构建项目的路径。相反,它使用我在 CLI 上当前所在的路径。

这导致:

Unhandled Exception: System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional. The physical path is 'C:\code\repo\appsettings.json'.
Run Code Online (Sandbox Code Playgroud)

我可以让它工作的唯一方法是进入该目录:

cd /src/project
dotnet run project.csproj
Run Code Online (Sandbox Code Playgroud)

这很好,但如果我想重建解决方案,那么我需要导航回我的 .sln 所在的 /src,这非常烦人。

看起来像是 CLI 中的一个错误。