如何仅在指定平台构建目标csproj?Windows下跳过非Windows项目
在Windows系统下避免构建Linux和macOS项目的几种方案
1. 给非Windows项目加构建条件(推荐)
直接修改Linux和macOS项目的.csproj文件,让它们只在对应平台下才参与构建:
- 打开
Project.Linux.csproj和Project.MacOs.csproj - 在根节点
<Project>上添加Condition属性,限定仅在目标OS下生效:
<!-- Project.Linux.csproj --> <Project Sdk="Microsoft.NET.Sdk" Condition="$([MSBuild]::IsOsPlatform('Linux'))"> <!-- 项目原有内容不变 --> </Project> <!-- Project.MacOs.csproj --> <Project Sdk="Microsoft.NET.Sdk" Condition="$([MSBuild]::IsOsPlatform('OSX'))"> <!-- 项目原有内容不变 --> </Project>
这样在Windows上构建整个解决方案时,这两个项目会被MSBuild自动忽略,完全不参与流程。
2. 在Visual Studio里手动排除构建
如果你平时用Visual Studio开发,直接在配置里关掉非Windows项目的构建开关:
- 右键解决方案 → 选择属性
- 进入配置属性 → 配置管理器
- 先确认"活动解决方案平台"是你当前用的(比如
x64) - 找到
Project.Linux和Project.MacOs,取消它们对应的生成复选框 - 点击确定保存,之后在Windows下构建就不会碰这两个项目了
3. 用dotnet命令行精准控制构建
如果习惯用命令行构建,直接指定只编译Windows项目就行:
dotnet build Project.Windows.csproj
或者构建整个解决方案时排除不需要的项目:
dotnet build --exclude Project.Linux.csproj --exclude Project.MacOs.csproj
4. 用全局配置文件统一管理
在解决方案根目录新建Directory.Build.props文件,添加全局规则,让Windows环境下自动移除对非Windows项目的引用:
<Project> <ItemGroup> <ProjectReference Remove="Project.Linux.csproj" Condition="$([MSBuild]::IsOsPlatform('Windows'))" /> <ProjectReference Remove="Project.MacOs.csproj" Condition="$([MSBuild]::IsOsPlatform('Windows'))" /> </ItemGroup> </Project>
这种方式适合项目较多的场景,一次配置后所有子项目都会遵循规则。
内容的提问来源于stack exchange,提问作者Rick Nijhuis
相关产品推荐
相关产品推荐

