Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nuget 取决于目标项目类型的不同依赖关系_Nuget_Nuget Package - Fatal编程技术网

Nuget 取决于目标项目类型的不同依赖关系

Nuget 取决于目标项目类型的不同依赖关系,nuget,nuget-package,Nuget,Nuget Package,我有一个包Ninject.extensions.Wcf,它的安装方式应根据安装到的项目类型而有所不同。如果WCF托管在IIS(任何包含global.asax的项目)中,则需要将第二个包Ninject.Web.Common与该包一起安装。对于所有其他项目类型,如库、控制台、WinForms、WPF应用程序,不应安装此包 是否有可能实现这一点(例如,使用powershell脚本)?或者在这种情况下我必须部署两个不同的包吗?不幸的是,当前的nuspec文件没有提供基于项目类型的依赖关系管理功能。我们目

我有一个包Ninject.extensions.Wcf,它的安装方式应根据安装到的项目类型而有所不同。如果WCF托管在IIS(任何包含global.asax的项目)中,则需要将第二个包Ninject.Web.Common与该包一起安装。对于所有其他项目类型,如库、控制台、WinForms、WPF应用程序,不应安装此包


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

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

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

首先确定在非web项目中引用web包是否确实是一个问题。仅仅因为引用了程序集,如果不使用它们,就不会产生影响

如果事实证明web依赖性会导致不良的副作用,那么您需要创建单独的包

我会把你的包裹分成合乎逻辑的几部分。正如您所说,您有一个由非web项目使用的包。Web项目需要依赖于不同的包

现在您有两个逻辑包:

  • 我的项目
  • MyProject.Web
    • MyProject(依赖项)
    • 其他包裹
因此,用户将
为非web项目安装包MyProject
,为web项目安装包MyProject.web

在这一点上,你会做的,一切都会很好。但我认为你应该考虑下一步。我在这些拆分包中看到的一个问题是,我必须找出需要安装的特定包。我必须知道我需要“网络”版本

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

在您的情况下,我将制作3个包:

  • MyProject(元包)
    • MyProject.Web
  • MyProject.Web
    • MyProject.Core
    • 其他包裹
  • MyProject.Core(通用非web包)
通过创建“meta”包,您可以为最常见的情况保留“short”包名。此元包仅依赖于其他包

信号器包就是一个很好的例子


希望这对您有所帮助。

谢谢您的详细回答。为web项目引用附加包的问题不是程序集。但它包含WebActivator的应用程序启动文件。必须避免为非web项目安装它。是否有一个选项来决定是否根据项目类型安装内容文件?是的,这是我想象的副作用之一。尽管您可以使用Install.ps1删除该文件,但我不建议您这样做,因为该文件实际上属于另一个包。如前所述,nuspec不会根据项目类型筛选依赖项。不幸的是,由于项目类型是开放式的,我也看不到将来会发生这种情况。任何人都可以创建一个新的项目类型,那么NuGet如何确定它是否是一个“web”项目呢?我建议拆分包,或者创建一个包和文档,让用户手动安装web依赖项。