這是一個後續到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?還是有可能完全刪除綁定重定向?
我不能相信我是唯一一個在這種情況下,也會歡迎任何解決方案,我沒有想到的建議。