Windows 업데이트 후 "'Html' 유형 또는 네임스페이스 이름이 네임스페이스 'System'에 없습니다.웹.Mvc'"
Windows 업데이트를 했는데 asp.net mvc 5 애플리케이션이 더 이상 로드되지 않습니다.
CS0234: The type or namespace name 'Html' does not exist in the namespace 'System.Web.Mvc'
내 보기 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>
이것은 매우 혼란스럽습니다.에로▁the다▁itself▁see▁can▁in▁i를 볼 수 있습니다.Html
네임스페이스, ILSpy, ILSpy로 할 수 .System.Web.Mvc
저도 할 수 있고, 융합 로그에는 의심스러운 바인딩 오류가 없습니다.
마치 제 관점이 이전 버전의 Mvc에 (성공적으로) 구속되는 것 같습니다.왜 그런 일이 일어났을까요?어떻게 고칠 수 있습니까?
구성이나 코드 변경이 없었다는 점을 분명히 말씀드리겠습니다.이것은 모두 IIS Express의 제 개발 기계에 있습니다.실행 중이었고, 업데이트를 하고 다시 부팅했는데 이제 더 이상 실행되지 않습니다.
다음은 업데이트에서 최근에 설치한 내용입니다.하나씩 제거할 수도 있지만, 이야기의 일부를 놓치고 있는 것처럼 느껴지기 때문에 실제로 무엇이 잘못되고 있는지 알고 싶습니다.
이런 젠장, 힌트에 대해 @Nevada-Williford에게 감사합니다.들어가서 나의 설정하기System.Web.Mvc
에 대한 <Private>True</Private>
(로컬 복사 = 참) 수정했습니다.참고로, 업데이트 전에는 모든 것이 작동했고, 업데이트 후에는 다시 작동하도록 csproj를 수정해야 했습니다.
현재 진행 중인 작업 이론:
Copy Local = True
그리고.<Private>True</Private>
정확히는 아니지만 거의 같은 것이었습니다.전자는 Visual Studio 설정이고 후자는 ambuild 설정입니다.msbuild 설정이 없는 경우 VS에 있는 한 Visual Studio 설정이 적용됩니다.이번 업데이트에서 그들이 그것을 바꾼 것 같습니다.Copy Local
존재 특성만 반영합니다.
그되어 있지 않지만, 우의프트에우그리는속않만설았지정지하로으명,Copy Local = True
에 그서트업기전에하데이래▁so전.System.Web.Mvc.dll
directory.bin 파일에 됩니다.이 누락되었기 Copy Local
드라마들.False
그리고 당신은 그것을 설정해야 합니다.True
지역 사본을 확실히 얻을 수 있도록.
으로 설정하기Copy Local = True
또는 msbuild에 xml 요소를 추가하여 문제를 해결합니다.
편집: 이것이 특정 질문에 대한 답인 것처럼 보이지만, 여기에 오는 모든 사람은 댓글 스레드와 다른 답변(특히 dmatson의 답변)을 읽어 더 많은 맥락, 주의 사항 및 관련 버그를 확인해야 합니다.
이것은 다음이 없는 모든 사용자를 위해 깨졌습니다.CopyLocal=true
speak)는 MSBuild로 표시됩니다.<Private>True</Private>
) MS14-059에 의해 MVC 템플릿이 설정됩니다.<Private>True</Private>
기본적으로 NuGet을 사용하여 MVC 버전을 업데이트하면 해당 설정이 손실됩니다(NuGet 버그 #4344 참조).
이 문제에는 두 가지 측면이 있습니다.
- 레이저는 기본적으로 MVC에 대한 참조를 포함하지 않으므로, 일부 버전의 MVC DLL이 bin 폴더에 존재하지 않는 한 컴파일이 작동하지 않습니다.
- 이 업데이트가 설치되지 않은 별도의 컴퓨터에 배포하면 MVC DLL이 더 이상 출력에 포함되지 않으므로 MVC가 누락됩니다.
문제 1번을 보고 계십니다.두 가지 문제를 모두 해결하려면 다음을 모두 변경하는 것이 좋습니다.
다음 구성을 Views\Web.config에 추가합니다.
<system.web> <compilation> <assemblies> <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </assemblies> </compilation> </system.web>
트
CopyLocal=true
행을 하거나 VSUI에서 을 추가합니다.Reference
svroj 파일:<Private>True</Private>
따라서 전체 참조는 다음과 같습니다.
<Reference Include="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\..\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference>
나중에 패키지를 다시 업데이트할 경우 NuGet은 CopyLocal/Private 설정을 제거합니다(예: 오늘 MVC 5.2로 업데이트하는 경우).해당 버전의 MVC가 GAC인 경우 위의 A단계에서 구성을 추가한 이상 위의 문제 #1은 재발하지 않지만 문제 #2는 다시 발생할 수 있습니다.향후 이러한 일이 발생하지 않도록 하려면 NuGet 패키지 업데이트를 수행할 때마다 CopyLocal을 true로 수동으로 설정하는 것이 좋습니다.
- 현재 프로젝트의 참조로 이동할 수 있습니다.
- 에서 마우스 를 클릭합니다.
System.Web.Mvc
합니다. - 속성 창이 열립니다.
- 로컬 복사본을 다음으로 변경
True
CopyLocal=true를 설정하는 것은 도움이 되지 않습니다.솔루션을 클리닝한 후 닫고 다시 여는 것이 작동했습니다.전체 Visual Studio 인스턴스도 닫아야 할 수 있습니다.
이 문제는 보안 취약성 MS14-059를 수정하기 위한 Windows Update(KB2990942)로 인해 발생한 것으로 보이며, 이를 통해 보안 기능이 무시됩니다.Windows Update가 설치된 후 빌드 서버에서 빌드가 작동하지 않고 시스템에 4.0.0.1을 사용하도록 csproj 파일을 업데이트했습니다.웹.MVC 참조로 문제가 해결되었습니다.
이 취약성에 대한 Microsoft의 설명은 다음과 같습니다.
공격자가 이 취약성을 이용하도록 설계된 특수하게 조작된 콘텐츠가 포함된 웹 페이지를 방문하거나 특수하게 조작된 링크를 클릭하도록 사용자를 유인하는 경우 보안 기능을 무시할 수 있습니다.웹 기반 공격 시나리오에서 공격자는 웹 브라우저를 통해 취약성을 이용하도록 설계된 특수하게 조작된 웹 사이트를 호스트한 다음 사용자가 웹 사이트를 보도록 유인할 수 있습니다.공격자는 또한 사용자가 제공한 콘텐츠 또는 광고를 수락하거나 호스팅하는 손상된 웹 사이트 및 웹 사이트를 이용할 수 있습니다.이러한 웹 사이트에는 이 취약성을 이용할 수 있는 특수하게 조작된 콘텐츠가 포함될 수 있습니다.그러나 모든 경우 공격자는 사용자가 공격자가 제어하는 콘텐츠를 보도록 강제할 방법이 없습니다.대신 공격자는 일반적으로 전자 메일 메시지 또는 인스턴트 메신저 메시지에서 공격자의 웹 사이트로 이동하는 링크를 클릭하거나 전자 메일을 통해 전송된 첨부 파일을 열도록 함으로써 사용자가 조치를 취하도록 설득해야 합니다.
프로젝트 참조에서 CopyLocal=true를 설정할 뿐만 아니라 웹을 변경해야 할 수도 있습니다.구성 파일을 이렇게...
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.1" />
</dependentAssembly>
새 버전="4.0.0.1"을 확인합니다.이것은 저에게 효과가 있었고, 저는 그것이 몇몇 사람들에게도 도움이 되기를 바랍니다.
테스트/운영 서버에서 MVC 프레임워크 업데이트를 저장합니다.
마이크로소프트를 응원합니다.당신이 최고야!
내 고객들 앞에서 나를 무능해 보이게 하려는 당신의 시도는 또 실패했습니다!
설정뿐만 아니라CopyLocal=true
프로젝트 참조에서 웹을 변경해야 할 수도 있습니다.구성 파일을 이렇게...
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.1" />
</dependentAssembly>
추가했습니다.culture="neutral"
또한, 이 모든 것이 문제를 해결했습니다.
언급URL : https://stackoverflow.com/questions/26406804/after-windows-update-the-type-or-namespace-name-html-does-not-exist-in-the-na
'programing' 카테고리의 다른 글
JSON을 저장소/전송 형식으로 사용하는 데이터베이스 (0) | 2023.06.19 |
---|---|
Capistrano를 사용하여 배포할 때 Wordpress 및 플러그인을 업그레이드하는 방법은 무엇입니까? (0) | 2023.06.19 |
MongoDB 삽입 속도/초를 높이는 방법은 무엇입니까? (0) | 2023.06.19 |
Model.train()은 PyTorch에서 무엇을 합니까? (0) | 2023.06.19 |
SQL Server에 있는 모든 테이블의 모든 열에 대한 데이터 정렬 변경 (0) | 2023.06.19 |