在TFS中为.Net Core 2配置ASPNETCORE_ENVIRONMENT

时间:2018-04-05 13:13:01

标签: tfs configuration web-config asp.net-core-2.0

我们现在遇到一个问题,我们无法调试我们的Dev服务器环境: enter image description here

现在,我花了几个小时搜索如何设置ASPNETCORE_ENVIRONMENT,我只发现了两种(实用)方法:

  1. 创建一个网站。[MYCONFIGURATION] .config文件并添加以下内容,其中[MYCONFIGURATION]类似于开发或发布:
  2. 网络[MYCONFIGURATION]的.config:

    <environmentVariables>
      <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    </environmentVariables>
    
    1. 在已部署的服务器上设置IIS变量以启用ASPCORE_ENVIRONMENT
    2. 以下是每个问题:

      1. 由于.NET Core使用appsettings.json文件进行配置(据我所知,从中生成了web.config),如果我们创建web.config,我们的数据库连接字符串和其他设置之类的东西就会丢失我们自己。
      2. 我们在企业级多应用程序环境中运行,结合了.NET Core和非核心ASP.NET应用程序(我无权访问),因此只更改IIS应用程序的设置是不是一种选择。
      3. 应该注意的是,我们正在使用TFS的Build / Release发布到我们的Dev服务器。我曾希望添加一个“开发”的BuildConfiguration变量也可以设置ASPNETCORE_ENVIRONMENT,但不幸的是它没有。 enter image description here

        如果不需要web.config或IIS设置,我该怎么办才能为我们的应用程序设置ASPNETCORE_ENVIRONMENT?或者,如果目前不可能,那么考虑到我所描述的限制,如何让两个选项中的一个起作用呢?

3 个答案:

答案 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管理”任务通过AdvancedAdditional 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并指示我配置任务,如下所示:

enter image description here

+ /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"

似乎工作得很好:

enter image description here

我必须说这是令人恼火的,这是我在.Net Core 2.0中的唯一办法。显然是服务器管理员或有权访问非常愿意更新服务器配置的人是正确使用.Net Core 2的要求。没有留下深刻印象。