【茶包射手日記】NuGet Packager編譯卡住無回應

自從安裝Visual Studio NuGet Packager套件後,製作及上傳NuGet Package的工作輕鬆許多。隨著應用範圍擴大,發現一個問題:當打包項目變多,有時會發生編譯後一直停在編譯狀態永遠不結束,只能強制中止。試著增減打包項目,反覆測試後確定一點,當住與項目數目無絕對關聯,而是「項目愈多,出問題機率愈高」。

為追查問題看了NuGetPackage.ps1,才對NuGet Packager運作原理有點了解。原來它在背後是透過PowerShell Script使用程序物件啟動nuget.exe,呼叫WaitForExit()等待程序結束,透過StandardOutput、StandardError擷取輸出,再依ExitCode判斷作業成功或失敗。

測試直接執行「nuget pack Package.nuspec –Verbosity Detailed」,無論項目多寡都能順利完成。我這才注意到,原先編譯無反應時下,其實打包檔已順利產生。換句話說,若要精準描述問題,應為「當打包項目較多,有時會出現NuGet跑完但WaitForExit()沒被觸發,造成使用者空等」,試著寫成WaitForExit(10*1000)加上10秒逾時設定,編譯狀態便會在10秒後結束且結果正確,驗證問題出在WaitForExit()未正確偵測到程序結束。

依此推論是PowerShell WaitForExit的Bug,朝此方向爬文,在官網QA找到相同問題回報,而有網友提供一則決方案,將$packageTask.WaitForExit()如下圖移至$output及$error字串讀取動作的後方,果真解決了問題。

以上經驗提供使用NuGet Packager的朋友參考。而本次調查另一項收獲是見識到NuGet Packager利用PowerShell存取專案項目進行作業,這個技巧對開發自動化很有用處,收入錦囊~

歡迎推文分享:
Published 25 June 2016 07:09 AM 由 Jeffrey
Filed under: ,
Views: 3,268



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<June 2016>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication