Работя върху проект с отворен код MvcSiteMapProvider, подготвяйки го за внедряване. Това е библиотечен пакет, който поддържа MVC2, MVC3 и MVC4, както и .NET 3.5, .NET 4.0 и .NET 4.5.
Въз основа на Nuget Package: Use Different MVC Version When Available, Стигнах до заключението, че трябва да направя пакет 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