[asp.net-mvc-3] Razor HtmlHelper Extensions (또는 뷰의 다른 네임 스페이스)를 찾을 수 없음

PR이나 베타에서 이런 일이 발생하면 Dunno이지만 on HtmlHelper에서 확장 메소드를 만들면 Razor 기반 페이지에서 인식되지 않습니다.

namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}

나는 다음 <Namespaces>섹션에 추가했습니다 Web.config.

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>

그러나 페이지를 보려고 할 때 컴파일 오류가 발생합니다.

@Html.Foo()

WebForms로 페이지를 다시 만들면 정상적으로 작동합니다. 거래는 무엇입니까?

해결 방법

@using SomeNamespace.ExtensionsRazor 뷰에 포함 하면 작동하지만 훨씬 더 많이 있습니다.Web.config



답변

베타 이후 Razor는 네임 스페이스 가져 오기를 전역 적으로 정의하기 위해 다른 구성 섹션을 사용합니다. 당신에 Views\Web.config파일 다음을 추가해야합니다 :

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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.Routing" />
      <!-- Your namespace here -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

MVC 3 업그레이드 도구 를 사용하여 올바른 구성 값을 자동으로 확보하십시오.

참고 닫으하고 변경 에디터으로 뽑힐 할 파일을 다시해야 할 수도있다.


답변

허용 된 답변에서 알 수 있듯이 구성 파일의 섹션에 추가하여 모든보기에 “사용”을 추가 할 수 있습니다.

그러나 단일 뷰의 경우 사용할 수 있습니다.

@ SomeNamespace.Extensions 사용


답변

Razor를 사용하는 MVC 4 응용 프로그램에서 이와 동일한 오류가 발생했습니다. web.config 파일을 정리하기 위해 두 가지 webpages:구성 값을 제거했습니다 .

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />

이러한 구성 값을 복원하면 페이지가 올바르게 컴파일되고 .Partial()확장 방법 과 관련된 오류가 사라졌습니다.


답변

VS 2015 에서이 문제가 발생했습니다. 다음 문제가 해결되었습니다.

appsettings에서 “webpages : Version”을 찾아 버전 3.0.0.0으로 업데이트하십시오. 내 web.config에는

<add key="webpages:Version" value="2.0.0.0" />

그리고 나는 그것을 업데이트했다.

<add key="webpages:Version" value="3.0.0.0" />


답변

각 섹션의 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-2.0.0.0" newVersion="4.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>


답변

이 오류는 프로젝트와 연결된 면도기 엔진이 없음을 나타냅니다.

솔루션 : 솔루션 탐색기 창에서 웹 프로젝트를 마우스 오른쪽 단추로 클릭하고 “Nuget 패키지 관리 …”를 선택한 다음 “Microsoft ASP.NET Razor”를 설치하십시오. 그러면 올바른 패키지가 설치되고 web.config 파일에 필요한 항목이 추가됩니다.


답변

필자의 경우 VS 2013을 사용하며 기본적으로 MVC 3을 지원하지 않습니다 (당신도 ./Views/web.config 변경) : https://stackoverflow.com/a/28155567/1536197