June 1, 2013

warning MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5" were not found

在使用Jenkins建置一個.NET 4.5函式庫專案時發現,雖然專案建置成功,但進入Console Output查看時卻出現了warning MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5" were not found的警告訊息,且bin資料夾也多了幾個沒見過的檔案。
我的Jenkins是安裝在Windows 2008 Server 64-bit R2 SP1上,系統沒有安裝任何Visual Studio版本,僅安裝.NET Framework 2.0/3.5/4.0/4.5。直覺告訴我,只要把Visual Studio 2012安裝上Jenkins  Server就可以解決此問題了。的確,在我安裝完VS 2012後,這個問題得到了解決,bin資料夾那些沒見過的檔案也不見了。然而,為了解決這個問題竟然要大費周章安裝VS 2012並佔用掉2~3 gigabytes的空間,也太不科學了。

經過明查暗訪,在stackoverflow發現國外網友也遇到了相同問題,一樣是在CI Server建置專案時遇到這個警告訊息,只不過該名網友是建置.NET 4.0專案,而我是.NET 4.5。文中的回應建議了兩種方式來解決。

方法1:安裝Windows SDK

如果是.NET 4.0專案,可以安裝Microsoft Windows SDK for Windows 7 and .NET Framework 4;.NET 4.5專案則安裝Windows Software Development Kit (SDK) for Windows 8。這裡以安裝Windows Software Development Kit (SDK) for Windows 8為例。

下載sdksetup.exe

執行sdksetup.exe,選擇Install the Windows Software Development Kit to this computer,點選Next

選擇No,點選Next

點選Accept

僅勾選.NET Framework 4.5 Software Development Kit,點選Install


安裝完成後點選Close。接下來再回到Jenkins建置一次專案可以發現警告訊息已不再出現,bin資料夾也沒有莫名的檔案。


方法2:複製安裝有VS 2012開發環境主機的Reference Assemblies資料夾

找一台有安裝VS 2012的主機,將C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5整個資料夾複製到Jenkins主機上的路徑C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v4.5


至Jenkins的Configure System頁面,將MSBuild的參數加入/p:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v4.5"並儲存資料


再次建置.NET 4.5專案,可以看到專案已成功建置,警告訊息也未出現。

No comments: