同一ディレクトリにあるプロジェクトで、それぞれ nuget packages の構成を変えたい場合があります。
デバッグ用とリリース用のプロジェクトを分けていて、デバッグ用にのみ必要な nuget パッケージを使っている、とか。
MyAwesomeApp_debug.csproj <-- Debugログ収集用の nuget パッケージを使っている
MyAwesomeApp_release.csproj <-- そんなものは必要ない
ライブラリをデバッグしながらアプリを実行したい場合と、アプリだけで実行したい場合、とか。
MyAwesomeApp.csproj <-- アプリ単体のプロジェクト(lib は nuget から得る)
MyAwesomeApp_with_lib.csproj <-- lib をアプリからデバッグしたい時のプロジェクト(lib はプロジェクト参照でソースが提供されるので nuget 要らない)
私がやりたかったのは後者で、 Xamarin.Forms.GoogleMaps のサンプルプロジェクトは、
- サンプルのみ利用したい人(普通はこっち)は、 XF.GoogleMaps は nuget から読み込ませたい
- 開発に参加する人は、XF.GoogleMaps はプロジェクト参照で読み込ませたい
という2つのニーズがあります。
通常、 プロジェクトで使用する nuget パッケージは、xxx.csproj
と同じディレクトリにある packages.config
というファイルで管理されます。
ところが上記のような同じディレクトリ内に複数のプロジェクトがある場合、どちらも packages.config
を参照してしまいます。
なにか良い手はないかなーと探していたら、ありました。
どうやらですね、 packages.config
は、 packages.プロジェクト名.config
というファイル名に変えると、その .csproj
のためだけの nuget パッケージ設定ファイルになる模様。
さっそく、サンプルプロジェクトに 適用しました。
プロジェクトは XFGoogleMapSample.csproj
と XFGoogleMapSample.local.csproj
があるので、それにあわせて packages.XFGoogleMapSample.config
と packages.XFGoogleMapSample.local.config
を用意しました。(packages.config
は消しました。)
2つのプロジェクトをそれぞれ含む2つのソリューションを開いてみると、
このように、 XFGoogleMapSample.local.csproj
の方は、 Xamarin.Forms.GoogleMaps
が Packages にないのがわかります。
このように、 packages.[projectname].config
とすると、プロジェクト固有の nuget 設定ファイルにすることができます。(このケースでも packages.config
が存在しているとそちらが優先されてしまうようです。)
この構成で、 Xamarin Studio、 Visual Studio for Mac, Visual Studio 2015 で問題なく読み込めましたし、 Bitrise という CI サービスでも使えたので、実用には問題なさそうです。