安装ASP.NET MVC 3安全更新后KB2990942,MVC版本似乎从3.0.0.0增加到3.0.0.1.这会导致Visual Studio不再找到引用.
<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Run Code Online (Sandbox Code Playgroud)
Resharper没有显示任何问题,但构建失败,有许多未解析的MVC类型和警告:
警告:无法解析此引用.无法找到程序集"System.Web.Mvc,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL".检查以确保磁盘上存在程序集.如果您的代码需要此引用,则可能会出现编译错误.
这种做法很有道理.我的机器上不再存在此版本.
我无法保证dev机器,构建服务器和生产服务器上的确切MVC版本.他们可能有3.0.0.0或3.0.0.1可能随时改变.Windows Update可能随时发布新的MVC版本.此外,每当发布MVC更新时,我都不希望增加所有*.csproj文件中的版本号.
更新会影响多个版本:
安全公告:MS14-059:ASP.NET MVC中的漏洞可能允许安全功能绕过(2990942)
处理这种情况的最佳方法是什么?如何在未来的MVC更新中展开构建和生产并保持安全?
.net versioning asp.net-mvc assembly-references assembly-binding-redirect
我做了Windows更新,然后我的asp.net mvc 5应用程序将不再加载抱怨
CS0234: The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc'
Run Code Online (Sandbox Code Playgroud)
表明我的观点web.config有错
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="Ogre.Extensions" />
<add namespace="Newtonsoft.Json"/>
</namespaces>
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
现在这非常令人困惑.在我的项目本身,我可以看到Html命名空间,在ILSpy中打开我的程序集,我可以导航到绑定System.Web.Mvc,我也可以,并且融合日志没有显示任何可疑的绑定错误.
这就好像只是我的观点被绑定(成功)到旧版本的Mvc.为什么会发生这种情况?我该如何解决?
让我明确指出,没有配置甚至代码更改.这是我在IISExpress上的开发机器上的全部内容.它正在运行,我做了更新并重新启动,现在它不再运行了.
这是我最近安装的更新.我可以一个接一个地删除它们,但我想知道实际上出了什么问题,因为我觉得我错过了故事的一部分.

今天早上据报道,我们的QA服务器上的网络应用程序完全被破坏,并报告了来自Web.config的以下错误:
无法加载文件或程序集'System.Web.Mvc,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.该系统找不到指定的文件
记住眼看提到MVC一个Windows更新,我做了一些挖掘和发现大量 的 人 报告最近的Windows更新打破MVC.
在仔细研究了这些问题和我们的服务器之后,似乎被咬过的东西与那些其他问题中的东西不匹配,但它看起来确实相关.这是我们认为的知识:
我们认为已经破坏的原因导致了"糟糕的构建":
假设上述行为是正确的,这意味着任何时候MS通过Windows Update 在GAC中为NuGet DLL提供服务,我们的BuildServer将开始生成不完整的构建(错过那些已经注入GAC的DLL) .
升级到MVC 5.2解决了这个问题(可能是因为它没有修补,因此没有注入GAC); DLL现在已复制到输出文件夹.除了版本号更改(特别是没有<Private>添加/编辑节点)之外,差异没有变化升级到5.2.2 .
我们不希望开始GACing所有内容,也不希望创建手动构建步骤将所有DLL复制到bin文件夹中,以防MS修补它们.
那么,今天我们可以改变什么来确保我们不会最终导致BuildServer默默地产生错误的构建,如果MS将来修补其他DLL?
参考问题/ 26393157/windows-update-caused-mvc3-and-mvc4-stop-working.解决下面警告的最快方法是什么?
假设程序集引用'System.Web.Mvc,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'匹配'System.Web.Mvc,Version = 4.0.0.1,Culture = neutral,PublicKeyToken = 31bf3856ad364e35',您可能需要提供运行时策略.
我昨天运行了Windows Update,当我尝试发布我的ASP.NET MVC 4项目的新版本时,它引入了一些问题.
应用程序在本地编译并运行正常,但是当我将版本推送到我的网络服务器上的测试站点时,它会出现错误消息:
System.Web.HttpCompileException: (0): error CS1705: Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
Run Code Online (Sandbox Code Playgroud)
经过一些研究后,我发现这是由于从4.0.0.0更新到4.0.0.1.我从我的项目中删除了System.Web.Mvc dll并读取了具有更高版本的dll.一切都在本地工作,但不在网络上.然后我浏览了web.config并将任何提及的4.0.0.0更改为4.0.0.1.同样,这继续在内部工作但在外部失败.错误消息是:
Could not load file or assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) Description: An unhandled exception occurred during the execution of the current web request. Please review the stack …
这是Windows更新的后续原因导致MVC3和MVC4停止工作
我还遇到了我的开发机器上的Windows更新导致我的MVC 4项目停止工作的问题.我将程序集引用更改为目标版本4.0.0.1,它开始工作.为了我.
我的问题是该应用程序然后部署在许多Web服务器上.实际上,我们有一个构建服务器,其中构建了客户版本,然后是一些Web服务器.
第一个问题:当我们在生产服务器上运行Windows更新时,旧版本的应用程序将停止工作吗?我猜这个答案是肯定的.我们还没有在构建或生产机器上运行Windows更新.
更改引用意味着它不再可以在构建计算机上构建.我可以通过将Specific Version标志设置为false并将Local Local设置为true来解决此问题.然后它建立在我的开发环境和构建服务器上.
问题:如果我的特定版本为假,检查有多松散? 它允许4.0.0.x吗?4.0.xx?4.xxx?还是xxxx?
但是,它甚至在thsi配置中构建它然后无法在测试Web服务器上运行(无法找到程序集).这里的问题是我的web.config中有以下内容(根据我从MVC 2升级到MVC 4时的微软说明):
<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>
Run Code Online (Sandbox Code Playgroud)
问题是这条线
<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
Run Code Online (Sandbox Code Playgroud)
用于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服务器本身.
问题:
我遇到过这样的情况:运行 ASP.NET MVC4 时出现运行时错误。我最近从 MVC3 迁移到 MVC4。
启动调试器后,我立即遇到以下错误消息:
类型“System.Web.Mvc.WebViewPage”存在于“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\promotionweb\20a5681f\9ce59023\ assembly\dl3\29f671cf\37f0bcf2_4619d001\”中System.Web.Mvc.DLL'和'c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Web.Mvc \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.Web.Mvc.dll'
我在 IIS 7.5 中运行,具有 MVC 项目本身的解决方案设置、另一个 C# 库以及一个控制台应用程序项目。
我已经尝试了此答案中提到的所有步骤,这些步骤源自类似的问题。然而,它对我来说根本没有帮助。
我有一些怀疑它必须对不同的编译模型执行,所以我尝试编译 x86 和 AnyCPU,并清理上面提到的所有目录。似乎没有什么帮助。
有什么想法可能会导致 GAC 和我的临时 ASP.NET 文件之间出现这种干扰吗?