现在,我花了几个小时搜索如何设置ASPNETCORE_ENVIRONMENT,我只发现了两种(实用)方法:
网络[MYCONFIGURATION]的.config:
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
以下是每个问题:
应该注意的是,我们正在使用TFS的Build / Release发布到我们的Dev服务器。我曾希望添加一个“开发”的BuildConfiguration变量也可以设置ASPNETCORE_ENVIRONMENT,但不幸的是它没有。
如果不需要web.config或IIS设置,我该怎么办才能为我们的应用程序设置ASPNETCORE_ENVIRONMENT?或者,如果目前不可能,那么考虑到我所描述的限制,如何让两个选项中的一个起作用呢?
答案 0 :(得分:1)
我认为我没有正确地关注,在我看来你几乎就在那里。我们有类似的设置,这就是我的部署的样子。
基本上,您不会从appsettings.json创建web.config
。您告诉您的应用程序(在IIS后面的Kestrel上运行)appsettings.[Env].json
要使用,具体取决于web.config中设置的ASPNETCORE_ENVIRONMENT
值。
像我们的数据库连接字符串和其他设置得到的东西 如果我们自己创建一个web.config就丢失了
我的所有部署脚本都是通过我们的构建服务器使用PS和PS远程处理(作为TFS用户,你应该熟悉它),所以简而言之,这就是:
// Where Env.Name is the runtime configuration - i.e. "Production"
$environmentVariable = [PSCustomObject]@{Name='ASPNETCORE_ENVIRONMENT'; Value=$using:Env.Name}
// This is how I add the actual value for ASPNETCORE_ENVIRONMENT in web.config
Add-WebConfigurationProperty $IISSite -Filter "system.webServer/aspNetCore" -Name environmentVariables -Value $environmentVariable
最后一行添加
<aspNetCore processPath=".\PathToMyApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
</aspNetCore>
到web.config,你就完全了。
答案 1 :(得分:1)
您还可以使用“ IIS Web App管理”任务通过Advanced
和Additional appcmd.exe commands
部分来设置变量:
set config "APPNAME" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging']" /commit:site
但是,此脚本的多次执行不起作用。也许有人有主意?
另请参阅:How to set environment variables per site on IIS using appcmd.exe?
答案 2 :(得分:0)
由于我无法访问服务器,服务器管理员拒绝在多应用服务器上设置全局环境变量,我无法在Visual中预先修改web.config文件Studio预发布时,管理员找到了另一种解决方案。
由于我使用TFS构建/发布,他们向TFS添加了Patch XML File task并指示我配置任务,如下所示:
+ /configuration/system.webServer/aspNetCore/- => "environmentVariables"
+ /configuration/system.webServer/aspNetCore/environmentVariables/- => "environmentVariable"
= /configuration/system.webServer/aspNetCore/environmentVariables/environmentVariable/@name => "ASPNETCORE_ENVIRONMENT"
= /configuration/system.webServer/aspNetCore/environmentVariables/environmentVariable/@value=> "Development"
似乎工作得很好:
我必须说这是令人恼火的,这是我在.Net Core 2.0中的唯一办法。显然是服务器管理员或有权访问非常愿意更新服务器配置的人是正确使用.Net Core 2的要求。没有留下深刻印象。