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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:52:10