버전 3.0.0.1에 대한 ASP.NET MVC 보안 패치로 인해 빌드가 중단됨
이 질문에 이미 답변이 있습니다.
은 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" />
Resharper는 문제를 표시하지 않지만 해결되지 않은 많은 MVC 유형과 경고와 함께 빌드가 실패합니다.
경고 :이 참조를 해결할 수 없습니다. "System.Web.Mvc, 버전 = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"어셈블리를 찾을 수 없습니다. 어셈블리가 디스크에 있는지 확인하십시오. 코드에이 참조가 필요한 경우 컴파일 오류가 발생할 수 있습니다.
이런 종류의 말이됩니다. 이 버전은 내 컴퓨터에 더 이상 존재하지 않습니다.
개발 머신, 빌드 서버 및 프로덕션 서버에서 정확한 MVC 버전을 보장 할 수 없습니다. 그들은있을 수 있습니다 3.0.0.0또는 3.0.0.1이 언제든지 변경 될 수 있습니다. Windows Update는 언제든지 새로운 MVC 버전을 출시 할 수 있습니다. 또한 MVC 업데이트가 릴리스 될 때마다 모든 * .csproj 파일의 버전 번호를 높이고 싶지 않습니다.
여러 버전이 업데이트의 영향을받습니다.
- KB 2993939 : Microsoft ASP.NET MVC 2 용 보안 업데이트
- KB 2993937 : Microsoft ASP.NET MVC 3 용 보안 업데이트
- KB 2993928 : Microsoft ASP.NET MVC 4.0 용 보안 업데이트
- KB 2992080 : Microsoft ASP.NET MVC 5.0 용 보안 업데이트
보안 공지 : MS14-059 : ASP.NET MVC의 취약점으로 인한 보안 기능 우회 문제점 (2990942)
이 상황을 처리하는 가장 좋은 방법은 무엇입니까? 빌드 및 프로덕션을 해제하고 향후 MVC 업데이트에 대해 안전 할 수있는 방법은 무엇입니까?
나는 이것을 다음과 같이 고쳤다.
- MVC 참조를 제거하고 프로젝트에 올바른 참조를 추가하십시오.
- 변화
Copy Local에 대한 참조의 속성을true. - 에서
bindingRedirect설정 업데이트web.config:
web.config runtime섹션 :
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
...
Copy Local설정을 변경하면 프로젝트를 게시 할 때 폴더 의 System.Web.MVC.dll파일 이 포함 bin되므로 서버가 새 버전으로 업데이트되지 않은 경우에도 작동합니다.
이와 같은 업데이트는 거의 발생하지 않습니다. MVC 3이 출시 된 후 패치 된 것은 이번이 처음입니다. 서버가 업데이트되면로 Copy Local다시 변경할 수 있어야합니다 false. 다음 번에 Microsoft가 이와 같은 업데이트를 수행하면 아마도 이와 같은 문제를 먼저 해결해야 할 것입니다.
Nuget을 사용하여 프로젝트에 Microsoft.AspNet.Mvc 패키지를 설치했습니다.
Install-Package Microsoft.AspNet.Mvc -Version <version> -Project PROJECTNAME
MVC 4 version: 4.0.40804.0
MVC 3 version: 3.0.50813.1
이것은 문제를 해결했습니다. 세부 정보 : http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx
핫픽스가 구성 파일 ( System.Web.Mvc.dll.config )을 다음 폴더에 제공하므로 프로덕션 시스템은 정상이어야 합니다.
%SystemRoot%\assembly\GAC_MSIL\policy.3.0.System.Web.Mvc\3.0.0.1__31bf3856ad364e35
구성 파일에는 새 버전에 대한 어셈블리 리디렉션이 포함되어 있으며 이는 web.config에있는 모든 항목을 재정의합니다.
<?xml version="1.0"?>
<!-- http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx#BKMK_Redirectingassemblyversionsbyusingpublisherpolicy -->
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0-3.0.0.1" newVersion="3.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Follow the advice by @Guffa for your build system, or use nuget to update. I believe the solution which works depends on how you deliver the MVC binaries to your system (either bin deploy or GAC).
What worked in my case was to change the Reference element in project file so Version=3.0.0.0 is now Version=3.0.0.1. I also updated the System.Web.Mvc.dll file sitting in _bin_deployableAssemblies folder to the new version and added a HintPath element in the Reference element pointing to said dll so it's picked up even when in GAC we still have version 3.0.0.0.
The tricky part is to not forget to update reference in all projects referencing System.Web.Mvc (e.g. including test project).
'IT박스' 카테고리의 다른 글
| Web.Debug.config 및 Web.Release.Config 파일의 용도는 무엇입니까? (0) | 2020.08.08 |
|---|---|
| TypeScript 파일에 "Use Strict"가 필요합니까? (0) | 2020.08.08 |
| data.frame 행을 목록으로 (0) | 2020.08.07 |
| IntelliJ와 Tomcat .. 하우투 ..? (0) | 2020.08.07 |
| '잃어버린'커밋을 포함하여 모든 git 커밋 목록을 가져옵니다. (0) | 2020.08.07 |