You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过MSBuild组合配置实现跨Windows与Linux DevContainer环境并行构建并排除指定文件夹

如何通过MSBuild组合配置实现跨Windows与Linux DevContainer环境并行构建并排除指定文件夹

嘿,我刚好搞定了在Windows本地Visual Studio和Linux DevContainer里并行构建项目的问题,核心就是靠MSBuild的条件配置给不同环境分配独立的构建输出目录,这样两边的产物完全隔离,不会互相干扰。下面是具体的实现方案:

核心配置文件:Directory.Build.props

直接在项目根目录创建(或修改)这个文件就行,MSBuild会自动让所有子项目继承它的配置,不用挨个项目去改,特别省心。

<Project>
  <!-- Windows 环境下的构建配置 -->
  <PropertyGroup Condition=" '$(OS.StartsWith(`Windows`))' == 'true' ">
    <!-- 指定Windows环境的中间输出目录 -->
    <MSBuildProjectExtensionsPath>$(MSBuildThisFileDirectory)$(MSBuildProjectName)\obj-windows\</MSBuildProjectExtensionsPath>
    <!-- 指定Windows环境的最终输出目录 -->
    <BaseOutputPath>$(MSBuildThisFileDirectory)$(MSBuildProjectName)\bin-windows\</BaseOutputPath>
    <!-- 临时屏蔽关于BaseIntermediateOutputPath的MSB3539警告 -->
    <NoWarn>MSB3539</NoWarn>
  </PropertyGroup>

  <!-- Linux DevContainer 环境下的构建配置 -->
  <PropertyGroup Condition=" '$(OS.StartsWith(`Windows`))' != 'true' ">
    <!-- 指定Linux环境的中间输出目录 -->
    <MSBuildProjectExtensionsPath>$(MSBuildThisFileDirectory)$(MSBuildProjectName)/obj-linux/</MSBuildProjectExtensionsPath>
    <!-- 指定Linux环境的最终输出目录 -->
    <BaseOutputPath>$(MSBuildThisFileDirectory)$(MSBuildProjectName)/bin-linux/</BaseOutputPath>
  </PropertyGroup>
</Project>

配置细节说明

  • 环境自动识别:通过$(OS.StartsWith(Windows))这个判断条件,MSBuild会自动区分当前是Windows本地还是Linux DevContainer环境,自动切换对应配置
  • 独立产物目录:给Windows分配obj-windows/bin-windows,Linux分配obj-linux/bin-linux,彻底避免两边构建产物互相覆盖的问题,并行构建完全无冲突
  • 路径适配:Windows用系统习惯的反斜杠\,Linux用正斜杠/,符合各自系统的路径规范
  • 临时警告处理:Windows环境里的NoWarn>MSB3539是临时屏蔽关于BaseIntermediateOutputPath的提示,等后续项目调整或MSBuild更新后可以移除

备注:内容来源于stack exchange,提问作者Pieterjan

火山引擎 最新活动