Razor보기에서 문자열 보간?


93

지원됩니까?

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

CS1056 : 예기치 않은 문자 '$'


당신이 말하는 코드를 보여줄 수 있습니까?
Jeroen Vannevel 2015 년

어떤 ASP.NET을 사용하고 있습니까 (ASP.NET 5 : .NET Core에 구축 된 새로운 ASP.NET 또는 ASP.NET 4로 업데이트)?
Richard

6
이건 어떻게 오프 토픽?!?!?! 어리석은.
Josh M.

1
감사합니다! 다른 사람이 그렇게 말해서 다행입니다. 나는 그것이 꽤 도움이된다고 생각했고 나는 개인적으로 같은 해결책으로 같은 문제를 가진 2 명의 사람들을 알고있다. 도대체 여기 책임자는 누구입니까 ??
Tim Schmidt

@TimSchmidt 닫기 대기열이 길기 때문에 때때로 질문이 부적절하게 종료됩니다. 그러나 다시 열기 대기열은 짧기 때문에 실제로 다시 열어야한다면 상당히 빨라질 것입니다.
o11c

답변:


124

업데이트 :

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에서 약간 버그 가 있으므로 문제가 발생하더라도 놀라지 않을 것입니다. 그들이 해결 될 것인지 여부는 또 다른 문제입니다.


아, 빙고, MVC 5를 사용하고있었습니다. 감사합니다!
Tim Schmidt

5
MVC 5.2.3이 작동합니다. asp.net 용 rosyln 코드 dom 패키지를 추가하기 만하면됩니다. 닫히지 않은 질문에서이 답변을 참조하십시오 : stackoverflow.com/a/31548221/637783
jbtule

1
그건 그렇고 대 오류를 업데이트하고 지금은 C # 6이 지원되지 않는다고 말합니다. 더 낫습니다
CMS

1
Web.Config도 업데이트 한이 NuGet 패키지를 설치 한 후에도 도구 팁으로 "기능 'null 전파 연산자'는 C # 5에서 사용할 수 없습니다. 언어 버전 6 이상을 사용하십시오."라는 오류 메시지가 계속 표시됩니다.
Super Coder

1
오른쪽 클릭 메뉴에 "Enable C # 6 / VB 14"옵션이 없었습니다. 하지만 Visual Studio, Project 메뉴에 있었으므로 거기에서 활성화했습니다. 감사.
HasanG 2017 년

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

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. 재시작 Visual Studio

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


이것이 오늘날 올바른 솔루션입니다. Microsoft의 설명에서 : Replacement CodeDOM providers that use the new .NET Compiler Platform ("Roslyn") compiler as a service APIs. This provides support for new language features in systems using CodeDOM (e.g. ASP.NET runtime compilation) as well as improving the compilation performance of these systems.
Luis Ferrao

1
내 시나리오에서는이 패키지가 이미 있었지만 버전 1.0.5였습니다. 1.0.8로 업데이트하면 문제가 해결되었습니다.
Jake

Visual Studio를 다시 시작할 필요가 없었습니다.
Johnathan Barclay

@JohnathanBarclay 제 경우에는 재시작이 필요했습니다. 어떤 사람들에게는 필요할 것이라고 생각하는 것이 안전하다고 생각합니다.
Loudenvier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.