我有一个成功运行并在我的计算机上启动的ASP.NET(4.7.2)应用程序。此应用程序具有一个web.config文件,其中包含以下内容:
Web.config
<appSettings>
<add key="username" value="someone@email.com" />
<add key="port" value="25" />
</appSettings>
这些是我在工作时要使用的配置值。但是,当出于测试目的将应用程序部署到Azure应用程序服务时,我想更改port
值。因此,我添加了一个名为“ Web.Test.config”的配置转换,内容如下:
Web.Test.config
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="port" value="58" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>
</configuration>
不幸的是,似乎转换没有发生。我已经准备好仅在“发布”期间进行转换。目前,我正在通过Azure DevOps管道进行部署,该管道包括以下任务:
NuGet
根据.sln文件恢复软件包
MSBuild
构建定义我的ASP.NET应用程序的.csproj。 “配置”属性设置为“测试”。
Azure App Service部署
尝试将ASP.NET应用程序作为“ Windows上的Web应用程序”部署到我的部署槽中。 “包或文件夹”设置为MyAspNetApp
。
尽管此构建管道成功运行,但配置转换似乎并未生效。如何通过Azure DevOps生成管道“发布”到Azure应用服务,以便生成我的配置转换。
答案 0 :(得分:1)
对于App.Config或Web.Config(XML)文件,有两个选项。
Sample XML variable substitution
对于使用json配置的现代.NET应用程序,变量替换是唯一的方法。尽管thread
表示即使File Transform任务承诺对两者都起作用,但仍不清楚对于JSON变量,您必须输入完整的路径层次结构
答案 1 :(得分:0)
答案 2 :(得分:0)
如何通过Azure DevOps生成管道向Azure应用服务“发布”,以便生成我的配置转换。
首先,我们需要确保web.*.config
文件包含在构建输出中,并且文件已正确转换。首先在本地检查。
此外,以下步骤应会有所帮助:
删除web.dev/stest/atest/prod.config文件的嵌套 通过删除嵌套的csproj 中的元素 VS的附加组件或VS 2017中的“文件嵌套”上下文菜单项
文档XML transformation notes中的注释指出:
默认情况下,MSBuild在生成网站时会应用转换 包,如果元素已经存在 * .csproj文件中的转换文件。在这种情况下,Azure应用程序 服务部署任务将失败,因为没有其他操作了 转换应用于Web.config文件。因此它是 建议从所有 使用XML时转换文件以禁用任何构建时配置 转变。
确保*.config
文件具有'Copy to Output Directory
'
属性设置为newer
还是always
在本地构建解决方案并检查bin \ release的内容
文件夹并确保包含web.*.config
文件
在VSTS中运行构建,并确保包含web.*.config
文件
在压缩包中
关于how to Using XML Transformations when deploying to Azure App Service using VSTS,有一个很棒的文档,您可以检查一下更多细节。
顺便说一句,由于您只需要更改port
值,因此可以在Azure App Service部署任务上使用选项XML variable substitution
。
详细信息的门票:How to transform Web.Config file 'Properly' with VSTS!
希望这会有所帮助。