NuGet中的软件包依赖解析和命名冲突

11
在我工作的团队中,我们依赖于两个NuGet feeds:NuGet.org上的官方公共包和我们文件服务器上的内部包文件夹。
这对我们来说效果很好,但我认为我们存在一个潜在问题。看起来NuGet根据包名称和版本号解析依赖项。只有一个feed时,这似乎不是问题。但有多个feed时,存在名称冲突的风险。根据NuGet的解析规则,它将选择最高版本号的包,而不管其来源。
这让我们有点为难。虽然不太可能发生,但如果有人在NuGet.org feed上发布了与我们内部feed上的某个包具有相同名称的包,我们可能会包含一个意外的包。
我能想到两种解决方法:
1)将我们所依赖的包拉入我们的私有feed中。虽然这是可行的,但由于需要不断下载包更新到我们的私有feed中,因此并不是非常吸引人。
2)通过NuGet.org feed发布一个占位符包以保留包名称。这似乎可以解决问题,但感觉像是一个hack。
有更好的方法吗?
感谢您的帮助!
2个回答

2
这可以很容易地通过我们的产品ProGet实现(基本上是一个私有的NuGet存储库,具有附加功能),尽管此功能仅在付费版本中可用。基本上,你需要做的是只从Visual Studio指向ProGet托管的源。默认情况下,ProGet源连接到官方NuGet.org源,并且能够下载官方源中的所有软件包。
但是,如果您设置了“连接器过滤器”,则:
*
!YourPackageNameOrPrefix

如果你不想使用第三方解决方案,你可以给你的包命名为高度不可能被复制的名称(例如YourCompany.XXXXX),这样就可以阻止官方源下载与你同名的包,但这当然无法防止有人故意复制。

谢谢!产品建议和方法论都非常有帮助! - Jacob
抱歉,我不能推荐专有产品。 - Adam Williams

1

有一种方法可以保护您在NuGet上的包名称, 只要您的所有包都具有相同的前缀(这是Microsoft Framework Design Guidelines for Assemblies and DLLs推荐的)。

请注意,这不需要您实际上传您的软件包到NuGet.org;但它可以防止其他人这样做。而且,由于您只使用两个软件包源,这意味着具有您前缀的软件包只能来自一个地方:您的本地软件包源。

在撰写本文时,第一个链接包含(除其他内容外)预订的影响细节,如何请求预订以及“争议政策”等详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接