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

.NET Framework 4.8项目CPM集中包管理功能异常求助

问题解决:Visual Studio添加NuGet包时未写入Directory.Packages.props(.NET Framework 4.8 + CPM)

问题重现

将.NET Framework 4.8项目从packages.json迁移到Central Package Management(CPM)后,通过Visual Studio 2022包管理器UI添加新NuGet包时,版本号会直接写入.csproj的PackageReference中,而非更新根目录的Directory.Packages.props。

已完成的迁移状态:

  • 根目录生成Directory.Packages.props,启用了<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  • 所有.csproj的PackageReference已移除版本号

核心原因

1. Directory.Packages.props存在XML语法错误

你提供的Directory.Packages.props中,<PropertyGroup>结束后有一个多余的</ItemGroup>标签,导致整个文件无法被VS正确解析,CPM配置失效,包管理器 fallback 到传统版本管理方式。

2. 非SDK风格.NET Framework项目需显式导入props文件

传统.NET Framework项目(非SDK风格)不会自动加载根目录的Directory.Packages.props,需要手动导入才能启用CPM。

解决步骤

步骤1:修复Directory.Packages.props的XML语法

修正后的正确结构如下,移除多余的</ItemGroup>,确保PackageVersion项包裹在正确的<ItemGroup>内:

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
  </PropertyGroup>
  <ItemGroup>
    <PackageVersion Include="System.ValueTuple" Version="4.5.0" />
    <!-- 其他包版本项 -->
  </ItemGroup>
</Project>

步骤2:在.csproj中显式导入Directory.Packages.props

打开每个.NET Framework项目的.csproj文件,在文件顶部添加导入语句(根据项目与props文件的相对路径调整):

<!-- 项目在根目录下时直接导入 -->
<Import Project="Directory.Packages.props" />

<!-- 项目在子目录(如src/Project1)时使用相对路径 -->
<Import Project="../Directory.Packages.props" />

步骤3:清理缓存并重启Visual Studio

  1. 清理NuGet缓存:打开Visual Studio → 工具 → NuGet包管理器 → 包管理器设置 → 清除所有NuGet缓存
  2. 关闭并重新打开Visual Studio,重新加载解决方案

步骤4:优先使用dotnet CLI添加包(备选方案)

如果UI仍有问题,使用dotnet CLI命令添加包,CLI对CPM的支持更稳定:

# 在解决方案根目录执行,替换<项目路径>为实际项目相对路径
dotnet add <项目路径> package Humanizer

执行后,版本号会自动写入Directory.Packages.props,.csproj中仅生成无版本的PackageReference。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:03:18