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

基于.NET目标框架的MSBuild条件PackageReference配置问题

.NET Framework多版本兼容类库构建问题与解决方法

概述

我正在构建一个同时兼容.NET Framework 4.0遗留应用和.NET Framework 4.6.1新应用的类库。新增的数据库/Hibernate代码依赖.NET Framework 4.6.1(因NuGet包FluentNHibernate 3.1.0要求该版本及以上),但遗留应用无需此功能。

目标

实现同一代码库与Git主分支编译出兼容两种框架的类库版本,目前已完成以下配置:

  • 定义框架适配常量FWK40
  • 通过条件设置TargetFrameworkVersion
  • 按框架版本排除编译文件

相关.csproj配置如下:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug.Net40|AnyCPU'">
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\Debug.Net40\</OutputPath>
    <DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.0'">FWK40</DefineConstants>
 </PropertyGroup>
 <ItemGroup>
    <Compile Include="Database\GeneralSQL.cs" Condition="'$(TargetFrameworkVersion)' != 'v4.0'" />
    <Compile Include="Database\NamingStrategy.cs" Condition="'$(TargetFrameworkVersion)' != 'v4.0'" />
 </ItemGroup>
 <ItemGroup>
    <PackageReference Include="FluentNHibernate" Condition="'$(TargetFramework)' != 'net40'" >
        <Version>3.1.0</Version>
    </PackageReference>
</ItemGroup>

问题

出现NuGet错误NU1202:FluentNHibernate 3.1.0与net40不兼容。该错误导致MSBuild.exe执行失败,阻碍CI/CD流水线运行,且无法实现PackageReference的条件引入。

已尝试方案

  • 使用$(TargetFrameworkVersion)作为条件,无效;
  • 按官方文档用$(TargetFramework)作为条件,仍无效,且未找到该属性具体值,反向条件也无效果;
  • 手动定义$(TargetFramework)属性,导致Visual Studio配置管理器失效,项目无法正常加载。

最终解决方法

通过Choose块实现条件引入PackageReference,配置如下:

<PropertyGroup>
    <IsTargetNet40 Condition=" '$(Configuration)' == 'Debug.net40' ">true</IsTargetNet40>
</PropertyGroup>
...
<Choose>
    <When Condition=" '$(IsTargetNet40)' == 'false' ">
      <ItemGroup>
        <PackageReference Include="FluentNHibernate" Version="3.1.0" />
        <PackageReference Include="FluentMigrator">
          <Version>3.3.2</Version>
        </PackageReference>
        <PackageReference Include="FluentMigrator.Runner">
          <Version>3.3.2</Version>
        </PackageReference>
        <PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore">
          <Version>7.0.0</Version>
        </PackageReference>
      </ItemGroup>
    </When>
  </Choose>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:20:31