지난주 보안 업데이트 이후 컴파일에 실패한 오래된 ASP.NET MVC 3 웹 응용 프로그램이 VS2010에서 빌드되었습니다.
문제는 System.Web.Mvc.dll에 대한 참조가 손상되었다는 것입니다.
보안 업데이트가 실행되지 않은 빌드 시스템에서 솔루션 파일을 열고 References-> System.Web.MVC에 대한 속성 대화 상자를 열면 괜찮아 보입니다.
경로는 C : \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll 버전은 3.0.0.0입니다.
그러나 보안 업데이트가 실행 된 개발 컴퓨터에서 솔루션 파일을 열면 References-> System.Web.MVC가 누락 된 것으로 플래그가 지정됩니다. 제거하고 VS2010의 참조 추가 대화 상자를 사용하여 다시 추가하려고하면 표시되지 않습니다.
웹을 돌아 다니면서 NuGet을 사용하여 MVC를 업데이트하는 것과 관련된 제안을 받았습니다. VS2010 프로젝트에서 NuGet을 사용하지 않았기 때문에이 상황에서는 그다지 옳지 않은 것 같습니다. 어쨌든 시도해 보았지만 6 개의 참조가 누락되었습니다.
Windows 탐색기에서 “C : \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll”의 속성을 보면 빌드 컴퓨터에서 버전 3.0.0.0이 표시됩니다.
dev 컴퓨터의 속성을 보면 3.0.50813.1 버전이 표시됩니다.
내가 필요한 것은 .NET 3.0 프레임 워크에 설치된이 두 DLL 중 어느 것이 든 빌드하고 실행할 수 있도록 빌드 및 실행 방식을 변경하는 방법입니다.
아이디어?
작동하지 않는 내가 시도한 것
첫 번째 시도-어셈블리가없는 경우 추가합니다. 누락 된 이전 참조를 삭제했습니다. 그런 다음 “ASP.NET MVC3 \ Assemblies”폴더에서 내 프로젝트의 폴더로 DLL을 복사했습니다. “항상 복사”로 설정하고 참조로 추가합니다.
이를 통해 프로젝트는 VS2010에서 컴파일되지만 aspnet_compiler로 페이지를 미리 컴파일하려고 할 때 경고가 표시됩니다.
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
지금까지 런타임 정책을 이해하지 않도록 관리 할 수 있었지만 web.config에 이것을 추가하려고했습니다.
<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>
</assemblyBinding>
</runtime>
다시 시도했고 동일한 경고를 받았습니다.
내 질문은-여전히 문제가 있습니까? 아니면 경고에도 불구하고 해결할 것인가?
답변
NuGet을 통해 최신 버전의 MVC3를 가져옵니다. Dev Studio에서 프로젝트를 엽니 다. Dev Studio 하단에서 Package Manager Console 탭을 엽니 다. 그런 다음 다음 명령을 사용하십시오.
PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
“-Version”뒤에있는 탭 키를 클릭하면 사용 가능한 모든 버전의 목록이 표시됩니다.
이전 버전의 NuGet이있는 경우 업그레이드해야한다는 오류가 표시 될 수 있습니다. 그렇다면 도구-> 확장 관리자를 열어 최신 버전의 NuGet을 설치합니다. NuGet을 설치하기 전에 Dev Studio를 관리자로 실행해야합니다.
MVC3를 설치하면 프로젝트의 Web.config가 업데이트됩니다.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
답변
MVC 5
C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll
MVC 4
C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll
MVC 3
C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll
MVC 2
C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll
답변
이 문제를 해결하는 가장 쉬운 방법은 웹 플랫폼 설치 관리자에서 ASP.NET MVC 3을 설치하는 것입니다.
http://www.microsoft.com/web/downloads/
또는 Nuget 명령을 사용하여
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
답변
VS 2017에서 솔루션을 청소하고 다시 빌드하여 수정했습니다.
답변
동일한 상황이 있습니다. Visual Studio 2010, NuGet이 설치되지 않았으며 System.Web.Mvc 버전 3을 사용하는 ASP.NET 응용 프로그램이 있습니다.
나를 위해 일한 것은 System.Web.Mvc를 사용하는 각 C # 프로젝트를 설정하고 솔루션 탐색기의 참조로 이동하고 System.Web.Mvc의 속성을 로컬 복사를 true로 설정하고 특정 버전을 false로 설정하는 것이 었습니다. 마지막으로 버전 필드에 해당 컴퓨터의 현재 버전이 표시되었습니다.
답변
vs2017에서이 문제가 발생하면 이미 nuget을 통해 MVC를 얻었지만 System.Web.Mvc는 “참조 추가”의 “어셈블리”목록에 나타나지 않았습니다.
해결책은 “참조 추가”대화창의 “어셈블리”에서 “확장”을 선택하는 것이 었습니다.
답변
제 경우에는 프로젝트에 모든 적절한 참조가있었습니다. 솔루션을 빌드하면 너겟 패키지가 자동으로 복원된다는 것을 알았습니다.