【问题标题】:ASPNET Core: Wrong Value for ContentRootPathASPNET Core:ContentRootPath 的值错误
【发布时间】:2017-01-30 11:28:26
【问题描述】:

我有一个具有以下配置的 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 命令的目录,而不是应用程序的实际目录。谁能告诉我如何解决这个问题?

【问题讨论】:

  • 使用绝对补丁或从应用目录执行dotnet。我在这里没有看到任何问题
  • 我有同样的问题,不幸的是,dotnet 假定内容根路径是您调用 dotnet 命令的路径,而不是您的文件实际所在的路径。

标签: c# asp.net .net .net-core


【解决方案1】:

我也有同样的问题。我经常将我的代码存储在包含多个项目的 /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 中的一个错误。

【讨论】:

【解决方案2】:

如果您在 VS Code 中调试时遇到此问题,这可能是由于 .vscode\launch.json 文件中的配置不正确

您需要确保项目中构建点的“cwd”参数 - 所以在这种情况下,它需要:

"cwd": "${workspaceFolder}/src/project"

那么在启动时,hostingEnvironment.ContentRootPath 的值就会正确。

【讨论】:

  • 老兄,经过一整天的挣扎,你才救了我。谢谢你。就是这个。而且我只在调试器中大声笑。
【解决方案3】:

类似于阿德里安·梅西。我有一个从 VS 启动的项目,但工作目录错误,但仅在使用 IIS 时。

删除了所有 .vs 文件重新组织并保存了我的 sln 文件,以便项目按字母顺序排列。

我正在寻找任何错误的引用或其他异常情况。保存后,发生了强制重新加载。

现在我的项目不再占用另一个项目的工作目录。

【讨论】:

  • 对我来说,只需删除 .vs 文件夹即可。
【解决方案4】:

我遇到了一个场景,如果您有相似的文件夹名称,它会设置错误项目的 ContentRootPath。

foo.api/foo.api.csproj 或者 bar.api/bar.api.csproj 将显示项目的 ContentRootPath: api/api.csproj 所以它加载了一个 appsettings 文件,但不是正确的。

为了解决这个问题,我重命名了不带“.”的项目文件夹分隔符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2017-05-16
    相关资源
    最近更新 更多