web.config 基于解决方案配置的转换

web.config transformation based on solution configuration

Morning/afternoon/evening全部。

我正在尝试应用 web.config 转换作为 Jenkins 构建的一部分。通过将以下内容添加到我的 csproj,我得到了转换 运行ning:

<Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>

这很棒,除了当解决方案是 运行 本地时它现在会转换文件这一事实。所以我试图通过添加一个条件来防止这种情况只对 Jenkins 构建应用转换。我添加了一个解决方案配置,设置发布配置文件以使用它,然后尝试添加一个条件...

<Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config"  Condition="'$(Configuration)' == 'Debug Build'" />
</Target>

...而且......没用 :-(.

事实上,当添加此条件时,转换完全停止工作(我可以通过在本地更改解决方案配置并构建和观察本地 web.config 文件永远不会更改来断言,无论选择哪个选项) .

当且仅当解决方案配置设置为 'Debug Build' 时如何获得转换 运行?

提前致谢。

如果您在构建服务器上使用发布配置文件,则可以使用 profile specific web.config transform 添加您的自定义转换,而无需修改项目文件。您只需在解决方案资源管理器中右键单击您的发布配置文件,然后 select Add config transform.

生成的转换文件将命名为 web.[publishprofile].config,此转换将在配置特定 (Debug/Release) 转换后 运行。它只会在 publishing/packaging 使用该发布配置文件时执行。


如果发布配置文件转换不符合您的需要,只需在 jenkins 构建服务器上添加 /p:CustomConfigTransform=buildserver msbuild 参数并在您的构建脚本中测试此 属性。

<Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(CustomConfigTransform).config" Destination="Web.config"  Condition="'$(CustomConfigTransform)' != ''" />
</Target>

无需添加新的构建配置。另外我不确定是否支持转换到同一个文件。