微軟發佈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。
一種可能的替代
然而,如果這臺機器(或您的構建服務器)是在你的控制,下面的技巧會令你的項目彙編的機器,都有補丁和那些不這樣做。
- 右鍵單擊解決方案資源管理器(引用MVC 3的項目節點)中的項目節點,然後單擊「卸載項目」。
- 再次右鍵單擊它並選擇「編輯」。
- 找到對
System.Web.Mvc
的引用,並將其替換爲以下元素。
- 保存項目文件。
- 再次右鍵單擊項目節點,然後單擊「重新加載項目」。
<!-- 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對於上述工作,或者您需要調整的版本號爲適當匹配您的版本。
My I.T.傢伙讓我完全訪問Windows Server 2012,因爲我的MVC3應用程序是第一個在該機器上部署的應用程序。我決定把System.Web.Mvc版本3.0.0.1放入我的bin文件夾中。該應用程序至少開始,我得到的主頁等。但是,當我開始點擊一些鏈接時,我得到運行時錯誤,說:「無法加載文件或程序集...」,他們不是對System.Web.Mvc的引用。 – Ray
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
我從您提供的鏈接安裝了文件AspNetMVC3.msi。如你所說,用3.0.0.1取代了3.0.0.0。我重新編譯,現在它工作正常。你是一個明星NightOwl888!謝謝!這是答案。 – Ray