2011-12-13 163 views
1

我已經在團隊城市中建立了一個構建,在測試項目中使用了NuGet包參考。使用NuGet包構建團隊城市

我已經使用該文件夾是結構法

\ 
|- Project1 
    \- Project1.csproj 
|- Project1.Test 
\- Project1.Test.csproj 
|- packages 
\- lib 
    \- RhinoMocks 

的PROJECT1項目成功地建立,但測試項目上ResolveAssemblyReferences步驟失敗。相對路徑似乎不正確。

[13:16:55]: [ResolveAssemblyReference] C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360, 9): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Rhino.Mocks, Version=3.6.0.0, Culture=neutral, PublicKeyToken=0b3305902db7183f, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. 
[13:16:55]: [ResolveAssemblyReference]   For SearchPath "{HintPathFromItem}". 
[13:16:55]: [ResolveAssemblyReference]   Considered "..\packages\RhinoMocks.3.6\lib\Rhino.Mocks.dll", but it didn't exist. 

的TeamCity構建配置:

  • MSBuild任務
  • 構建文件路徑:Project1.Test \ Project.Test.csproj
  • 工作目錄:%system.teamcity.build.checkoutDir %\ Project1.Test
  • VCS root指向上面文件夾結構的根目錄。

至於我可以告訴這可能是一個MSBuild問題,當我在構建代理上的簽出文件夾中的命令行上運行MSBuild時遇到同樣的錯誤。

更多信息: 提示路徑由Nuget包配置提供。在Visual Studio中,包引用可以正常工作。但是,通過MSBuild運行時,它似乎對當前目錄感到困惑。 .. \ packages ...路徑實際上是Nuget的逐字引用路徑。

回答

0

你有一個混合的引用,具有強大的程序集名稱(版本等)和提示路徑。如果程序集位於機器上的GAC中,即使提示路徑錯誤,它也會被定位。如果它不在構建機器的GAC中,則無法找到它。檢查你的項目文件,並查看引用上的HintPath元數據是否是正確的路徑(看起來應該是「.. \ packages \ lib \ RhinoMocks ...」,而不是出現在輸出中的內容)

這就是一堆IFS的,任何更多的想法我需要看看有什麼發生故障的項目文件中

1

我很困惑你的項目結構的這一部分:

|- packages 
\- lib 
    \- RhinoMocks 

該不該」如果你從NuGet中取出軟件包,那麼這是必須的。應該檢查到源代碼控制中的「軟件包」下的唯一文件是repositories.config。

另外,當TeamCity運行MSBuild時,你如何下載相關的NuGet依賴關係?是通過TeamCity「NuGet安裝程序」還是將您的解決方案/項目配置爲自動運行nuget安裝?

+0

我會檢查你的建議。我不知道應該檢查什麼,不應該檢查什麼,也不知道Nuget安裝程序的存在。 – benPearce