根据目标项目类型改变依赖关系

时间:2011-12-30 15:13:39

标签: nuget nuget-package

我有一个Ninject.Extensisons.Wcf包,它的安装方式不同,具体取决于安装它的项目类型。在WCF托管在IIS(包含global.asax的任何项目)的情况下,需要将第二个包Ninject.Web.Common与包一起安装。对于所有其他项目类型,例如库,控制台,WinForms,WPF应用程序,不应安装此程序包。

是否有可能实现这一点,例如,使用powershell脚本?或者在这种情况下我是否必须部署两个不同的包?

1 个答案:

答案 0 :(得分:4)

不幸的是,当前的nuspec文件没有提供基于项目类型管理依赖项。我们目前支持定位不同的框架版本,但这并不适用于您的情况。

建议使用包引用处理所有依赖项。虽然在技术上可以使用PowerShell脚本下载和安装软件包,但这不受支持,并且很可能在将来的版本中中断。

首先确定在非Web项目中引用Web包实际上是否存在问题。仅仅因为引用了程序集,如果它们没有被使用,它就不会产生影响。

如果发现Web依赖会导致不良副作用,那么您需要创建单独的包。

我会把你的包分成逻辑部分。如您所述,您有一个非Web项目使用的包。 Web项目需要依赖于不同的包。

所以现在你有2个逻辑包:

  • MyProject的
  • MyProject.Web
    • MyProject (依赖项)
    • SomeOtherPackage

因此,用户将Install-Package MyProject用于非Web项目,Install-Package MyProject.Web用于Web项目。

此时你会完成,一切都会好的。但我认为你应该考虑另一个步骤。我在这些 split 包中看到的一个问题是我必须弄清楚我需要安装哪个特定的包。我必须知道我需要“Web”版本。

此时,确定您的包的典型用例。如果90%的用户将安装Web版本,那么我会制作一个“meta”软件包,它只包含您公共软件包的依赖项。

在你的情况下,我会制作3个包裹:

  • MyProject( meta package
    • MyProject.Web
  • MyProject.Web
    • MyProject.Core
    • SomeOtherPackage
  • MyProject.Core (常见的非网络包)

通过创建“meta”包,您可以为最常见的情况保留“短”包名称。此元数据包仅与其他包具有依赖关系。

一个很好的例子是SignalR包。

希望这有用。