programing

Windows 업데이트 후 "'Html' 유형 또는 네임스페이스 이름이 네임스페이스 'System'에 없습니다.웹.Mvc'"

css3 2023. 6. 19. 21:55

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의 제 개발 기계에 있습니다.실행 중이었고, 업데이트를 하고 다시 부팅했는데 이제 더 이상 실행되지 않습니다.

다음은 업데이트에서 최근에 설치한 내용입니다.하나씩 제거할 수도 있지만, 이야기의 일부를 놓치고 있는 것처럼 느껴지기 때문에 실제로 무엇이 잘못되고 있는지 알고 싶습니다.

Installs from the update

이런 젠장, 힌트에 대해 @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.dlldirectory.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 참조).

이 문제에는 두 가지 측면이 있습니다.

  1. 레이저는 기본적으로 MVC에 대한 참조를 포함하지 않으므로, 일부 버전의 MVC DLL이 bin 폴더에 존재하지 않는 한 컴파일이 작동하지 않습니다.
  2. 이 업데이트가 설치되지 않은 별도의 컴퓨터에 배포하면 MVC DLL이 더 이상 출력에 포함되지 않으므로 MVC가 누락됩니다.

문제 1번을 보고 계십니다.두 가지 문제를 모두 해결하려면 다음을 모두 변경하는 것이 좋습니다.

  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>
    
  2. CopyLocal=true 행을 하거나 VSUI에서 을 추가합니다.Referencesvroj 파일:

    <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로 수동으로 설정하는 것이 좋습니다.

  1. 현재 프로젝트의 참조로 이동할 수 있습니다.
  2. 에서 마우스 를 클릭합니다.System.Web.Mvc합니다.
  3. 속성 창이 열립니다.
  4. 로컬 복사본을 다음으로 변경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