NuGet包未包含更新类与字段,求排查原因
NuGet打包后类/字段缺失的排查方案
问题场景
我维护一个供多项目引用的类库,将master分支合并到对应开发分支后,创建了新的Beta版NuGet包,用于同步主分支和开发分支的变更。但引入新包后发现:
- 原分支版本的部分类从包中消失
- 存在类缺失已提交到类库解决方案的字段(例如
SubjectPage类的Video字段)
类库项目中的原代码:
using Libraries.Models.Web.Interfaces; using Libraries.Models.Web.Objects; using Libraries.Models.Web.Page; using JetBrains.Annotations; namespace Libraries.Models.Web.Subjects { [PublicAPI] public class SubjectPage : WebPage, ISubjectPage { public string Name { get; set; } public string Video { get; set; } } }
引入API项目后反编译的代码(缺失Video字段):
// Decompiled with JetBrains decompiler // Type: Libraries.Models.Web.Subjects.SubjectPage // Assembly: Libraries.Models.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null // MVID: E2FEBB82-23D5-440C-989A-623618BBF3BA // Assembly location: C:\Users\me\.nuget\packages\libraries.models.web\1.0.22.1-beta05\lib\netstandard2.0\Libraries.Models.Web.dll using Libraries.Models.Web.Interfaces; using Libraries.Models.Web.Objects; using Libraries.Models.Web.Page; namespace Libraries.Models.Web.Subjects { public class SubjectPage : WebPage, ISubjectPage { public string Name { get; set; } } }
排查方向
1. 分支与代码提交验证
- 确认打包操作是在合并后的目标分支执行的,合并后所有代码变更已提交到本地仓库(包括
SubjectPage类的Video字段) - 本地先执行
clean->rebuild,检查类库输出目录(bin/[Release/Debug]/netstandard2.0)下的Libraries.Models.Web.dll,用反编译工具查看是否包含缺失的类/字段。如果本地dll也没有,说明代码未正确提交或编译
2. 条件编译与编译符号检查
- 检查类或字段是否被条件编译指令包裹(如
#if、#endif),或标记了[Conditional]属性 - 查看类库项目的
.csproj文件,确认<DefineConstants>节点的编译符号在打包环境下是否包含启用代码的符号(例如如果Video字段是#if DEBUG包裹,而打包用Release模式,就会被排除)
3. NuGet打包配置问题
- 检查类库的打包配置:
- 若使用
.nuspec文件,确认<files>节点是否包含所有需要的程序集/类文件,无遗漏或排除规则 - 若直接用
.csproj打包,查看<PackageReference>、<Content>、<Compile>节点,确保目标类被标记为可打包内容
- 若使用
- 验证
dotnet pack命令是否携带了排除文件的参数(如--exclude)
4. 本地NuGet缓存清理
- 本地可能缓存了旧版本的包,即使远程PDP显示新内容,项目仍引用缓存文件
- 执行命令清理缓存:
之后重新安装目标Beta包,再检查反编译结果dotnet nuget locals all --clear
5. 合并冲突导致代码丢失
- 回顾master分支合并到开发分支的操作,检查是否存在未注意到的代码冲突,解决冲突时误删了类或字段
- 用Git命令查看合并记录:
确认合并过程中是否丢失了目标代码git log --oneline | grep "merge" git diff [合并前commit] [合并后commit] -- Libraries/Models/Web/Subjects/SubjectPage.cs
内容的提问来源于stack exchange,提问作者Username_null
相关产品推荐
相关产品推荐

