2012年11月27日

ASP.NET MVC - 將舊專案升級成.NET 4.5時,發生MSB3247錯誤

最近因為將ASP.NET MVC專案升級成.NET4.5,結果就發生了以下這個錯誤,主要原因是因為有組件使用了不同版本的.NET而造成衝突。

image

詳細的錯誤如下 :

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3247: 在同一個相依組件的不同版本之間發現衝突。

那這個到底怎麼發生的呢?,我們稍微還原一下案發現場 ( 學一下黑暗大XDD )。

這個專案,原本是架構在.NET Framework 4之下,也是從ASP.NET MVC 3升級上來的,而我們希望,將此專案改成.NET Framework 4,也就是大算把目標Framework改成,.NET Framework 4.5。

image

當然,改完後,沒出現甚麼問題,但是按下編譯的時候,第一次,就會出現如下圖錯誤。( 第二次以後就不會出現警告了… )

image

但老實說,這個錯誤訊息,真的看不出個所以然,所以我們要先改一下,讓這個錯誤訊息輸出多一點的資訊,我們使用選擇Visual Studio的工具,選項,就可以打開下面的視窗;之後我們在MSBuild 專案組建輸出詳細等級,從最小改成詳細。

image

在一次的建置後( 記得要改回.net 4.0再改回.net 4.5才會再次出現警告 ),就可以發現,原來是system.net.http這個組件的關係。

image

知道後就好處理了,接下來,我們請出Google做查詢,結果果然查到,已經有人回報這個問題。

image

接下來,我們當然就是去看一下專案檔的內容,我們選擇了要升級.NET 4.5出錯的專案,並選擇卸載專案。

image

接下來在選擇編輯。

image

我們就可以找到目前System.Net.Http是2.0.0.0。

image

而今天,剛好Visual Studio 2012 update 1已經正式釋出,所以小弟也順便開一個新的ASP.NET MVC 4專案,來比對看看,目前新的專案,是如何參考的,如下。

image

既然新版的寫法都不一樣了,我們當然就使用新版的吧XDD,所以我們就把參照改成如下。

<Reference Include="System.Net.Http">
</Reference>
<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.4.0.20710.0\lib\net40\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest">
</Reference>

這樣,就不會有任何問題了~~

參考網址

沒有留言:

張貼留言