Azure devops VSTS发布管道-令牌替换

Azure devops VSTS发布管道-令牌替换,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,我一直在使用Replace Tokens(from),到目前为止,它对web.config文件中的动态连接字符串替换非常有用。就其工作方式而言,在Web.Release.config中,我有如下结构: <connectionStrings> <add name="Default" connectionString="__AzureDBConnectionString__" xdt:Transform="SetAttributes" xdt

我一直在使用Replace Tokens(from),到目前为止,它对web.config文件中的动态连接字符串替换非常有用。就其工作方式而言,在Web.Release.config中,我有如下结构:

<connectionStrings>
    <add name="Default"
        connectionString="__AzureDBConnectionString__"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<appSettings>
        <add key="mailToken" value="__mailToken__" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>

当我在VSTS中启动release时,它会用发布管道中的变量值替换这个令牌(在“_u”之间)。所以,我总是有一个对应于相关环境的连接字符串。 昨天我决定在这个文件中添加更多的变量,希望它也能正常工作,因为出于安全原因,我有很多密钥需要参数化。 如果我在文件中添加如下内容:

<connectionStrings>
    <add name="Default"
        connectionString="__AzureDBConnectionString__"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<appSettings>
        <add key="mailToken" value="__mailToken__" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>

它不起作用。在部署的web.config中,我看到value=“mailToken”,也就是说,它没有被存储在发布管道中的变量替换(如连接字符串)。 在经历了大约一天的痛苦之后,我发现唯一可以像那样替换的参数是连接字符串(因为这是由build“Web.SetParameters.xml”文件自动生成的唯一参数集)。我试图按照一些来源的建议绕过parameter.xml文件,但没有成功。重要的是,所有变量都取自发布管道变量列表(而不是在配置文件中硬编码)。
有人能建议一种正确的方法来替换appSetting中的值或其他解决方法(无替换令牌任务等)吗?

根据您的描述,您正在使用Web部署包(Web.SetParameters.xml),默认情况下,Web.Release.config中的appSettings不会添加到Web.SetParameters.xml文件中,但是在生成web部署包时会直接替换web.config文件中的值,因此web.config文件(在zip包文件中)中的mailToken的值将是mailToken

因此,替换它的简单方法是在IIS Web App DeployAzure App Service Deploy任务的文件转换和变量替换选项部分使用XML变量替换。您只需将名称相同的变量key value
mailToken
)添加到发布定义中,并选中XML变量替换选项。(不需要在Web.Release.config中进行配置)


更多信息,您可以参考:

我最近也遇到了类似的问题,直到今天我才遇到了一个问题。我的主要问题是在我的项目目录中定义parameters.xml文件,因为这与web deploy的vsts任务发布任务中定义的一些自动替换逻辑冲突。我只为不会通过VST自动处理的属性定义parameters.xml

此外,我建议将此msbuild参数添加到“build Solution”下的构建作业中,这将防止VST在web部署包的setparameters.xml文件中添加连接字符串

/p:AutoParameterizationWebConfigConnectionStrings=false
最终,如果这不起作用,您将希望在您的环境变量中将System.debug启用为true,这样您就可以确切地看到在发布过程中发生了什么。不幸的是,您将在system.debug上看到的调试日志不是很好,但它们可能会有所帮助


祝你好运

你能解决这个问题吗?