2016-05-27 18 views
1

我有一個奇怪的問題,其中有一個Windows服務項目(A)引用解決方案(B)中的另一個項目。項目B提及nuget包(在這種情況下,protobuf-net);它正確地引用了packages文件夾中的路徑。但是,當我構建Windows Service項目A時,被複制的DLL是不同的版本(來自GAC)。引用的項目依賴項是從GAC而不是NuGet包文件夾複製

什麼是解決這個問題的最好方法,並確保它正確地複製依賴關係。

我試着刪除軟件包文件夾中的關聯文件夾,然後重建項目B;這確實會導致nuget自動再次下載文件,但是我發現Visual Studio for Project B中的引用已更新爲GAC中的舊版本。我必須刪除packages.config文件中的引用,然後使用nuget再次將其添加,以使其更新爲使用packages文件夾中的正確路徑。

+2

注意:除非有一些強有力的理由在GAC中安裝這些程序集,否則從GAC中卸載它們可能會更好...通常,通過NuGet分發的程序集預計將隨應用程序一起復制並且未安裝。 GAC始終優先考慮加載程序集 - 因此,如果版本沒有正確增加,GAC的副本將接管。 –

+0

是的,不知道該組件在GAC中以何種方式或如何結束。但是,nuget包引用了v2.0.0,而GAC包含了v1.0.0。至少可以說是相當奇怪和煩人的。 – Sivart

+0

更奇怪的是,還有另一個引用Project B的項目(C),並且它的構建/發佈輸出實際上包含了引用程序集的正確版本。只是這個項目似乎有問題。 – Sivart

回答

1

我碰到了同樣的問題,並通過在項目A.

的參考項目B對我來說,「複製本地」設置爲false,解決它,我所有的項目都具有相同的輸出路徑。我有一個EXE(項目A)和一個DLL(項目B)。該DLL有一個Nuget包的引用。當我只編譯DLL時,它會將引用的Nuget DLL從packages文件夾複製到輸出文件夾。

但是,當我編譯EXE時,它會用GAC的舊版本覆蓋該Nuget DLL。 將「Copy Local」設置爲False將其修復爲,這樣Nuget DLL只在編譯DLL時被複制,而不在編譯EXE時被複制。

相關問題