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

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

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

最佳答案

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

cd /c/code/repo
dotnet restore /src/solution.sln
dotnet build /src/solution.sln
dotnet run /src/project/project.csproj

前2个没有问题,但是.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'.

我可以使它正常工作的唯一方法是进入该目录:
cd /src/project
dotnet run project.csproj

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

似乎是CLI中的错误。

关于c# - ASPNET Core : Wrong Value for ContentRootPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41934783/

10-09 15:30