Windows 업데이트로 인해 MVC3 및 MVC4 작동이 중지됨


126

내가 10 월 15 일에 Windows Update (8.1)를 설치 한 유일한 사람이며이 경고로 인해 갑자기 MVC가 작동을 멈 춥니 다.

경고 1이 참조를 해결할 수 없습니다. 어셈블리 "System.Web.Mvc, 버전 = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"을 찾을 수 없습니다. 디스크에 어셈블리가 있는지 확인하십시오. 코드에이 참조가 필요한 경우 컴파일 오류가 발생할 수 있습니다.

이 Windows 업데이트는 버전 번호 4.0.0.1의 최신 MVC 버전을 설치하고 프로그램 파일 폴더에서 이전 버전을 제거하는 것으로 보입니다.

누군가 각 프로젝트를 크롤링하지 않고이 문제를 해결하는 방법을 알고 있습니까?


참조는 어디에서 왔습니까? GAC? 참조 어셈블리 또는 너겟?
blowdart

1
문제에 대한 Microsoft 블로그 를 읽으십시오 . ( 더 많은 가시성을 얻기 위해 댓글을 달아 주는 e4rthdog 에게 감사드립니다 )
Hanna



1
프로덕션 환경에서도 web.config를 편집해야합니다.
선장 켄 파치

답변:


107

가장 좋은 해결책은 DLL을 버전 4.0.0.1로 업데이트하는 것입니다. 너겟을 사용해보십시오.

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

7
문제에 대한 Microsoft 블로그 를 읽으십시오 . ( 더 많은 가시성을 얻기 위해 댓글을 달아 주면 e4rthdog 에게 감사드립니다 )
Hanna

10
"ASPNETCOMPILER : warning CS1702 : 어셈블리 참조 'System.Web.Mvc, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'가 ' System.Web.Mvc, Version = 4.0.0.1, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ', 런타임 정책을 제공해야 할 수도 있습니다 "?
Farinha

1
@ Farinha, 나는 같은 경고가 있습니다. 나는 그들을 멀리 얻을 수 없습니다. 이 경고는 빌드 성능을 저하시킵니다. 이 문제를 해결하는 방법을 찾았습니까?
StefanHa

3
@StefanHa가 없습니다. 아직 해결책을 찾지 못했습니다. 응용 프로그램 전체에서, Views 폴더 내의 Web.config 파일에서 4.0.0.0에 대한 참조가 많이 있음을 알았지 만 수동으로 변경 한 후에도 경고가 남아 있습니다.
Farinha

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"이어야 다시 작동 할 수 있습니다.
Andy

제 경우에는 이것이 필요했으며 "특정 버전"이 "참"
임을 나타내야합니다.

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.1이 아닌 4.0.0.0에

대한 참조를 수동으로 참조를 4.0.0으로 변경했습니다. . 1 , 체크인 후에도 동료가 4.0.0을 참조하여 빌드 할 수 있습니다. 0 .
(Win7 Pro SP1, VS2013 Pro 업데이트 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.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를 가리 키도록 assambly 바인딩을 추가하십시오.

    <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

1

괜찮아,

나를 위해 그것은 두 가지 간단한 단계였습니다.

먼저 System.Web.Mvc에 대한 모든 참조를 4.0.0.0에서 4.0.0.1로 변경했습니다.

그런 다음 System.Web.Mvc의 속성으로 이동하여 (제거하고 다시 추가했기 때문에) 복사본을 로컬로 true로 변경해야했습니다.

이것이 누군가에게 도움이되기를 바랍니다.


0

@Krzysztof 솔루션 또는 위의 다른 답변을 시도한 후에도 여전히 같은 오류가 발생하면 MVC 런타임 4.0제거하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.