簡體   English   中英

在TFS下構建CI隊列時未恢復的軟件包(VS Online VS2015)

[英]Packages not restored when building on CI queue under TFS (VS Online VS2015)

我問了一個關於構建錯誤問題,並繼續通過我的絕望自我調查問題。

我猜測問題是關於被提取但未正確放置的包。 透過痛苦無聊的日志給我看了這個。

2016-01-15T21:50:40.8680146Z
項目中不存在“C:\\ Program Files(x86)\\ MSBuild \\ Microsoft \\ NuGet \\ Microsoft.NuGet.targets(186,61)”中的BeforeTargets屬性中列出的目標“BeforeGenerateProjectPriFile”,將被忽略。

此后不久,我可以看到一些橫向走勢的第一個跡象。

2016-01-15T21:50:43.9631666Z ## [警告]
C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.Common.CurrentVersion.targets(1819,5):警告MSB3245:無法解析此引用。 無法找到程序集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。 檢查以確保磁盤上存在程序集。 如果您的代碼需要此引用,則可能會出現編譯錯誤。
2016-01-15T21:50:43.9631666Z 2>
C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.Common.CurrentVersion.targets(1819,5):警告MSB3245:無法解析此引用。 無法找到程序集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。 檢查以確保磁盤上存在程序集。 如果您的代碼需要此引用,則可能會出現編譯錯誤。 [C:\\一個\\ 1 \\ S \\的MyStuff \\ MyStuff.csproj]

然后它繼續考慮那些不存在的東西。

2016-01-15T21:50:43.9661661Z
考慮“.. \\ packages \\ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 \\ lib \\ net45 \\ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll”,但它不存在。
2016-01-15T21:50:43.9671655Z
對於SearchPath“{TargetFrameworkDirectory}”。 2016-01-15T21:50:43.9681655Z
考慮“C:\\ Program Files(x86)\\ Reference Assemblies \\ Microsoft \\ Framework.NETFramework \\ v4.5.2 \\ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.winmd”,但它不存在。
...

我不熟悉TFS上的CI和VS Online,所以它很少告訴我在哪里可以解決這個問題。 我用谷歌搜索了一半,並在門戶網站上測試了大量不同的設置。 沒運氣。 我可能會導致其他錯誤(當我知道我輸入了錯誤的東西等等)但是不管怎么說,我都會轉向這個錯誤。

任何提示將不勝感激。

從版本VS2015開始,不需要NuGet文件夾,這與我見過的指南相反。 實際上,唯一需要的文件是包的配置。 檢查包及其可執行文件是常見但非常具有欺騙性的解決方法,但這可能會產生很多問題。 我不建議這樣做,因為它隱藏了問題,而不是解決它。

首先,驗證您的構建實際上是否還原了包。 我注意到在錯誤日志中,它看起來如果確實如此,但這是一個陷阱。 這是嘗試恢復,而不是實際的成功。 如果你遇到這樣的警告(對於nUnit,WebGrease,NewtonSoft或NuGet控制下的任何其他軟件包也是如此):

警告MSB3245:無法解析此引用。 無法找到程序集“EntityFramework”。 檢查以確保磁盤上存在程序集。

首先驗證日志是否包含以下段落:

PrepareForBuild:
創建目錄“obj \\ Debug \\”。
...
RestorePackages:
“C:\\ a \\ src \\ src.nuget \\ nuget.exe”安裝“C:\\ a \\ src \\ src \\ xxxx.Entities \\ packages.config”
-source -RequireConsent -o“C:\\ a \\ src \\ src \\ packages”
...
已成功安裝“EntityFramework 6.3.1”。 ResolveAssemblyReferences:
主要參考“EntityFramework”。

請記住,查看日志文件時,請搜索部分字符串,因為目錄,版本,軟件包的名稱等可能略有不同。 如果找不到,那么很有可能在構建服務器上沒有恢復軟件包。 本地編譯證明環境之間存在差異,很可能文件packages.config不可用。 這是一個棘手的錯誤,因為失敗的日志不會告訴你它丟失了。 事實上,我的日志中根本沒有提到它。

  1. 首先,我創建了一個全新的項目Auto並將其簽入。構建成功。
  2. 然后,我添加了Entity Framework,並且構建失敗並發出與您相同的警告。
  3. 最后,我檢查了packages.config文件。 構建成功。

在此輸入圖像描述

出現此問題是因為初始簽入選擇了許多要忽略的文件。 主要是binobj等,還有packages.config 需要特別選擇它作為不被忽略的。 如果有人檢查了所有文件(在我的視圖中不是很明智),他也會獲得所需的文件,因此看起來好像他們做得對。 請注意,您應該首先將文件添加到版本控制。 這樣,它就會在每次更改時簽入。 否則,如果您在本地添加新包或更新現有包,問題將重新出現。

如果收到警告但已恢復軟件包(日志中列出了行),請嘗試在本地更新軟件包或重新安裝。 最后,您可以通過運行Update-Package -Reinstall從程序包管理器控制台刷新安裝。

  • 類似的問題與舊版本的軟件包管理器的位置
  • 這里需要檢查的文件(自VS 2015以來)的建議不正確。
  • 此處有文件布局的過時描述(對於VS 2013及更早版本有效)。
  • 有關如何在此構建NuGet文件結構的更多信息。
  • 關於這個問題的非常好的博客(奇怪的是它在Google中沒有出現在這里)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM