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
相关产品推荐
相关产品推荐

