如何在特定环境中阻止msbuild配置转换?

时间:2018-01-24 06:20:27

标签: tfs msbuild

我有一个azure webjob项目,它使用config转换来创建dev / test / release配置。我们使用TFS进行Azure的CI / CD部署。我想让MSBuild为dev应用转换,以便我们可以在本地进行调试。但是,当我们在CI / CD管道中构建TFS时,我需要在构建步骤中禁用配置转换。

TFS有一个"应用XML转换"发布步骤中的复选框,这是我们希望应用转换的位置,因为我们在发布期间设置了环境变量。遗憾的是,这不起作用,因为转换已在构建期间应用,因此发布工件只有完成的输出文件,而不是单独的转换文件。

我已尝试编辑.csproj文件以禁用转换。我假设变换是由项目文件的以下部分执行的:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')">
    <!--Generate transformed app config in the intermediate directory-->
    <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" />
    <!--Force build process to use the transformed configuration file from now on.-->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="App.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>
  <!--Override After Publish to support ClickOnce AfterPublish. Target replaces the untransformed config file copied to the deployment directory with the transformed one.-->
  <Target Name="AfterPublish">
    <PropertyGroup>
      <DeployedConfig>$(_DeploymentApplicationDir)$(TargetName)$(TargetExt).config$(_DeploymentFileMappingExtension)</DeployedConfig>
    </PropertyGroup>
    <!--Publish copies the untransformed App.config to deployment directory so overwrite it-->
    <Copy Condition="Exists('$(DeployedConfig)')" SourceFiles="$(IntermediateOutputPath)$(TargetFileName).config" DestinationFiles="$(DeployedConfig)" />
  </Target>

我尝试添加条件,例如&#34; $(配置)| $(平台)&#39; ==&#39;调试| AnyCPU&#39;&#34;这些部分,它没有帮助(转换仍然适用于所有三个环境)。我甚至完全评论了这一部分,我仍然得到了变换。这给我留下了三个问题:

  1. 如何禁用配置转换?
  2. 我怎样才能有条件 禁用它们,以便在VS中调试时仍然应用它们?
  3. 这是 正确的方法,还是有更好的方法来获得正确的方法 在TFS 2017中使用CI / CD时应用转换?

2 个答案:

答案 0 :(得分:12)

要在构建期间禁用配置转换,只需在Build任务的MSBuild Arguments部分中添加参数future_connections["Jaccard"] = [ tuple(nx.jaccard_coefficient(G,edge)) for edge in future_connections['index']] 即可。如果要在发布期间更新连接字符串,还需要添加/p:TransformWebConfigEnabled=Falseenter image description here

此外,您需要更新项目文件,以便在生成msdeploy软件包进行部署时,Web.XXX.Config文件将包含在软件包中。

  1. 更改&#34;构建操作&#34;来自&#34;无&#34;的配置文件到&#34;内容&#34;。
  2. 卸载项目文件,并为配置文件删除 /p:AutoParameterizationWebConfigConnectionStrings=False标记。 enter image description here

答案 1 :(得分:3)

有了这些“ MSBuild参数”,它对我有用:

  • / p:AutoParameterizationWebConfigConnectionStrings = false
  • / p:DeployOnBuild = true
  • / p:MarkWebConfigAssistFilesAsExclude = false
  • / p:PackageAsSingleFile = false
  • / p:PackageLocation =“ $(build.artifactstagingdirectory)\\”
  • / p:ProfileTransformWebConfigEnabled = false
  • / p:SkipInvalidConfigurations = true
  • / p:TransformWebConfigEnabled = false
  • / p:WebPublishMethod =文件系统

重要的是

  • / p:AutoParameterizationWebConfigConnectionStrings = false
  • / p:MarkWebConfigAssistFilesAsExclude = false
  • / p:ProfileTransformWebConfigEnabled = false
  • / p:TransformWebConfigEnabled = false

当我还添加以下内容时,它开始起作用:

  • / p:ProfileTransformWebConfigEnabled = false

感谢@Eddie Chen-MSFT和@Wessel T。

关于汉斯