2013-02-12 44 views
4

我遇到了NuGet(最新版本)和VS2012相當奇怪的問題。我有一個啓用了NuGet包管理的多項目解決方案,只要我使用Debug | AnyCPU配置,它就會編譯並且應用程序正常運行。只要我切換到Release | AnyCPU,似乎所有的Nu​​Get程序集引用都消失了,應用程序顯然不能編譯。奇怪的是,我可以在NuGet Manager UI中看到所有正確項目的所有參考。NuGet引用在更改爲發佈版本配置時無效

你曾經歷過類似的問題,你知道如何解決它嗎?

重建沒有幫助。 NuGet引用在設置Debug配置時設置。

回答

5

再次,我回答我的問題...

點是,我正在改變溶液的結構和周圍移動的一些項目。這意味着,您在每個項目的.csproj文件中獲得無效的相對路徑。沒關係,只要你不改變結構的深度,我就是這麼做的。

對於未知的原因,調試版本很好,無效路徑(可能會收集一些其他方式,因爲我手動刪除bin和obj文件夾和清除解決方案等)。但是對於發佈版本,它試圖從(錯誤引用的)軟件包/目錄中獲取程序集。

NuGet進程的任何部分都沒有發現/報告過這個問題,並且在所有的UI控制檯中,甚至在NuGet PowerShell控制檯本身中,一切似乎都沒問題。

解決方案很明顯。編輯受影響項目的.csproj文件(實際上,我通過過濾警告和發現,只有一些程序集受到影響,而且這些程序集來自主解決方案目錄之外),並將程序集引用的路徑更改爲正確的NuGet程序包夾。

附註:這是NuGet(也可能是VS)參考處理的問題。它試圖使用一些相對路徑,而不是像$ {SOLUTION_ROOT}或$ {NUGET_ROOT}或$ {PACKAGES_FOLDER}那樣添加一些變量。如果是通過變量替換完成的,則可以在多個解決方案中使用相同的項目,而不會破壞NuGet包配置。至少我還沒有找到在多個解決方案中共享同一個項目文件夾的方法。

+0

我有同樣的問題,但是由.csproj文件的合併引起的。我不得不卸載/編輯項目並刪除重複的引用,以便NuGet可以在解決方案中重新加載項目文件後再次管理它們。 – tmgirvin 2016-02-04 23:23:50

2

我能夠通過卸載,然後安裝我的項目正在使用的Nuget包來解決此問題。

0

晚會晚了,但它可能有助於某人。如果您將nuget repositoryPath(也許通過nuget.config)更改爲不同的路徑,則可能會出現此問題。

例如

  • 的NuGet最初將拉你的包成默認路徑
  • 的NuGet repositoryPath改變。
  • 新軟件包將被拉入此路徑,但現有路徑不會被清除(msbuild clean不會幫助)。
  • 當您構建時,您的提示路徑將指向最初的回購路徑,並且將構建,因爲包仍然存在於該位置。
  • (更糟)現在添加的任何nuget包都會指向新的回購路徑。

正如@Baron所述,重新安裝將解決所有這些問題。我也建議從工作樹中刪除所有的bin/obj/packages,以確保你沒有任何垃圾。

相關問題