VSTS / TFS设置环境变量ASP.NET核心

时间:2017-12-12 00:20:04

标签: c# asp.net asp.net-core azure-devops azure-pipelines-release-pipeline

我正在尝试使用带有以下任务的VSTS将ASP.NET Core应用程序部署到IIS

enter image description here

然而,经过大量谷歌搜索和浏览MS文档后,我找不到为部署设置环境变量的方法。我在环境范围的发布定义中设置的变量未设置为环境变量。

enter image description here

知道如何实现这个目标吗?

6 个答案:

答案 0 :(得分:2)

您在VSTS中设置的环境变量仅用于部署本身(即VSTS正在执行的任何操作,例如构建应用程序或运行单元测试),但运行时应用程序将使用托管它的服务器上的任何一个。

如果您希望部署的应用程序也使用它们,则需要在VSTS正在部署的IIS服务器上设置环境变量。 Microsoft文档根据您的服务器显示如何设置此项:Setting the environment

回复评论时更新:

设置环境变量的推荐方法是在机器本身 - 即。登录到要部署到的IIS服务器,并在ASPNETCORE_ENVIRONMENT

中添加system properties -> advanced settings -> environment variables环境变量

如果由于某种原因您无法执行此操作,则可以在Web.config文件中设置它们(根据该文档)。如果您总是设置相同的值,那么您应该能够在Web.config中添加所需的内容

<environmentVariables>
  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>

如果你真的需要XML转换(老实说,我不确定你在这种情况下做什么 - 这是为了在部署时根据构建配置改变Web.config文件。正如其他人提到的那样,使用asp.net核心,推荐的配置设置是appsettings[.environment].json文件,它们是根据匹配的机器级ASPNETCORE_ENVIRONMENT env变量自动加载的,你需要使用正确的方法在转换文件中实际定义转换语法并让它替换您想要更改的部分。这显然是更难的选择。

如果您选择沿着这条路走下去,请参阅:How to: Transform Web.config When Deploying a Web Application Project用于创建转换文件,Web.config Transformation Syntax for Web Project Deployment Using Visual Studio用于配置语法

像这样的东西(目前无法测试,但这应该给你一个想法 - 注意转换文件上的转换命名空间和xdt:属性)。我相信加载的转换文件与构建配置相匹配,您可能需要将其配置为VSTS任务的一部分:

的Web.config

<configuration>
  <system.webServer>
    <aspNetCore ...>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

Web.Release.config(构建配置的转换文件“Release”)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <aspNetCore ...>
      <environmentVariables>
        <environmentVariable xdt:Transform="Replace" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

答案 1 :(得分:2)

对于带有web.config的ASP.NET Core 1.x项目,您可以使用以下内容。

由于您的部署具有“Dev”环境,因此请向您的项目提交以下配置文件:

<强> web.Dev.config

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <aspNetCore>
      <environmentVariables xdt:Transform="InsertIfMissing" />
      <environmentVariables>
        <environmentVariable xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" />
        <environmentVariable xdt:Transform="Replace" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>
  • 上面将在web.config中创建environmentVariables部分(如果它尚不存在)。
  • 根据需要将 web.Dev.config 中的“Dev”替换为其他环境名称。
  • ASPNETCORE_ENVIRONMENT用作上面的例子,换另一个 变量
  • 如果您的web.config在xmlns=""元素上没有相同的命名空间属性,请从上面的configuration元素中删除configuration属性。

在project.json中,在publishOptions =&gt;下添加;包括:

"web.dev.config"

在VSTS部署中,请确保在IIS Web App Deploy任务下检查“XML转换”: XML transformation checkbox

答案 2 :(得分:1)

这是我在Release管道中使用的powershell脚本(我不喜欢在内部版本中设置ASPNETCORE_ENVIRONMENT)

参数:

-p $(System.DefaultWorkingDirectory)\$(Build.DefinitionName)\drop\testbld-Test\web.config -e Development

内联脚本:

param ([string]$p,[string]$e)
$doc = new-object System.Xml.XmlDocument
$location = "$p"
$doc.Load($location)
$subNode = $doc.CreateElement("environmentVariable")
$node = $doc.CreateElement("environmentVariables")
$doc.SelectSingleNode("//aspNetCore").AppendChild($node)
$doc.SelectSingleNode("//environmentVariables").AppendChild($subNode)
foreach($nd in $subNode) {$nd.SetAttribute("name", "ASPNETCORE_ENVIRONMENT");$nd.SetAttribute("value", "$e");}
$doc.Save($location)

答案 3 :(得分:0)

请参阅以下步骤:

  1. 设置配置文件属性(例如web.config,web.QA.config),复制到输出目录:如果更新则复制
  2. .NET Core任务(命令:restore
  3. .NET Core任务(命令:build
  4. .NET Core任务(命令:publish;选中“发布Web项目”选项;参数:--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory);选中Zip Published Projects选项)
  5. 发布构建工件(发布路径:$(build.artifactstagingdirectory)
  6. 打开发布定义,更改环境名称(例如QA,匹配配置文件名)
  7. IIS Web部署任务:(包或文件夹:$(System.DefaultWorkingDirectory)\**\*.zip;检查XML transformation选项(它基于环境名称查找转换源文件)
  8. 然后web.[environmentname].config文件(例如web.QA.config)将转换为web.config文件。
  9. 您也可以通过XDT transform任务执行此操作(文件不能在zip文件中,因此请取消选中Zip Published Projects选项:step4,并通过Archive Files归档文件任务发布)

答案 4 :(得分:0)

设置环境变量的另一种方法(使用XML transform方法除外)是添加一个Powershell任务,该任务使用appCmd命令在ApplicationPool范围内设置环境变量

C:\Windows\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='XyzPool'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Dev']" /commit:apphost

答案 5 :(得分:0)

我在构建的“发布”步骤中将其添加为参数:

/p:EnvironmentName=Development

enter image description here

然后它会被添加到构建输出的 web.config 中。