以下是该方案: 我有一个网站,其中包含web.config文件以及许多其他特定于环境的配置文件,如Web.Staging.config / Web.Release.config / Web.OnPrem.config 现在,我已经在我的网站项目的csproj文件中配置了BeforeBuild目标:
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
当我在发布模式下设置竹子来构建和创建工件时,这很有效(因此部署的应用程序具有来自web.Release.config的转换后的web.config文件但是,当我更改竹子以使用OnPrem构建和创建工件时配置,它不会正确转换web.config文件。
当我说设置Bamboo以构建OnPrem配置时,我实际上已将配置选项更改为:
/p:Configuration=OnPrem
而且,我已将BambooBuild.proj更改为
<ConfigurationToBuild Include="OnPrem|Any CPU">
<FlavorToBuild>OnPrem</FlavorToBuild>
<PlatformToBuild>Any CPU</PlatformToBuild>
</ConfigurationToBuild>
我在这里缺少什么?
答案 0 :(得分:0)
因为您一次只能为一个活动配置进行构建,所以您要构建的任何配置都将被替换为$(Configuration)变量。
我通常要做的是:
您可以从命令行使用MSBuild来运行转换。 (注意,此处唯一的区别是Web.Staging.config或Web.Release.config):
Msbuild.exe /target:Transform "/property:TransformInputFile=path\to\Web.config;TransformFile=path\to\Web.Staging.config;TransformOutputFile=path\to\artefacts\Web.Staging.config" MSBuild.xml
Msbuild.exe /target:Transform "/property:TransformInputFile=path\to\Web.config;TransformFile=path\to\Web.Release.config;TransformOutputFile=path\to\artefacts\Web.Release.config" MSBuild.xml
适合这样使用的MSBuild.xml文件将包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
DefaultTargets="Deploy"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Target Name="Transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)"
StackTrace="$(StackTraceEnabled)" />
</Target>
</Project>