[c#] Razor보기에서 문자열 보간?

지원됩니까?

그렇다면 활성화하는 방법이 있습니까? Razor가 충분히 새로운 컴파일러를 사용하지 않는다고 가정하고 있습니다 …? VS2015 IDE는 괜찮은 것 같지만 런타임에

CS1056 : 예기치 않은 문자 ‘$’



답변

업데이트 :

Visual Studio 2015 업데이트 1부터 GUI에 아래 단계를 수행하는 간단한 프로세스가 있습니다. 웹 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 “Enable C # 6 / VB 14″를 선택하기 만하면됩니다. 자세한 내용은 MSDN 블로그 게시물 ” C # 6 / VB 14를 활성화하는 새로운 기능 “에서 확인할 수 있습니다.

이 답변이 작성된 이후 NuGet 패키지의 도움으로이 기능이 추가되었습니다.

MVC5를 사용하는 경우이 Nuget 패키지를 솔루션에 추가하십시오.

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

nuget 패키지는 web.config를 수정해야하지만 다음 구성이 web.config 파일에 있는지 확인합니다 (그리고 추가하지 않은 경우).

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

MVC6에서는 이것이 내장되어 있습니다.


원래 답변 :

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

이것은 MVC6이있는 C # 6에서만 작동합니다. C # 6 컴파일러로 MVC5를 실행하더라도 작동하지 않습니다.

비결은 면도기 파서가 아직 일부 구문을 인식 할만큼 똑똑하지 않기 때문에 전체를 괄호로 묶어야한다는 것입니다 ( ?.면도기 뷰에서도 null 조건부 연산자 ( )를 사용할 때이 작업을 수행해야합니다 ).

즉, Razor의 문자열 보간 은 현재 MVC6에서 약간 버그 가 있으므로 문제가 발생하더라도 놀라지 않을 것입니다. 그들이 해결 될 것인지 여부는 또 다른 문제입니다.


답변

  1. 패키지 관리자 콘솔 에서 다음 명령을 실행CodeDom 하여 프로젝트에 필요한 공급자를 추가합니다 . 필요한 설정을 web.config추가 CodeDom하기 위해 파일을 자동으로 수정합니다 .

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. 재시작 Visual Studio

참고 :@Jake은 당신이있는 경우,이 답변에 따라 자신의 의견에 언급 DotNetCompilerPlatform이미 패키지가 바로 업데이트해야 할 수 있습니다.


답변