2017-01-30 56 views
4

我有以下配置一個ASP.NET核心應用:ASPNET核心:錯誤的價值ContentRootPath

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命令的目錄,而不是應用程序的實際目錄。任何人都可以告訴我如何解決這個問題?

+2

使用abolute補丁或從app目錄執行'dotnet'。我沒有看到這裏的任何問題 –

+0

我有同樣的問題,不幸的是,dotnet假定內容根路徑是您稱爲'dotnet'命令的路徑,而不是您的文件實際駐留的位置。 – Matthew

回答

2

我有同樣的問題。我經常將我的代碼存儲在包含多個項目的/ src文件夾中。因此,從CLI我想做到以下幾點:

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

第2工作沒有問題,但對於.NET 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中的錯誤。

+0

這不僅僅是因爲調用['UseContentRoot(Directory.GetCurrentDirectory())'](https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/hosting?tabs=aspnetcore1x #設置一個主機)在WebHostBuilder上? –

+0

好點,我認爲這是必需的。如果我刪除UseContentRoot,那麼它完美的工作。謝謝! –

0

如果你有這個問題VS代碼中進行調試時,這可以通過在.vscode \ launch.json文件不正確的配置引起

你需要,以確保「CWD」參數爲您構建點你的項目 - 所以在這種情況下,將需要:

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

然後hostingEnvironment.ContentRootPath值將在運行時啓動是正確的。