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

混合NuGet与项目引用时解决NU1106依赖冲突问题

解决项目引用中的NuGet包冲突问题(无需拆分项目)

问题背景

项目A和B均为Windows服务,A需引用B获取Events类用于MQTT序列化传输,但添加项目引用后出现**NU1106(包版本冲突)和MSB4018(依赖解析任务失败)**错误,根源是两个项目的相同NuGet包版本不一致。

解决方案

1. 统一所有项目的NuGet包版本

通过目录级配置文件统一管理包版本,避免不同项目使用不一致版本:

  • 在解决方案根目录创建Directory.Build.props文件,内容如下:
    <Project>
      <PropertyGroup>
        <!-- 定义统一版本变量 -->
        <MicrosoftExtensionsVersion>6.0.1</MicrosoftExtensionsVersion>
        <SerilogVersion>2.12.0</SerilogVersion>
        <StatelessVersion>5.13.0</StatelessVersion>
      </PropertyGroup>
      <ItemGroup>
        <!-- 统一所有相关包的版本 -->
        <PackageReference Update="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Configuration.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Hosting.WindowsServices" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Microsoft.Extensions.Logging.EventLog" Version="$(MicrosoftExtensionsVersion)" />
        <PackageReference Update="Serilog" Version="$(SerilogVersion)" />
        <PackageReference Update="Serilog.Extensions.Hosting" Version="5.0.1" />
        <PackageReference Update="Serilog.Extensions.Logging" Version="3.1.0" />
        <PackageReference Update="Serilog.Settings.Configuration" Version="3.4.0" />
        <PackageReference Update="Serilog.Sinks.Console" Version="4.1.0" />
        <PackageReference Update="Serilog.Sinks.Debug" Version="2.0.0" />
        <PackageReference Update="Serilog.Sinks.File" Version="5.0.0" />
        <PackageReference Update="Stateless" Version="$(StatelessVersion)" />
      </ItemGroup>
    </Project>
    
  • 所有项目会自动继承该配置,确保相同包版本一致。

2. 阻止项目引用的依赖传递

修改A项目中对B的项目引用,避免B的NuGet依赖传递到A,减少冲突概率:

<ProjectReference Include="..\Projects.Robinson\Projects.Robinson.csproj" PrivateAssets="all" />
  • PrivateAssets="all"表示仅引用B的编译输出类库,不继承B的任何NuGet依赖,A将使用自身定义的包版本。

3. 清理并重建项目

执行以下命令彻底清理和重建:

dotnet clean
dotnet restore
dotnet build
  • 若使用Visual Studio,右键解决方案依次选择「清理解决方案」→「还原NuGet包」→「重建解决方案」。

4. 排查重复或冲突的包引用

使用命令查看项目的所有包依赖,找出重复或版本冲突的项:

dotnet list package
  • 移除项目文件中重复添加的PackageReference,确保同一包仅被引用一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:12:06