c# - 如何阻止 msbuild 在 azure devops 管道中转换 web.config
问题描述
我正在使用一个 ASP.NET MVC 应用程序,我们已经开始将它升级到 azure devops(代码和管道)。我们有多个 web.config 文件,每个环境(测试、发布等)一个。之前,我们已经构建了本地发布系统并将 zip 导入 IIS。在本地发布(右键单击,发布)期间,Visual Studio 获取与当前构建配置(在我们的示例中为发布)相关的 Web.*.config 文件,并将其与基本 Web.config 合并到单个 Web.config 文件中。
使用管道时,我们的目标不是在构建步骤中转换 Web.config 文件,而是在发布步骤中。我们想要构建 1 个包,并在我们的测试、登台和生产服务器上使用相同的包,而不是使用发布管道中的xml 转换设置来将不同的 web.config 文件传递到不同的环境。如果从测试到发布一直测试相同的二进制文件,我们会对我们的过程更有信心。
但是,每当我使用“构建解决方案”步骤时,它总是会转换 Web.config 文件,无论我使用哪种设置。
到目前为止我所做的:我查看了 MS 文档,但没有发现任何相关内容。我搜索了 SO 并找到了一些线程,例如这个:web.config transformation does not work on build server说你需要TransformXml
在你的 .csproj 文件中添加一个元素才能使 XML 转换工作,但我们没有一,所以我不能删除它,看看是否有帮助:) 大多数线程似乎建议将不同的标志传递给 msbuild 以阻止它转换 xml 文件(如下所列),但似乎没有一个有效。我找到了一种解决方法,它不适用于我们的项目设置方式。我已经按照这个 github 问题删除了<DependentUpon>
相关 Web.*.config 文件的标签。不幸的是,没有任何帮助。
这是构建步骤的 YAML:
steps:
- task: VSBuild@1
displayName: 'Build solution'
inputs:
solution: '**\Source\[redacted]Solution\*.sln'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\" /p:PreBuildEvent="" /p:TransformWebConfigEnabled=false /p:AutoParameterizationWebConfigConnectionStrings=false /p:MarkWebConfigAssistFilesAsExclude=false /p:ProfileTransformWebConfigEnabled=false'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
这些是之前在项目中设置的构建标志:
/p:DeployOnBuild=true
/p:WebPublishMethod=Package
/p:PackageAsSingleFile=true
/p:SkipInvalidConfigurations=true
/p:PackageLocation="$(build.artifactstagingdirectory)\\"
/p:PreBuildEvent=""
这些是我尝试在构建管道中尝试禁用 Web.Config 转换的标志,但似乎都不起作用(尝试了不同的组合):
/p:TransformWebConfigEnabled=false
/p:AutoParameterizationWebConfigConnectionStrings=false
/p:MarkWebConfigAssistFilesAsExclude=false
/p:ProfileTransformWebConfigEnabled=false
那么,我需要将哪些标志传递给 Azure Pipelines 中的 msbuild 以使其不转换 Web.*.config 文件?
解决方案
我需要将哪些标志传递给 Azure Pipelines 中的 msbuild 以使其不转换 Web.*.config 文件?
您可以尝试使用 MSBuild 参数:
/p:IsTransformWebConfigDisabled=true
.
作为测试,它在我这边运行良好:
没有/p:IsTransformWebConfigDisabled=true
,我的测试web.config
将转换为:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\WebAppTransform.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" hostingModel="InProcess"></aspNetCore>
</system.webServer>
</configuration>
添加/p:IsTransformWebConfigDisabled=true
,测试web.config
不会被转换:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
</aspNetCore>
</system.webServer>
</configuration>
希望这可以帮助。
推荐阅读
- unity3d - Unity 2D 物理材料 2D 问题弹性
- typescript - 打字稿从不输入条件
- selenium - jmeter webdriver没有拾取vars值
- ios - 仅清除颤动 Firebase 消息中的选定通知
- javascript - 在 Vue Router Navigation Guard 中使用 axios
- python - 如何将“flask”配置为仅从浏览器运行文件?
- python - Flask Server 不加载音频文件
- json - Kafka Connect - 如何发送和处理嵌套的 JSON?
- html - 如何使我的翻转卡片页面响应?
- openal - OpenAL 是开源的吗?源代码在哪里?