2016-02-06 63 views
0

我收到了需要修改的ASP.NET MVC應用程序,該應用程序使用System.Web.Mvc 3.0.0.0版。但是當我在開發機器上覆制文件時,我注意到我對System.Web.Mvc的引用被破壞了。所以我的第一本能是刪除參考並將其添加回來,這很好。我的應用程序編譯。但是我注意到這個改變之後,它現在引用了3.0.0.1版本。將對System.Web.Mvc的引用恢復回3.0.0.0版

問題出在這裏:客戶端的生產服務器有3.0.0.0版本,所以當我在服務器上部署它時,出現錯誤,說它找不到3.0.0.1。

如何將我的開發機器更改爲使用System.Web.Mvc版本3.0.0.0,以便在部署到生產時我不會收到此問題。

回答

1

微軟發佈Microsoft Security Bulletin MS14-059,這是一個至關重要的安全問題,它們破壞了與先前版本的MVC 3和4的向後兼容性。由於問題至關重要,因此無法將計算機恢復到3.0.0.0。

但是,這也使得它與MVC 3.0.0.1一起工作的項目無法在安裝了MVC 3.0.0.0的機器上編譯。這將完全刪除已安裝到全局程序集緩存中的MVC 3.0.0.0。

另一方面,MVC 3.0.0.1通過NuGet進行部署,您需要添加一個引用並重新編譯,以便該補丁能夠正常工作(如果您還沒有這樣做的話)。

最佳解決方案

正確的解決辦法是在目標計算機上安裝the patch

一種可能的替代

然而,如果這臺機器(或您的構建服務器)是在你的控制,下面的技巧會令你的項目彙編的機器,都有補丁和那些不這樣做。

  1. 右鍵單擊解決方案資源管理器(引用MVC 3的項目節點)中的項目節點,然後單擊「卸載項目」。
  2. 再次右鍵單擊它並選擇「編輯」。
  3. 找到對System.Web.Mvc的引用,並將其替換爲以下元素。
  4. 保存項目文件。
  5. 再次右鍵單擊項目節點,然後單擊「重新加載項目」。

<!-- Due to the windows update MS14-059, we need this hack to ensure we can 
build MVC3 both on machines that have the update and those that don't --> 
<Reference Condition=" Exists('$(windir)\Microsoft.NET\assembly\GAC_MSIL\System.Web.Mvc\v4.0_3.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll') " Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 
<Reference Condition=" !Exists('$(windir)\Microsoft.NET\assembly\GAC_MSIL\System.Web.Mvc\v4.0_3.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll') " Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <Private>True</Private> 
    <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.20105.1\lib\net40\System.Web.Mvc.dll</HintPath> 
</Reference> 

請注意,您需要有MVC NuGet package installed for version 3.0.20105.1對於上述工作,或者您需要調整的版本號爲適當匹配您的版本。

+0

My I.T.傢伙讓我完全訪問Windows Server 2012,因爲我的MVC3應用程序是第一個在該機器上部署的應用程序。我決定把System.Web.Mvc版本3.0.0.1放入我的bin文件夾中。該應用程序至少開始,我得到的主頁等。但是,當我開始點擊一些鏈接時,我得到運行時錯誤,說:「無法加載文件或程序集...」,他們不是對System.Web.Mvc的引用。 – Ray

+0

MVC 3.0.0.0由安裝程序安裝並進入全局程序集緩存,該緩存與NuGet部署的3.0.0.1不同。安裝[補丁](https://www.microsoft。com/downloads/details.aspx?familyid = 7d07b199-e7b6-4526-930c-cea52dc15b95)將完全從機器上卸載3.0.0.0。您還需要確保'.csproj'文件的引用已更新至3.0.0.1,並且在部署之前已針對該項目編譯了該項目。 – NightOwl888

+0

我從您提供的鏈接安裝了文件AspNetMVC3.msi。如你所說,用3.0.0.1取代了3.0.0.0。我重新編譯,現在它工作正常。你是一個明星NightOwl888!謝謝!這是答案。 – Ray

相關問題