提问人:Kile Kasmir Asmussen 提问时间:6/20/2023 最后编辑:Kile Kasmir Asmussen 更新时间:6/20/2023 访问量:36
编译器声称 NuGet 包缺少命名空间,反编译器不同意?
Compiler claims NuGet package missing namespace, decompiler disagrees?
问:
我有一个项目(称之为 )包含一些常用的枚举和标记类型,这是由解决方案中的许多项目完成的。Fancy.Common.Types
ProjectReference
但是,我希望将其中一个项目(称为 )作为 NuGet 包发布,因此我创建了一个 的 NuGet 包,发布到我们公司的源。Fancy.Service.Client
Fancy.Common.Types
我下载了这个 NuGet 包。用 JetBrains 的 dotPeek 反编译器打开它,我可以看到它包含所有正确的枚举定义等;似乎没什么不对劲。
当我将 to in 替换为新的 NuGet 包时,出现以下错误:ProjectReference
Fancy.Common.Types
Fancy.Service.Client.csproj
PackageReference
The type or namespace 'Common' does not exist in the namespace 'Fancy' (are you missing an assembly reference?)
不出所料,谷歌被证明是无济于事的。我快要放弃软件开发,去山里当隐士了,我到底做错了什么?
我试过:
- 清洁溶液
- 在 CI 管道中构建
- 确保 和 的框架相同(它们都是 net6.0。
Fancy.Common.Types
Fancy.Service.Client
- 检查拼写错误(没有,我将项目从使用项目引用转换为同一项目的包引用,名称没有更改。
ETA:@PMF建议我可能有依赖关系,而这些依赖关系又直接指向 .事实证明确实如此,但似乎不是问题的原因。ProjectReference
Fancy.Service.Client
ProjectReference
Fancy.Common.Types
除了另一个项目之外,它没有依赖项,如果我将其更改为 ,错误仍然存在。Fancy.Messages
ProjectReference
Fancy.Common.Types
PackageReference
预计到达时间2:花了六十分钟追查依赖关系,终于找到了,正如@PMF所建议的那样,存在依赖冲突。
答:
问题的根源在于,在依赖关系的深层树的某个地方,有一个项目。一旦我消除了它,它就编译了。ProjectReference
Fancy.Common.Types
使用 dotnet 包时的另一个“陷阱”:没有针对此类冲突的健全性检查。
一个比我不那么慷慨的人可能会认为这是一个明显的设计缺陷,这可能会使普通的dotnet开发人员在他们的职业生涯中损失一百个小时的生产力。
评论
Fancy.Service.Client
Fancy.Messages
Fancy.Common.Types
lib\net6.0\Fancy.Common.Types.dll