Я работаю над проектом с открытым исходным кодом MvcSiteMapProvider, готовя его к развертыванию. Это пакет библиотеки, который поддерживает MVC2, MVC3 и MVC4, а также .NET 3.5, .NET 4.0 и .NET 4.5.
На основе Пакет Nuget: использовать другую версию MVC, когда она доступна, Я пришел к выводу, что мне нужно создать пакет Nuget для каждой версии MVC и позволить внутреннему обнаружению версии Nuget позаботиться о различных версиях .NET, например:
- MvcSiteMapProvider.MVC2
- MvcSiteMapProvider.MVC3
- MvcSiteMapProvider.MVC4
Однако помимо библиотеки DLL у меня есть разные файлы (конфигурация внедрения зависимостей, MVC DisplayTemplates и т. д.), которые необходимо развернуть в целевом проекте. Эти файлы НЕ ДОЛЖНЫ обновляться при обновлении новой версии основного проекта, потому что они, скорее всего, будут содержать правки конечного разработчика, которые я не хочу перезаписывать.
Итак, ясно, что по этой и другим причинам они должны быть в своих собственных пакетах Nuget. Однако эти другие пакеты должны зависеть от основных проектов MvcSiteMapProvider.MVCx, просто чтобы убедиться, что один из них установлен.
Нет смысла делать отдельный пакет Nuget для каждой версии MVC для каждого из этих других пакетов — все они абсолютно одинаковы, за исключением этой одной зависимости. В идеале я хотел бы сделать один пакет 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