如何隐藏或限制用户仅从nuget下载相关软件包?

时间:2019-04-19 09:29:26

标签: c# .net dependencies nuget nuget-package

问题: 我有Project_A和Project_B。 Project_B取决于Project_A。通过添加Project_A作为nuget包引用(Project_A作为nuget包发布并包含在Project_B中),可以完全满足Project_B的依赖性。最后,Project_B被打包为最终用户的nuget参考。当最终用户下载依赖于Project_A的Project_B时,最终用户会在nuget软件包浏览器中看到Project_A nuget软件包。

目标:

  1. 我可以从nuget软件包浏览器中隐藏Project_A nuget软件包吗?因为如果最终用户下载了此代码,则无济于事,而是发布为Project_B nuget包的依赖项。
  2. 我可以限制最终用户一些如何下载Project_A参考吗?

预期结果: 我的最终用户只能下载Project_B参考,而不能单独下载Project_A参考。 Project_A参考应作为Project_B的依赖项自动下载。

实际结果: 我的最终用户不需要在他们的项目中下载Project_A nuget包参考。

1 个答案:

答案 0 :(得分:2)

从项目中创建两个NuGet包的事实并不重要。最后,您有两个软件包Project_A和Project_B,而Project_B对Project_A有依赖性。

  

我可以从nuget软件包浏览器中隐藏Project_A nuget软件包吗?

nuget.org具有未列出软件包的概念,因此用户不会在搜索结果中看到它们。但是,如果将软件包发布到其他NuGet提要,则取决于服务器的实现。但是,请谨慎执行此操作,因为如果恢复未列出的软件包会导致问题,则会给用户带来糟糕的体验。

  

我可以限制最终用户一些如何下载Project_A参考吗?

老实说,我的回答是你为什么要这么做?如果开发人员下载Package_A,会有什么危害?您要解决什么问题,有没有其他方法可以解决同一问题?假设您是使用软件包的开发人员,但似乎缺少依赖关系,那会让您感觉如何?

要直接回答您的问题,您只需将Project_A包发布到私有nuget提要。但是在这种情况下,如果Package_B在公共供稿上,则只有有权访问私人供稿的人才能使用它,其他所有人则NuGet将无法恢复其依赖性。

编辑:还考虑具有安全合规性程序的组织。如果开发人员使用您的公共程序包,然后他们审核了自己的依赖关系,并发现您的程序包具有怪异的隐藏依赖关系,那么这将非常可疑。