ASP.NET Core 8.0 MVC类库被引用时自动添加异常PackageReference项问题
排查与解决方案
问题出在你的NuGet包本身的元数据或项目打包配置上,这些<PrivateAssets>和<IncludeAssets>是包自带的依赖属性,而非引用方自动生成的。以下是具体排查和修复步骤:
1. 检查类库项目的核心配置
打开你的ASP.NET Core 8.0 MVC类库项目文件(.csproj),排查以下设置:
- 确认是否存在
<DevelopmentDependency>true</DevelopmentDependency>:这个属性会将包标记为开发依赖,NuGet会自动给引用方加上<PrivateAssets>all</PrivateAssets>。如果有,将其改为false。 - 检查是否存在全局默认资产配置:比如
<DefaultPrivateAssets>all</DefaultPrivateAssets>或<DefaultIncludeAssets>,这类全局设置会被打包到NuGet元数据中,导致引用时自动继承。若不需要,直接删除这些配置。
示例修改后的项目配置片段:
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> <IsPackable>true</IsPackable> <!-- 确保没有下面这行,或设为false --> <!-- <DevelopmentDependency>false</DevelopmentDependency> --> </PropertyGroup>
2. 检查NuGet包的nuspec元数据
用NuGet Package Explorer打开你的MyDll包,查看以下内容:
- 在元数据标签下,确认
<developmentDependency>是否为true,如果是改为false。 - 切换到文件标签,检查输出dll的条目是否带有
privateAssets="all"属性,若有则删除该属性。
示例正确的nuspec文件片段:
<metadata> <id>MyDll</id> <version>2.0.57</version> <developmentDependency>false</developmentDependency> <!-- 其他元数据 --> </metadata> <files> <file src="lib/net8.0/MyDll.dll" target="lib/net8.0" /> </files>
3. 重新打包并验证
修改配置后,重新生成NuGet包:
- 若用
dotnet pack,确保没有传递--include-symbols或其他会修改资产属性的参数。 - 在测试ASP.NET Core 8.0项目中引用新包,检查
<PackageReference>是否还会自动添加那两个子项。如果问题消失,再推广到其他客户端项目。
4. 排查SDK相关的隐式配置
如果你使用Microsoft.NET.Sdk.Web,注意该SDK默认的OutputType是Exe,虽然你设置了<OutputType>Library</OutputType>,但仍可能有隐式的打包配置影响。建议最终使用Microsoft.NET.Sdk.Razor作为类库的SDK,因为它专门针对包含Razor视图的MVC类库优化,打包配置更贴合需求。
内容的提问来源于stack exchange,提问作者Jesse Sierks
相关产品推荐
相关产品推荐

