您的问题不清楚您要在目标文件中替换哪些值,因此请注意:
". . . 变量替换仅对配置文件的 applicationSettings、appSettings、connectionStrings 和 configSections 元素生效。如果您要替换这些元素之外的值,您可以使用 (parameters.xml) 文件,但是您需要使用 3rd 方管道任务 来处理变量替换。 . . ."
如果找不到第 3 方任务
当然,Document 并没有向我们指出任何偏爱的第 3 方任务。因此,如果您找不到直接对 parameters.xml 文件进行操作的任务,那么您可以使用 File Transform task 将 .config 中的值添加/替换为令牌,然后使用 Replace Tokens 任务插入您的变量值。
示例:
在我的沙箱中,我可以通过在我的管道中添加适当的变量来替换上面引用文本中指定部分中的 xml 值。
鉴于这是我的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSection>
<section name="entityFramework" />
</configSection>
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=(LocalDB)\LocalDB;FileName=Local.mdf" />
</connectionStrings>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobstructiveJavascriptEnabled" value="true" />
<add key="AdminUserName" value="__AdminUserName__" />
<!-- Change AdminPassword in this line: -->
<add key="AdminPassword" value="__AdminPassword__" />
</appSettings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.LocalDbConnectionFactory">
<parameters></parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer" />
</providers>
</entityFramework>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<staticContent>
<remove fileExtension=".woff" />
<remove fileExtension=".woff2" />
<mimeMap fileExtension=".woff" mimeType="application/font-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff" />
</staticContent>
<security>
<requestFiltering>
<!-- change this value -->
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
并在 yaml 中给出这些变量:
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
AdminPassword: 'fake password'
maxAllowedContentLength: '25'
鉴于这是 yaml 任务:
- task: FileTransform@1
inputs:
folderPath: '$(System.DefaultWorkingDirectory)/src'
enableXmlTransform: false
fileType: 'xml'
targetFiles: '*.config'
结果是这样的:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSection>
<section name="entityFramework"/>
</configSection>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDB)\LocalDB;FileName=Local.mdf"/>
</connectionStrings>
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobstructiveJavascriptEnabled" value="true"/>
<add key="AdminUserName" value="__AdminUserName__"/>
<add key="AdminPassword" value="fake password"/>
</appSettings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.LocalDbConnectionFactory">
<parameters/>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer"/>
</providers>
</entityFramework>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824"/>
</requestFiltering>
</security>
</system.webServer>
注意未替换的值!!
如文档中所述,我想更改的值 <requestLimits maxAllowedContentLength="1073741824"/> 未更改 b/c 它不是由 configSection 定义的,并且不是预定义节点的一部分。
在默认值之外使用第 3 方替换
采用相同的配置文件,但将 yaml 任务更改为包含对以下 transform.config 的转换
给定相同的配置文件
transform.config
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<security>
<requestFiltering>
<!-- change this value -->
<requestLimits maxAllowedContentLength="${maxAllowedContentLength}$" xdt:Transform="Replace" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
新任务设置
- task: FileTransform@1
inputs:
folderPath: '$(System.DefaultWorkingDirectory)/src'
enableXmlTransform: true
xmlTransformationRules: '-transform transform.config -xml app.config'
fileType: 'xml'
targetFiles: '*.config'
- task: replacetokens@3
inputs:
rootDirectory: '$(build.sourcesdirectory)/src'
targetFiles: 'app.config'
encoding: 'auto'
writeBOM: false
actionOnMissing: 'warn'
keepToken: false
tokenPrefix: '${'
tokenSuffix: '}$'
结果是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSection>
<section name="entityFramework"/>
</configSection>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDB)\LocalDB;FileName=Local.mdf"/>
</connectionStrings>
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobstructiveJavascriptEnabled" value="true"/>
<add key="AdminUserName" value="__AdminUserName__"/>
<add key="AdminPassword" value="fake password"/>
</appSettings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.LocalDbConnectionFactory">
<parameters/>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer"/>
</providers>
</entityFramework>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="25"/>
</requestFiltering>
</security>
</system.webServer>