私はオープン ソース プロジェクト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 パッケージを作成することは意味がありません。この 1 つの依存関係を除いて、それらはすべてまったく同じです。理想的には、MvcSiteMapProvider.MVC2、MvcSiteMapProvider.MVC3、または MvcSiteMapProvider.MVC4 のいずれかに依存する単一の Nuget パッケージを作成し、それらのいずれも利用できない場合は、ターゲット プロジェクトの MVC バージョンに一致するものをインストールします。しかし、どうすればこれを達成できますか? それが不可能な場合、新しい MVC リリースごとに指数関数的に成長する多数の Nuget パッケージ (MVC バージョンの依存関係ごとに 1 つ) を作成する以外に、他にどのようなオプションがありますか?
明確にするために、次のような他の 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