我正在开发一个开源项目MvcSiteMapProvider,准备进行部署。它是一个库包,支持MVC2、MVC3和MVC4,以及.NET 3.5、.NET 4.0和.NET 4.5。
根据Nuget Package: Use Different MVC Version When Available的建议,我得出结论,需要对每个版本的MVC制作一个Nuget包,并让Nuget内部的版本检测来处理不同的.NET版本,就像这样:
因此,很明显这些需要在它们自己的Nuget包中,出于这个原因和其他原因。然而,这些其他包需要依赖于主MvcSiteMapProvider.MVCx项目,只是为了确保其中一个已经安装。
为每个这些其他包的每个MVC版本制作单独的Nuget包没有意义——它们都完全相同,除了这个依赖关系。理想情况下,我想做的是制作一个单一的Nuget包,它依赖于MvcSiteMapProvider.MVC2、MvcSiteMapProvider.MVC3或MvcSiteMapProvider.MVC4,如果没有这些包中的任何一个可用,就安装与目标项目的MVC版本匹配的那个,但我该如何实现呢?如果这不可能,除了创建大量的Nuget包(每个MVC版本依赖一个)随着每个新的MVC发布呈指数级增长,我还有哪些其他选择?
澄清一下,我有其他像这样的Nuget包:
根据Nuget Package: Use Different MVC Version When Available的建议,我得出结论,需要对每个版本的MVC制作一个Nuget包,并让Nuget内部的版本检测来处理不同的.NET版本,就像这样:
- MvcSiteMapProvider.MVC2
- MvcSiteMapProvider.MVC3
- MvcSiteMapProvider.MVC4
因此,很明显这些需要在它们自己的Nuget包中,出于这个原因和其他原因。然而,这些其他包需要依赖于主MvcSiteMapProvider.MVCx项目,只是为了确保其中一个已经安装。
为每个这些其他包的每个MVC版本制作单独的Nuget包没有意义——它们都完全相同,除了这个依赖关系。理想情况下,我想做的是制作一个单一的Nuget包,它依赖于MvcSiteMapProvider.MVC2、MvcSiteMapProvider.MVC3或MvcSiteMapProvider.MVC4,如果没有这些包中的任何一个可用,就安装与目标项目的MVC版本匹配的那个,但我该如何实现呢?如果这不可能,除了创建大量的Nuget包(每个MVC版本依赖一个)随着每个新的MVC发布呈指数级增长,我还有哪些其他选择?
澄清一下,我有其他像这样的Nuget包:
- MvcSiteMapProvider.Web
- MvcSiteMapProvider.Configuration.Autofac
- MvcSiteMapProvider.Configuration.Ninject
- MvcSiteMapProvider.Configuration.StructureMap
- MvcSiteMapProvider.Configuration.Unity
- MvcSiteMapProvider.Configuration.Windsor
我正在尝试避免不得不将其更改为:
- MvcSiteMapProvider.MVC2.Web
- MvcSiteMapProvider.MVC2.Configuration.Autofac
- MvcSiteMapProvider.MVC2.Configuration.Ninject
- MvcSiteMapProvider.MVC2.Configuration.StructureMap
- MvcSiteMapProvider.MVC2.Configuration.Unity
- MvcSiteMapProvider.MVC2.Configuration.Windsor
- MvcSiteMapProvider.MVC3.Web
- MvcSiteMapProvider.MVC3.Configuration.Autofac
- MvcSiteMapProvider.MVC3.Configuration.Ninject
- MvcSiteMapProvider.MVC3.Configuration.StructureMap
- MvcSiteMapProvider.MVC3.Configuration.Unity
- MvcSiteMapProvider.MVC3.Configuration.Windsor
- MvcSiteMapProvider.MVC4.Web
- MvcSiteMapProvider.MVC4.Configuration.Autofac
- MvcSiteMapProvider.MVC4.Configuration.Ninject
- MvcSiteMapProvider.MVC4.Configuration.StructureMap
- MvcSiteMapProvider.MVC4.Configuration.Unity
- MvcSiteMapProvider.MVC4.Configuration.Windsor