Ale*_*xei 3 environment-variables iis-express asp.net-core asp.net-core-3.1
我偶然发现了 ASP.NET Core 3.1 应用程序的一个奇怪情况:launchSettings.json 中定义的environmentVariables 未设置(例如Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")is null)。
launchsettings.json 如下所示:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60907",
"sslPort": 44364
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger/index.html",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyApp.WebApi": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger/index.html",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用IIS Express.
我调查过或尝试过的事情:
将项目拉到另一台机器上,它按预期工作:Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"是"Development"。
在同一台机器上运行一个非常相似的项目(几乎相同的配置)并且它按预期工作
删除了所有 launchsettings.json 内容,但IIS Express仍然存在相同的问题
使用另一个配置文件启动并且它按预期工作
关闭 Visual Studio -> 删除 .vs 文件夹 -> 重新打开 VS + 重新运行项目。问题仍然存在
重启机器,问题依旧
在配置文件中添加了其他环境变量,它们也被忽略
将工作项目与非工作项目 IISExpress applicationhost.config 文件进行比较,没有发现任何差异(项目路径除外)。
我现在唯一的解决方法是在 Program.cs 中进行本地更改并确保我永远不会提交它,但我正在寻找真正的修复方法:
string originalEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", originalEnv ?? "Development");
Run Code Online (Sandbox Code Playgroud)
我已经没有办法尝试了。我认为它与该特定应用程序的特定计算机上的 IIS Express 配置有关,但我找不到与环境变量相关的任何内容%userprofile%\My Documents\IISExpress\config\applicationhost.config
您将操作系统的环境变量与 .NET Core 运行时环境混淆了。他们有相同的名字,一个可以晋升到另一个,但他们不一样。
launchSettings.json 中的环境变量(“运行时环境”或“主机配置值”)不会提升为操作系统的实际环境变量,后者您可以通读Environment.GetEnvironmentVariable()。
ASPNETCORE_ENVIRONMENT您可以通过IHostingEnvironment.Environment或阅读应用程序的内容IWebHostEnvironment.EnvironmentName。
回顾一下:您不应该使用从操作系统的环境变量中Environment.GetEnvironmentVariable()读取,因为.NET Core 环境可以通过不同的方式设置。ASPNETCORE_ENVIRONMENT
相反:在主机初始化期间,ASPNETCORE_ENVIRONMENT环境变量是从操作系统读取的,但是可以通过不同的方式提供该值,即通过 launchSettings.json、.vscode/launch.json 或者甚至可以使用AddCommandLine(args),进而:
dotnet run --environment "Staging"
Run Code Online (Sandbox Code Playgroud)
并且您Environment.GetEnvironmentVariable()将报告错误的值(如果有)。
| 归档时间: |
|
| 查看次数: |
6880 次 |
| 最近记录: |