You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# MSBuild条件编译实现生成是否含引用Nuget的分部类的两个DLL

实现双版本类库编译的MSBuild配置方案

你可以通过条件化控制编译流程实现需求,直接修改你的.csproj项目文件即可,完整配置逻辑如下:

1. 基础属性配置

首先加入自定义控制属性和编译常量,用于区分两种编译模式:

<PropertyGroup>
  <!-- 默认为true,生成带NuGet依赖和partial类的版本 -->
  <IncludeOptionalDependency Condition="'$(IncludeOptionalDependency)' == ''">true</IncludeOptionalDependency>
  <!-- 定义编译常量,你可以在代码中用 #if HAS_OPTIONAL_DEPENDENCY 做额外的条件判断 -->
  <DefineConstants Condition="'$(IncludeOptionalDependency)' == 'true'">$(DefineConstants);HAS_OPTIONAL_DEPENDENCY</DefineConstants>
  <!-- 区分两个版本的输出文件名,避免覆盖 -->
  <AssemblyName Condition="'$(IncludeOptionalDependency)' == 'false'">$(AssemblyName).NoDependency</AssemblyName>
  <!-- 原有其他属性保持不变,比如TargetFramework是netstandard2.1 -->
  <TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>

2. 条件化引用NuGet包

给你要控制的NuGet包引用添加条件判断:

<ItemGroup>
  <!-- 其他固定引用保持不变 -->
  <PackageReference 
    Include="你使用的NuGet包名" 
    Version="对应版本号" 
    Condition="'$(IncludeOptionalDependency)' == 'true'" 
  />
</ItemGroup>

3. 条件化排除partial类

在编译时按需排除不需要的partial类文件:

<ItemGroup>
  <Compile 
    Remove="你的partial类文件路径.cs" 
    Condition="'$(IncludeOptionalDependency)' == 'false'" 
  />
</ItemGroup>

(可选)配置一键生成双版本的目标

如果需要一次执行同时生成两个版本,可以加入以下构建目标:

<Target Name="BuildAll" DependsOnTargets="Clean">
  <MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" Properties="IncludeOptionalDependency=true" />
  <MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" Properties="IncludeOptionalDependency=false" />
</Target>

编译使用方式

  • 生成带依赖版本:直接执行dotnet build,或在Visual Studio中正常构建即可
  • 生成无依赖版本:执行dotnet build -p:IncludeOptionalDependency=false
  • 一键生成两个版本:执行dotnet build -t:BuildAll

内容的提问来源于stack exchange,提问作者aherrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:45:02