QA@IT

VS2012 ソリューションファィルと同階層にあるpackagesフォルダ

6566 PV

Visual Studio 2012 Professionalについての質問です。
新規ソリューション生成を行って開発を行った場合、".sln"ファイルと同一階層に、巨大な"packages"というフォルダが生成され、内部に多数のシステムモジュール類が配置されていますが、これは何でしょうか?
ググってみると、NuGetとの関連があるような記事がありましたが、自分の経験では理解できませんでした。

内容は例えば、ASP.NET MVC3を使用したプロジェクトを含むリューションの場合、jQueryであったり、EntityFrameworkであったり、Mvc3本体だったりします。
小規模のソリューションでも10メガ以上になる事が多く、大きいものでは50~60メガにも及ぶため、特に支障ない場合は削除したいのですが、支障はないでしょうか?

試しに無害(そうな)ソリューションで"packages"をフォルダ外に移動しても、特に起動で問題は出ませんでした。

回答

削除した後にオフラインでリビルドするとまずいことがおきるかもしれません。

ちょっと想像の部分もありますがNuGetを抜きにして一言で説明するなら、それはただの参照アセンブリ置場です。
たとえばGACに未登録のオリジナルのクラスライブラリのアセンブリファイルってローカルのどこかにおいておきますよね?それの置場所です。

プロジェクトのプロパティで参照タブを見てもらえると参照先にそのフォルダが指定されています。
ですのでリビルドするとまずいことになるでしょう。ただしインターネットにつながっていればNuGetがダウンロードしなおしてくるかもしれません。

プロジェクト毎にファイルがないといけないのはシステム上でパッケージが更新や削除されてもソリューションとしては関係なくビルドできないといけないからでしょうね。ソリューションにもpackage設定(packages.config)がいて、バージョンもシステムとは別で管理されています。
([ツール]>[ライブラリ パッケージ マネージャー]>[ソリューションのNuGetパッケージの管理] で管理できます。)

やったことはないですが、もし重複がどうしても問題になるのであれば別ディレクトリにコピーしておいて、プロジェクトの参照設定を変更した上でNuGetのpackages.configから消すかソリューションのパッケージの管理から削除する形になるんでしょうかね。それかハードリンクにしておくか。ひょっとしたらソリューションのパッケージの置場はどこかで設定できるのかもしれません。
いずれにせよ同じ場所に複数のバージョンのアセンブリを置くことはできないのでそのあたりもメンテできないと難しいでしょうね。

ほんとはNuGet用のGACがあればいいのかもしれませんが・・・。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。