2016-08-05 23 views
1

グローバルnuget.configを編集して、単一のパッケージフォルダを使用しました。NuGet/MSBuildは、HintPathなしでバイナリをローカル出力フォルダにコピーしません。

VS2015で作成された新しい空のC#コンソールプロジェクトがあります。 Newtonsoft.JsonのようなNuGetリファレンスを追加すると、VSはpackages.configを作成し、Newtonsoft.Jsonをパッケージとしてリストします。

これは.csprojファイルに追加されます。

<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\..\..\CxCache\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>

プロジェクトを構築する場合、Newtonsoft.Jsonバイナリはローカルのbinフォルダにコピーされます。ローカルビンからNewtonsoft.Json dllを削除すると、ビルド後に再コピーされます。

しかし、私はcprojでHintPathプロパティ(repoにチェックしたくありません)を使いたくないので、私はHintPathを削除できるはずです。うまくいくはずです。私は.csprojからHintPath行を削除し、Newtonsoft.Json dllをローカルbinから削除します。

今回はビルド時に、グローバルNugetパッケージフォルダのNewtonsoft.Jsonバイナリはローカルビンにコピーされません。回避策はありますか?

+0

使用で... NuGetsをチェック避けるために、「ビルドにパッケージを復元する」(あなたの質問に明確ではない答え、おそらくあなたの代わりに何をすべきか)と思い –

答えて

1

ビンフォルダ(TARGETDIR) - あなたが構築するためのフォルダは、ソース・コントロールの一部であってはなりません。 HintPathこれがなければ、IDEはまずGACをチェックし、次にTargetDirをチェックして、それが...ドライブ上のどこかに完全に異なるバージョンのNewtonsoft dll、間違ったファイルを見つけるかもしれません。

設定を修正する必要があります。ビンのフォルダをソース管理にチェックインしないでください。ブランチ構造を持ち、ブランチの下にパッケージフォルダーがあり、ブランチ内のすべてのソリューションがそれに対応できるはずです。 パッケージのフォルダ全体をチェックすることができますので、毎回ソリューションをダウンロードする必要はありません。これは問題ありません。しかし、出力をチェックインしないでください。 - を参照してください。HintPathには、必要な場所で構造体を使用できるように相対パスを含めることができます。明日はブランチをソース管理の別の場所に移動でき、相対パスは有効なままです。確かに - あなたはHintPath通常

+0

おかげで多くのことを必要としますそれのために。それほど私は理解する。しかし、私がヒントパスを必要としない理由は、このレポを使用する他の人が自分のグローバルパッケージの場所を持つことになります。だからVisual StudioがHintPathとして入力するものは、私のためだけに有効かもしれません。私はなぜNuGetがpackages.configを見てグローバルパッケージフォルダをチェックできないのか不思議です。 –

+0

@AndrewPhamプロジェクト/ソリューションを構築するとき、ナゲットは関与しません。参照場所を設定しようとしているのはIDE/msbuildです。プロジェクトファイルはコンパイル命令です。あなたと他の開発者が異なるポイントから作業している場合 - これは問題です。すべての開発者は(それはあなたが良い人生を望むならば)必要であり、同じコード構造を持たなければなりません。あなたがコンパイルされたコードのためのいくつかの並べ替えの格納場所について話しているなら - ネットワークフォルダを使用し、ポストビルドイベントを使用してtargetdirの内容をその場所にコピーします。 –

+0

VS体験では、グローバルフォルダにnugetパッケージをダウンロードし、targetdirにコピーしてワンクリックでpackages.configにすべてのエントリを持たせることができます。 HintPathなしでは逆のことは本当に不可能ですか?必要なバイナリを見つけてnugetを使うためにpackages.configを読んでください。それが以前と同じようにグローバルフォルダの場所を見つけるためにconfigを実行して、nugetパッケージをダウンロードしてください。 –

関連する問題