ASPNET核心:ContentRootPath的错误值

时间:2017-01-30 11:28:26

标签: c# asp.net .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();
}

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

4 个答案:

答案 0 :(得分:4)

我有同样的问题。我经常将我的代码存储在包含多个项目的/ src文件夹中。所以从CLI我想做以下事情:

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

前两个工作没有问题,但.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

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

看起来像是CLI中的错误。

答案 1 :(得分:0)

如果在VS代码中进行调试时出现此问题,则可能是由.vscode \ launch.json文件中的错误配置引起的;

你需要确保" cwd"您项目中构建点的参数 - 因此在这种情况下需要:

from bs4 import BeautifulSoup
import requests

html = requests.get('https://www.thedibb.co.uk/forums/wait_times.php?a=MK').content
soup = BeautifulSoup(html, "html.parser")

for attraction in soup.find_all('td', class_='alt2', align='right', height='28'):
    attraction.span.extract()
    print attraction.get_text(strip=True)

然后在运行Startup时,hostingEnvironment.ContentRootPath值将是正确的。

答案 2 :(得分:0)

我遇到一种情况,如果您使用相似的文件夹名称,则会设置错误项目的ContentRootPath。

foo.api/foo.api.csproj 要么 bar.api/bar.api.csproj 将显示项目的ContentRootPath: api/api.csproj,因此它加载了一个appsettings文件,而不是正确的文件。

为解决此问题,我将项目文件夹重命名为不带'。分隔符

答案 3 :(得分:0)

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

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

我正在寻找任何不良参考或其他异常情况。保存后,强制重新加载。

现在我的项目不再选择另一个项目的工作目录。