웹 사이트 프로젝트 유형에서 C # 6을 사용하는 방법은 무엇입니까? 수있을 것으로 예상했습니다. 불행히도 다음과 같은 오류가

기존 웹 사이트 프로젝트 유형 Visual Studio 2015를 업데이트 하고 프레임 워크를 4.6으로 변경했습니다.

그런 다음 파일 뒤의 코드에서 모든 새로운 기능을 사용할 수있을 것으로 예상했습니다.

불행히도 다음과 같은 오류가 발생합니다.

오류 CS8026 : C # 5에서는 ‘표현 본문 속성’기능을 사용할 수 없습니다. 언어 버전 6 이상을 사용하십시오.

또는 예 :

오류 CS8026 : C # 5에서는 ‘보간 된 문자열’기능을 사용할 수 없습니다. 언어 버전 6 이상을 사용하십시오.

나는 빠른 구글 체크를했고 ScottGu의 블로그 포스팅 (페이지에서 “8026”을 검색)에 댓글올리는 사람을 발견 했습니다 .

나는 그의 솔루션을 이해하지 못하고 솔루션을 더 눈에 띄게 만들고 싶기 때문에이 게시물을 작성했습니다.

내 질문:

C # 6 기능을 인식하기 위해 웹 사이트 유형 (예 : 웹 응용 프로그램 아님) 의 Visual Studio 2015 프로젝트를 사용 하려면 어떻게해야합니까?



답변

ASP.NET MVC 5 (5.2.3 테스트)로 이것을 테스트했으며 마일리지는 다른 웹 프레임 워크에 따라 다를 수 있지만 Roslyn CodeDOM | NuGet 패키지

.NET 컴파일러 용 CodeDOM 공급자 …

새로운 .NET 컴파일러 플랫폼 ( “Roslyn”) 컴파일러를 서비스 API로 사용하는 대체 CodeDOM 공급자. 이는 CodeDOM (예 : ASP.NET 런타임 컴파일)을 사용하는 시스템의 새로운 언어 기능을 지원하고 이러한 시스템의 컴파일 성능을 향상시킵니다.

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

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

NuGet 패키지는 DLL 파일을 추가하고 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>

여전히 누락 된 경우. 자신을 추가해보십시오.


답변

VS IDE를 통해이를 수행하는 방법에 대해서는 Sayed Ibrahim Hashimi 의이 블로그 게시물 을 참조하십시오 .

Visual Studio 2015 업데이트 1에는이를 단순화하는 새로운 기능이 포함되었습니다. .NET 4.5 이상을 대상으로하는 웹 프로젝트가 하나 이상 있고 프로젝트 메뉴에 DotNetCompilerPlatform NuGet 패키지가없는 솔루션이 열려 있으면 새 옵션 인 Enable C # 6 / VB 14가 나타납니다.
여기에 이미지 설명 입력

최신 정보.

VS 2017 및 2019에서는이 기능이 Build- > ASP.NET Compilation으로 이동했습니다 .
여기에 이미지 설명 입력


답변

@jbtule이 제안한대로 DotNetCompilerPlatform을 설치했지만 여전히 동일한 오류가 발생했습니다.

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

솔루션을 닫고 bin 및 obj 폴더를 삭제 한 다음 솔루션을 열고 다시 빌드했습니다. 이제 C # 6 기능이 작동합니다.


답변

ScottGu의 블로그 게시물 (페이지에서 “8026”검색)에 대한 의견에서 가져온 가능한 해결책 :

솔루션 제안 1 (David Taylor)

다음 RTM 코드 dom 요소를 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>

그런 다음 Roslyn 및 Microsoft.CodeDom.Providers. *. dll 항목을 BIN 디렉터리에 추가합니다.

설정하기는 쉽지만 VS 2015 RTM에서 새 “웹 사이트”를 만들 때 .NET 4.6을 선택하면 기본 템플릿이 설정되지 않은 것이 이상합니다.

솔루션 제안 2 (Martin)

위의 David Taylor의 설명에 더해, TargetFramework를 기본 v4.5.2로 사용하여 웹 앱을 만들 때 system.codedom 설정이 올바른 것처럼 보입니다. TargetFramework를 v4.6으로 변경하면 CSharp의 컴파일러 설정이 문제를 일으키는 방식으로 수정되는 것처럼 보입니다.

내 해결 방법은 다음과 같습니다.

  1. 파일 / 새로 만들기 /ASP.NET 웹 응용 프로그램
  2. ASP.NET 4.5.2 템플릿에서 “웹 API”템플릿을 선택합니다.
  3. web.config에서 system.codedom 요소 (및 해당 콘텐츠)의 복사본을 가져옵니다.
  4. Properties / TargetFramework를 사용하여 Target Framework를 4.6으로 설정합니다.
  5. web.config의 수정 된 system.codedom 요소를 TargetFramework를 변경하기 전에 가져온 복사본으로 바꿉니다.
  6. 히트 F5

홈 페이지가 예상대로로드되어야합니다.

참고로, TargetFramework를 v4.6으로 변경 한 직후 system.codedom 콘텐츠. 다음과 같습니다 ( “Microsoft.CSharp.CSharpCodeProvider”유형의 사용에 유의하십시오).

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
            <providerOption name="CompilerVersion" value="v4.0"/>
        </compiler>
        <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>


답변

이것은 웹 사이트 프로젝트 용이 아닙니다 . 이것이 ASP.NET MVC 프로젝트에서 수행하는 방법입니다.

Visual Studio UI에서 C # 6을 전환 할 수 있습니다. 이것은 매우 쉬운 옵션이며 먼저 시도해 볼 가치가 있습니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 합니다.
  2. 빌드를 클릭 하십시오. 탭을 하십시오.
  3. 빌드 탭에는 고급 … 의 맨 아래 버튼이 있습니다.
  4. 그러면 아래와 같이 고급 빌드 설정 이 열립니다 . C # 6.0을 선택합니다.

여기에 이미지 설명 입력


답변

다음은 웹 사이트 프로젝트를 사용하는 VS2017에서의 모습입니다.

여기에 이미지 설명 입력


답변

WebAPI 프로젝트를 ZERO 변경 한 후이 오류가 발생했습니다. DotNetCompilerPlatform nuget 패키지를 제거하고 다시 설치하여 문제가 해결되었습니다.