我有一个具有以下配置的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
命令的目录,而不是应用程序的实际目录。谁能告诉我如何解决这个问题?
答案 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文件,以便项目按字母顺序排列。
我正在寻找任何不良参考或其他异常情况。保存后,强制重新加载。
现在我的项目不再选择另一个项目的工作目录。