Windows更新导致MVC3和MVC4停止工作


126

我是10月15日唯一安装Windows Update(8.1)并由于此警告突然MVC停止工作的人吗?

警告1无法解决此引用。无法找到程序集“ System.Web.Mvc,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。检查以确保程序集在磁盘上。如果您的代码需要此引用,则可能会出现编译错误。

似乎此Windows更新安装了版本号为4.0.0.1的MVC的较新版本,并从程序文件文件夹中删除了旧版本。

有人知道如何解决此问题而不必为每个项目进行爬网吗?


参考来自哪里?GAC?参考程序集还是nuget?
吹箫

1
阅读有关此事的Microsoft博客。(感谢e4rthdog链接到此,只是发表评论以获取更多可见性)
Hanna



1
请记住,您还必须在生产环境中编辑web.config。
肯帕奇船长

Answers:


107

最好的解决方案是将DLL更新到版本4.0.0.1。尝试使用nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

这将自动更新

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

您只需要在以下位置手动编辑System.Web.Mvc版本:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />


1
是的,只需将GAC参考替换为NuGet参考即可。为我们工作。
abatishchev 2014年

7
阅读有关此事的Microsoft博客。(感谢e4rthdog链接到此,只是发表评论以获取更多可见性)
Hanna

10
知道为什么,在完成上述操作后,我会收到很多这样的警告:“ ASPNETCOMPILER:警告CS1702:假设程序集引用'System.Web.Mvc,版本= 4.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35'与' System.Web.Mvc,版本= 4.0.0.1,区域性=中性,PublicKeyToken = 31bf3856ad364e35',您可能需要提供运行时策略”?
Farinha 2014年

1
@Farinha,我有同样的警告。我无法摆脱他们。这些警告会破坏构建性能。您是否找到解决此问题的方法?
StefanHa 2014年

3
否@StefanHa,尚未找到修复程序。我注意到在整个应用程序中,在Views文件夹内的Web.config文件中有大量对4.0.0.0的引用,但是即使手动更改了所有这些警告,仍然存在。
Farinha 2014年

26

我们必须手动触摸每个.csproj才能将版本从4.0.0.0更新到4.0.0.1,以使构建顺利进行。很痛苦。

新参考应类似于:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3
请注意,对于MVC 3.0,需要进行相同的更改,引用应为“ 3.0.0.1”,以使该功能再次起作用。
安迪

就我而言,这是必需的,并且还需要指出“特定版本”为“ True”
pimbrouwers

24

更新后出现了相同的问题:

Microsoft ASP.NET MVC 4.0的安全更新(KB2993928)
http://support.microsoft.com/kb/2993928

但仅适用于引用System.Web.Mvc的项目,而未通过软件包安装。

我的同事没有安装Microsoft ASP.NET MVC 4.0 Runtime,也没有收到更新,所以没有麻烦,仍然可以引用4.0.0.0,而不是4.0.0.1。

我手动将引用更改为4.0.0。 。1,签入后,我的同事仍可以参考4.0.0进行构建。0
(同时在Win7 Pro SP1,VS2013 Pro Update 3上工作)


22

请查看此博客,推荐的方法是更新相应的NuGet包:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

报价:

通过实施以下解决方案之一,可以解决此问题:

  1. (首选)从NuGet库安装Microsoft.AspNet.Mvc(这将在您的web.config中安装绑定重定向)。您可以从NuGet程序包管理器或Visual Studio中的NuGet控制台执行此操作:

    安装软件包Microsoft.AspNet.Mvc-版本-Project PROJECTNAME

    MVC 4版本:4.0.40804.0

    MVC 3版本:3.0.50813.1

  2. 手动更新对System.Web.MVC.dll的引用(不要在GAC中使用该引用)。

    尝试添加参考->程序集->扩展对话框。



4

对于Web项目,您可能还必须更新web.config中的配置:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>

2

您需要在解决方案中更改对System.Web.Mvc的所有引用。只需删除它们并添加新的4.0.0.1版本即可。

同样在属性中将其更改copy local为true。

并在web.config中添加默认绑定以指向新版本的mvc:

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

设置CopyLocal=true对我们没有帮助;请参阅:自MS14-059起System.Web.MVC未复制到bin文件夹
Danny Tuppeny 2014年

1

好的,

对我来说,这是两个简单的步骤:

首先,我将对System.Web.Mvc的所有引用从4.0.0.0更改为4.0.0.1,

然后,我必须转到System.Web.Mvc的属性(可能是因为已删除并重新添加了它),然后将copy local更改为true。

希望这对某人有帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.