【发布时间】:2022-01-08 13:43:53
【问题描述】:
问题:
我有一个由许多包组成的工具包,源代码只是一个包含包源、单元测试和演示的大型解决方案。
每个包项目需要是一个单独的 NuGet 包,但有些项目依赖于其他项目。
在项目中,我有本地 project 依赖项,指向项目文件。
假设我有一个根包A。 B、C 和 D 取决于 A。假设E 依赖于B。
假设依赖树如下所示:
- A
|-B-E
|-C
|-D
当我发布包A、B、C、D、E时会发生什么?
包E 是否只是项目E 编译时依赖于packages B(其中B 取决于package A) -或者包 E 将没有依赖项并且内置了 A 和 B projects?
请注意项目参考和包参考的区别!
在我的解决方案中,我只有项目引用。我在生成的包中想要的是包引用。我的B.csproj 应该依赖于A.csproj,但我的B.nupkg 应该依赖于A.nupkg。
我想要实现的是能够在不破坏其余包的情况下升级单个包。当然,我指的是非破坏性更改,例如向 A 添加类或方法,在不更改 API 的情况下修复 A 中的错误。
假设我在包A 中发现了一个影响所有其他包的错误。我只想修复包A 并将其发布为新版本。然后,使用包B 的项目X 也应该收到修复,因为它将使用最新版本的A 依赖项。
是否有可能以及我应该怎么做才能实现这种行为?
我测试了几种(某种)有效的方法。首先,我只是首先发布了依赖项,然后将 NuGet 包依赖项添加到使用它们的项目中。我的意思是后来作为包发布的项目。这行得通,但是调试起来非常乏味。事实上,这是一场噩梦。
然后我测试了另一种方法 - 在 Debug 和 Release 配置之间变化的 2 种参考。 Debug 配置引用了项目,Release 配置引用了包。这实际上是很容易管理的,但是,项目文件很乱,都很复杂,维护起来也很繁琐。
我在某处读到,.NET 和 NuGet 会以某种方式自行解决。我觉得很难相信。有那么聪明吗?只保留正常配置,对项目的引用,如果可用包会引用对应的包吗?
有人可以确认或否认吗?
有一种方法可以找出并发布包。但它并不是完全可逆的。用于 NuGet 的内容将永远留在那里。我可以取消列出这些版本,但仍然需要很长时间来测试它,而且会造成混乱。
也许有人已经对此进行了测试,或者找到了一些可靠的信息。
【问题讨论】:
标签: c# .net nuget nuget-package