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>