2014-03-05 41 views
2

假設我們有以下項目結構:的NuGet和TFS 2013的構建時,SharePoint 2013包找不到裝配

D:\workspace\Internet\Web 
Web.sln 
-> Project A 
-> Project B 
-> CommonSharePointProject X 
    -> uses and packages Newtonsoft.Json (for example) 

D:\workspace\Common 
CommonLibraries.sln 
-> CommonSharePointProject X 
    -> uses and packages Newtonsoft.Json 
-> Common Library Y 
-> Common Library Z 

我的問題是,常用的庫。 軟件包目錄將在解決方案的目錄下創建。 從Visual Studio中部署工作得很好。 CommonLibrary X在Web \ packages ...文件夾中引用了newtonsoft.json.dll。

但是,TFS Build期望newtonsoft.json.dll位於CommonLibraries \ packages中。 這是爲什麼?我該如何解決這個問題?

的錯誤如下: d:\ ws_build \ 1 \ CMP04 \ Buildname的\ src \共同文件\ SharePoint \東西\ MAIN \ CommonSharePointLibrary \包\ Package.package:以下文件無法找到: 「d:\ ws_build \ 1 \ CMP04 \ BuildName的\ src \共同文件\ SharePoint \東西\ MAIN \包\ Newtonsoft.Json.6.0.1 \ LIB \ net45 \ Newtonsoft.Json.dll」。

...構建過程構建D:\ ws_build \ 1 \ CMP04 \ Buildname \ src \ Internet \ Web \ web.sln。 那麼爲什麼它不在internet \ web \ packages而不是普通的... \ packages中尋找程序集?

SharePoint程序包使用相對路徑引用第三方程序集:「.. \ packages \ Newtonsoft.Json.6.0.1 \ lib \ net45 \ Newtonsoft.Json.dll」。所以很顯然,在TFSBuild中,相對路徑指向與Visual Studio不同的地方。

另外假設我有另一個解決方案... CommonSharePointProject的引用Newtonsoft.Json指向哪裏?由於項目在多個解決方案中使用,因此我無法在每個解決方案中對不同的包文件夾有不同的參考。只有一個.csproj文件。

D:\workspace\Intranet\OtherWeb 
OtherWeb.sln 
-> OtherProject A 
-> OtherProject B 
-> CommonSharePointProject X 
    -> uses and packages Newtonsoft.Json 

回答

1

您是否已啓用「啓用包恢復」?

如果您擁有它(右鍵單擊您的解決方案 - >啓用軟件包恢復)。然後,「nuget軟件包恢復」將確保下載所有需要的軟件包以構建您的解決方案。這樣你可以忘記包裝。

你不需要把你的包上傳到tfs,實際上這個文件夾應該是空的,只能用packages.config,因爲他會讀這個文件來下載所需的包。

編輯: 如果你的問題是,你有一個解決方案項目,也已經有了自己的解決方案,你得到一個參考錯誤,請嘗試安裝該軟件包:

NuGetReferenceHintPathRewrite https://www.nuget.org/packages/NuGetReferenceHintPathRewrite

在您的解決方案的所有項目中安裝此選項。這將有助於參考問題;)或者至少我希望如此

+0

我已經有這個地方。包還原和只有packages.config在我的源代碼管理的包文件夾中。它對多個引用同一個.csproj沒有幫助。 – lapsus

+0

修復了編輯? ;) –

+0

不幸的是 - 我在解決方案中添加了你提到的nuget包給每個啓用nuget的項目。仍然沒有運氣。它似乎與SharePoint相關,因爲它不能*封裝*程序集。 (它編譯得很好。) – lapsus