MSBuild 条件阻止 app.config XML 转换
MSBuild condition to prevent app.config XML transform
我正在使用 'SlowCheetah' VS 扩展根据项目配置将我们的 app.config 转换为不同的值。因此,'Debug' 配置会产生一个 app.config,其值适合 Dev/Qa 用户,而 'Release' 构建会产生一个 app.config,具有生产值。
.csproj 包含这样的部分:
<ItemGroup>
<None Include="App.config">
<SubType>Designer</SubType>
<TransformOnBuild>true</TransformOnBuild>
</None>
<None Include="App.Debug.config">
<DependentUpon>App.config</DependentUpon>
<IsTransformFile>True</IsTransformFile>
<SubType>Designer</SubType>
</None>
<None Include="App.Release.config">
<DependentUpon>App.config</DependentUpon>
<IsTransformFile >True</IsTransformFile>
</None>
<None Include="packages.config" />
<None Include="Properties\SlowCheetah\SlowCheetah.Transforms.targets" />
而 msbuild 逻辑主要包含在 'SlowCheetah.Transforms.targets' 文件中。我的文件正在正确转换。
我想防止开发人员不小心 运行 在 Visual Studio 中构建 'Release' 并且无意中 运行 我的应用程序带有生产配置文件。我的想法是使用 msbuild 条件,可能类似于:
Condition=" '$(BuildingInsideVisualStudio)'=='true' "
我已尝试在 .csproj 文件的多个位置使用此条件,但均未成功。我怀疑如果我修改 'SlowCheetah.Transforms.targets' 文件本身,我可以让它工作,但不应根据顶部的评论修改该文件。
理想情况下,我希望 Visual Studio 内部构建的所有配置都使用我的调试配置文件,并且 'Release' 在 Visual Studio 外部构建(例如在持续集成服务器上构建)以使用 Prod app.config,但我满足于能够防止 Visual Studio 中的 'Release' 意外构建 运行。任何关于 if/how 这可以实现的建议都将受到赞赏。
在 </Project>
之前添加:
<Target Name="BeforeBuild">
<Error Condition=" '$(BuildingInsideVisualStudio)'=='true' And '$(Configuration)'=='Release' "
Text="JMc is so mad at you you trying to build using the Release configuration from Visual Studio." />
</Target>
我正在使用 'SlowCheetah' VS 扩展根据项目配置将我们的 app.config 转换为不同的值。因此,'Debug' 配置会产生一个 app.config,其值适合 Dev/Qa 用户,而 'Release' 构建会产生一个 app.config,具有生产值。
.csproj 包含这样的部分:
<ItemGroup>
<None Include="App.config">
<SubType>Designer</SubType>
<TransformOnBuild>true</TransformOnBuild>
</None>
<None Include="App.Debug.config">
<DependentUpon>App.config</DependentUpon>
<IsTransformFile>True</IsTransformFile>
<SubType>Designer</SubType>
</None>
<None Include="App.Release.config">
<DependentUpon>App.config</DependentUpon>
<IsTransformFile >True</IsTransformFile>
</None>
<None Include="packages.config" />
<None Include="Properties\SlowCheetah\SlowCheetah.Transforms.targets" />
而 msbuild 逻辑主要包含在 'SlowCheetah.Transforms.targets' 文件中。我的文件正在正确转换。
我想防止开发人员不小心 运行 在 Visual Studio 中构建 'Release' 并且无意中 运行 我的应用程序带有生产配置文件。我的想法是使用 msbuild 条件,可能类似于:
Condition=" '$(BuildingInsideVisualStudio)'=='true' "
我已尝试在 .csproj 文件的多个位置使用此条件,但均未成功。我怀疑如果我修改 'SlowCheetah.Transforms.targets' 文件本身,我可以让它工作,但不应根据顶部的评论修改该文件。
理想情况下,我希望 Visual Studio 内部构建的所有配置都使用我的调试配置文件,并且 'Release' 在 Visual Studio 外部构建(例如在持续集成服务器上构建)以使用 Prod app.config,但我满足于能够防止 Visual Studio 中的 'Release' 意外构建 运行。任何关于 if/how 这可以实现的建议都将受到赞赏。
在 </Project>
之前添加:
<Target Name="BeforeBuild">
<Error Condition=" '$(BuildingInsideVisualStudio)'=='true' And '$(Configuration)'=='Release' "
Text="JMc is so mad at you you trying to build using the Release configuration from Visual Studio." />
</Target>