Azure devops 使用Azure Devops和发布变量进行App.Exe配置转换

Azure devops 使用Azure Devops和发布变量进行App.Exe配置转换,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,我目前正在使用带有本地生成代理的Azure Devops将windows服务部署到内部服务器,并正在查找有关如何使用发布任务中定义的变量转换我的MyApp.Exe.config文件的信息 对于web应用程序,这似乎相当简单。我有一个parameters.xml文件,它与我的iisweb部署任务中的SetParameters文件一起使用。这将从发布任务中提取变量,并相应地更新web.config 但是,对于如何使用可执行文件的配置文件实现这一点,我找不到明确的答案。建议这应该是可能的,但看起来我需

我目前正在使用带有本地生成代理的Azure Devops将windows服务部署到内部服务器,并正在查找有关如何使用发布任务中定义的变量转换我的
MyApp.Exe.config
文件的信息

对于web应用程序,这似乎相当简单。我有一个
parameters.xml
文件,它与我的
iisweb部署任务中的
SetParameters文件
一起使用。这将从发布任务中提取变量,并相应地更新web.config

但是,对于如何使用可执行文件的配置文件实现这一点,我找不到明确的答案。建议这应该是可能的,但看起来我需要提供一个已经设置了变量的转换文件


总之,我要做的是使用
Parameters.xml
文件来使用我的发布变量转换可执行文件的配置文件。如何实现这一点?

在您的问题中,您不清楚要在目标文件中替换哪些值,因此请务必注意:

变量替换仅对配置文件的applicationSettings、appSettings、ConnectionString和configSections元素生效。如果要替换这些元素之外的值,可以使用(parameters.xml)文件,但是需要使用第三方管道任务来处理变量替换

如果找不到第三方任务 当然,这并没有告诉我们任何受欢迎的第三方任务。因此,如果找不到直接在parameters.xml文件上操作的任务,则可以使用添加/替换.config中的值和标记,然后使用该任务插入变量值

例子: 在我的沙盒中,我可以通过在管道中添加适当的变量来替换上面引用的文本中指定部分中的xml值

这是我的配置文件: 鉴于这是yaml的任务: 结果是: 新任务设置 结果是:


很抱歉延迟回复,非常感谢您的详细回复。您说“有一个选项可以使用一个文件进行转换,该文件“标记化”您的.config文件,然后使用替换标记任务”。这个选项在哪里/是什么?@Joe我不确定什么是不清楚的。我已经链接了任务,并给出了如何使用它的示例。也许你被“选项”这个词迷住了。这不仅仅是一个复选框。这是一种“行动方针”。基本上:您将创建一个用于标记配置的转换文件,然后使用链接任务将这些标记替换为变量值。您是否找到了一种使用SetParameters的方法,而不是按照下面的答案中的建议标记app.config?@devqon否-我只是使用下面的答案。这似乎不太理想,但从去年起我就再也没有想过。
<?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>
variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  AdminPassword: 'fake password'
  maxAllowedContentLength: '25'
- 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>
<?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>