2016-05-27 6 views
1

解決策(B)の別のプロジェクトを参照するWindowsサービスプロジェクト(A)が奇妙な問題を抱えています。プロジェクトBには、ナゲットパッケージ(この場合はprotobuf-net)への参照があります。パッケージフォルダ内のパスを正しく参照しています。しかし、WindowsサービスプロジェクトAをビルドすると、コピーされるDLLは異なるバージョン(GACから来ている)です。NuGetパッケージフォルダの代わりにGACからコピーする参照プロジェクト依存関係

この問題を解決し、依存関係を正しくコピーしていることを確認するには、どうすればよい方法ですか。

パッケージフォルダ内の関連するフォルダを削除して、プロジェクトBを再構築しようとしましたが、この結果、ナゲットは自動的にファイルを再度ダウンロードしましたが、プロジェクトBのVisual Studioでの参照がGACの古いバージョンに更新されていました。 packages.configファイルで参照を削除してから、nugetを使用してパッケージファイル内の正しいパスを使用して更新する必要がありました。

+2

サイドノート:GACにこれらのアセンブリを組み込む理由がない限り、GACからそれらをアンインストールするほうがよいかもしれません... NuGet経由で配布されるアセンブリは、通常、appとともにコピーされ、インストールされません。アセンブリの読み込みでは常にGACが優先されます。バージョンが正しくインクリメントされない場合、GACからのコピーが引き継がれます。 –

+0

ええ、理由やそのアセンブリがGACで終了したかどうかはわかりません。しかし、ナゲットパッケージはv2.0.0を参照しており、GACはv1.0.0を持っています。少なくとも、奇妙で迷惑なことは言うまでもありません。 – Sivart

+0

さらに奇妙なのは、プロジェクトBを参照する別のプロジェクト(C)があり、そのビルド/パブリッシュ出力に実際に参照されているアセンブリの正しいバージョンが含まれているということです。ちょうどこの1つのプロジェクトは問題を抱えているようです。 – Sivart

答えて

1

私はこの同じ問題に遭遇したと私の場合は、プロジェクトA.

におけるプロジェクトBを参照するためにfalseに「ローカルコピー」を設定することによって、それを解決し、私のプロジェクトのすべてが同じ出力パスを持っています。私はEXE(プロジェクトA)とDLL(プロジェクトB)を持っています。 DLLには、Nugetパッケージへの参照があります。 DLLだけをコンパイルすると、参照されたNuget DLLがパッケージフォルダから出力フォルダにコピーされます。

しかし、EXEをコンパイルすると、Nuget DLLはGACの古いバージョンで上書きされます。 "ローカルコピー"をFalseに設定すると、が修正され、Nuget DLLはDLLがコンパイルされたときのみコピーされ、EXEがコンパイルされたときはコピーされません。

関連する問題