我正在尝试使用带有以下任务的VSTS将ASP.NET Core应用程序部署到IIS
然而,经过大量谷歌搜索和浏览MS文档后,我找不到为部署设置环境变量的方法。我在环境范围的发布定义中设置的变量未设置为环境变量。
知道如何实现这个目标吗?
答案 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>
xmlns=""
元素上没有相同的命名空间属性,请从上面的configuration
元素中删除configuration
属性。在project.json中,在publishOptions =&gt;下添加;包括:
"web.dev.config"
答案 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)
请参阅以下步骤:
restore
)build
)publish
;选中“发布Web项目”选项;参数:--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)
;选中Zip Published Projects
选项)$(build.artifactstagingdirectory)
)$(System.DefaultWorkingDirectory)\**\*.zip
;检查XML transformation
选项(它基于环境名称查找转换源文件)web.[environmentname].config
文件(例如web.QA.config)将转换为web.config
文件。 您也可以通过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)