我有一个Ninject.Extensisons.Wcf包,它的安装方式不同,具体取决于安装它的项目类型。在WCF托管在IIS(包含global.asax的任何项目)的情况下,需要将第二个包Ninject.Web.Common与包一起安装。对于所有其他项目类型,例如库,控制台,WinForms,WPF应用程序,不应安装此程序包。
是否有可能实现这一点,例如,使用powershell脚本?或者在这种情况下我是否必须部署两个不同的包?
答案 0 :(得分:4)
不幸的是,当前的nuspec文件没有提供基于项目类型管理依赖项。我们目前支持定位不同的框架版本,但这并不适用于您的情况。
建议使用包引用处理所有依赖项。虽然在技术上可以使用PowerShell脚本下载和安装软件包,但这不受支持,并且很可能在将来的版本中中断。
首先确定在非Web项目中引用Web包实际上是否存在问题。仅仅因为引用了程序集,如果它们没有被使用,它就不会产生影响。
如果发现Web依赖会导致不良副作用,那么您需要创建单独的包。
我会把你的包分成逻辑部分。如您所述,您有一个非Web项目使用的包。 Web项目需要依赖于不同的包。
所以现在你有2个逻辑包:
因此,用户将Install-Package MyProject
用于非Web项目,Install-Package MyProject.Web
用于Web项目。
此时你会完成,一切都会好的。但我认为你应该考虑另一个步骤。我在这些 split 包中看到的一个问题是我必须弄清楚我需要安装哪个特定的包。我必须知道我需要“Web”版本。
此时,确定您的包的典型用例。如果90%的用户将安装Web版本,那么我会制作一个“meta”软件包,它只包含您公共软件包的依赖项。
在你的情况下,我会制作3个包裹:
通过创建“meta”包,您可以为最常见的情况保留“短”包名称。此元数据包仅与其他包具有依赖关系。
一个很好的例子是SignalR包。
希望这有用。