2014-10-22 29 views
5

這是一個後續到Windows update caused MVC3 and MVC4 stop working如何從ASP MVC版本4.0.0.0處理轉換到4.0.0.1

我也有我的地方開發計算機上的Windows Update使我的MVC 4項目停止工作的問題。我將程序集引用更改爲目標版本4.0.0.1,並開始工作。爲了我。

我的問題是,該應用程序然後部署在一些Web服務器上。實際上,我們有一個構建服務器,在其中構建客戶版本,然後構建多個Web服務器。

第一個問題:當我們在生產服務器上運行windows update時,舊版本的應用程序將停止工作?我猜測答案是「是」。我們還沒有在構建或生產機器上運行Windows Update。

更改引用意味着它不再可以構建在構建機器上。我可以通過將特定版本標誌設置爲false並將本地複製爲true來解決此問題。然後它建立在我的開發環境和構建服務器上。

問題:如何檢查我的特定版本是否爲false?它允許4.0.0.x嗎? 4.0.x.x? 4.x.x.x?或x.x.x.x?

但是,即使它構建在配置中,它仍然無法在測試Web服務器上運行(無法找到程序集)。這裏的問題是,我在我的web.config以下(按當我升級從MVC 2至4 MVC微軟說明):

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity culture="neutral" name="System.Web.Mvc" publicKeyToken="31BF3856AD364E35"/> 
    <bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/> 
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> 
    <bindingRedirect newVersion="4.0.0.0" oldVersion="1.0.0.0-3.0.0.0"/> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/> 
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/> 
    </dependentAssembly> 
</assemblyBinding> 

的問題是針對行

<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/> 

System.Web.Mvc程序集。 (它過去常說4.0.0.0而不是4.0.0.1)。如果我在測試服務器上更改回4.0.0.0,那麼它就可以工作。

我的問題是雙重的。部分原因是我希望能夠在本地和我們的構建/生產服務器上構建和運行。但是,我們有一種情況,我們在同一臺服務器上託管了運行不同版本應用程序的許多客戶。我們不能強迫所有的客戶立即升級到最新版本,只是因爲這個Windows更新修復 - 除了其他任何東西,Web應用程序只是更大的應用程序套件的一部分,所以我們將不得不迫使他們升級!

我想有一個選擇是檢查每個仍在使用的舊版本,更新MVC版本號並創建一個新版本。然後,當我們更新Web服務器時,我們必須更新所有該服務器上的客戶到其當前版本的新版本(4.0.0.1兼容版本)。如果可能的話,我真的很想避免更新,提交和重建那麼多版本。

另一個選擇是不運行Web服務器上的Windows更新,並嘗試在生成機器上同時安裝4.0.0.0和4.0.0.1 dll。然後我們可以構建新舊版本。由於任何新版本(使用4.0.0.1)都將MVC程序集中的CopyLocal設置爲true(舊版本中沒有),因此它們應該能夠部署到Web服務器,而不必更新Web服務器本身。

問題:

  • 有誰知道是否有可能有同時安裝兩個版本?我希望我可以簡單地保存4.0.0.0的DLL,運行Windows Update然後複製到舊的dll與新的一起回到GAC。
  • 此補丁修復的安全風險有多嚴重?讓人們長時間運行舊版本會有問題嗎?只是讓Web服務器上的舊.dll存在安全風險,或者僅限於使用它的應用程序?
  • 有沒有辦法做到bindingRedirect到4.0.0.x?還是有可能完全刪除綁定重定向?

我不能相信我是唯一一個在這種情況下,也會歡迎任何解決方案,我沒有想到的建議。

回答

0

我是一個從稍微不同的角度遇到同樣問題的團隊的成員。它在安全更新錯誤時發佈的錯誤消息可能會引起誤解並且難以解釋。當我們嘗試將我們的應用發佈到不同的環境時,我們遇到了部署和構建錯誤。根本原因在於,此修補程序是通過Windows Update在某些測試環境中應用的,而不是在其他服務器上應用的。我們部署應用程序時,任何沒有該補丁的服務器都會崩潰。我建議讓您的系統團隊應用此修補程序並升級您的所有應用程序以引用此DLL。 Security updates由於引用的庫在源代碼管理中被忽略,但仍然在Web配置中詳細地闡述了它需要快速解決。一些環境將允許您右鍵單擊並選擇在本地使用哪個MVC dll版本,並仍然可以毫無問題地部署您的應用程序。如果您正在使用Web部署,並且必須能夠切換,則可以爲每個Transforms web config編寫Web配置轉換。我在修復這個問題(升級到4.0.0.1)時注意到的一件事是,在我的項目中升級到最新版本的MVC.dll允許我獲得最新版本的nuget軟件包。如果您不升級並保留舊版本,那麼您將陷入舊版本的MVC javascript,jquery和其他庫。