我正在开发一个开源项目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 版本,如下所示:
- MvcSiteMapProvider.MVC2
- MvcSiteMapProvider.MVC3
- MvcSiteMapProvider.MVC4
但是,除了库 DLL 之外,我还有不同的文件(依赖注入配置、MVC DisplayTemplates 等)需要部署到目标项目。当主项目的新版本更新时,这些文件不得更新,因为它们可能包含我不想覆盖的最终开发人员编辑。
因此,很明显,出于这个和其他原因,这些需要放在自己的 Nuget 包中。但是,这些其他包需要依赖于主 MvcSiteMapProvider.MVCx 项目,以确保已安装其中一个。
为每个 MVC 版本为每个其他包创建单独的 Nuget 包是没有意义的 - 除了这个依赖项之外,它们都完全相同。理想情况下,我想做的是制作一个依赖于 MvcSiteMapProvider.MVC2、MvcSiteMapProvider.MVC3 或 MvcSiteMapProvider.MVC4 的单个 Nuget 包,如果它们都不可用,请安装与目标项目的 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