如何阻止 msbuild 在 azure devops 管道中转换 web.config

问题描述 投票:0回答:2

我正在使用 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 conversion does not work on build server 说你需要在 .csproj 文件中使用

TransformXml
emelent 才能使 XML 转换工作,但是我们没有,所以我无法删除它并看看是否有帮助:) 大多数线程似乎建议将不同的标志传递给 msbuild 以阻止它转换 xml 文件(如下所列),但似乎没有一个起作用。我发现了一个“解决方法”,但它并不真正适合我们项目的设置方式。我已经按照 this github issues 删除了相关 Web.*.config 文件的 <DependentUpon> 标签。不幸的是,没有任何帮助。

这是构建步骤的 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 文件?

c# msbuild azure-devops azure-pipelines
2个回答
6
投票
我需要将哪些标志传递给 Azure Pipelines 中的 msbuild 以使其不转换 Web.*.config 文件?

您可以尝试使用 MSBuild 参数:

/p:IsTransformWebConfigDisabled=true

(ASP.NET Core)
(对于使用 .NET Framework 构建的旧版 ASP.NET 应用程序,请使用

/p:TransformWebConfigEnabled=false

作为测试,它在我这边工作得很好:

如果没有

/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>

希望这有帮助。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.