Visual Studio 2015에서 작동하지 않는 C # 6.0 기능


135

C # 6.0으로 Visual Studio 2015를 테스트하고 있지만 언어 기능이 작동하지 않습니다. MVC 웹 응용 프로그램에서 다음 코드는 컴파일됩니다.

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}

그러나 디버그 및 IIS Express를 통해 응용 프로그램을 실행하면 다음 오류가 발생합니다.

CS1525 : 유효하지 않은 표현 용어 '.'

이 기능들을 어떻게 활성화합니까?


1
이것은 MVC 관련 (또는 적어도 ASP.NET 관련) 것처럼 들리므로 태그를 추가했습니다 .Visual Studio 자체가 C # 6에 대해 명확하게 알고 있기 때문에 버전 측면에서 MVC를 구성하는 곳을 살펴 봐야합니다 .NET에서 타겟팅하고 있습니다 ... 사용할 컴파일러를 지정할 수있는 무언가가있을 수 있습니다.
Jon Skeet

아마도 web.config에서 compilerroslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx 에 대한 요소 를 추가해야 합니까?
르네

이 코드는 aspx 페이지 또는 Razor 페이지에 있습니까? 또는 .cs 파일에있는 코드?
Erik Funkenbusch

@ErikFunkenbusch Razor 페이지에 있습니다.
Chris Schiffhauer

1
네, MVC5는 Roslyn과 호환되지 않습니다
Erik Funkenbusch

답변:


209

이것은 MVC 5 (5.2.3에서 테스트 됨)에서 작동하므로 roslyn 코드 dom 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/


4
베타 버전의 MVC로 업그레이드하지 않고 문제를 해결하므로 답변으로 제출해야합니다.
Daniel Eugen

3
@Deef가 잘못되었습니다. Microsoft.Net.Compilers은 MSBuild에 관련이있다. CodeDOM을 공급자는 ASP.NET과 관련된 다른 API는 런타임에 그 컴파일합니다.
jbtule

1
그래, 당신 말이 맞아. 그들은 때때로 새로운 이름으로 패키지를 repalce하고 단지 의존성으로 추가하기 때문에 오해 / 잘못 해석했습니다.
David De Sloovere

21
Visual Studio를 다시 시작하는 것이 좋습니다. 패키지를 설치 한 후에도 계속 불평했지만 다시 시작하면 사라졌습니다.)
Siewers

1
@Rono, 패키지 소스가 있는지 확인하십시오 nuget.org. 링크에서 볼 수 있듯이 올바른 이름이며 패키지가 존재합니다.
jbtule

17

글쎄, MVC5가 있고 최근에 VS 2015를 설치했습니다.

CodeDOM 공급자 패키지를 설치했지만 도움이되지는 않지만 ... 그 후에 실현 된 패키지는 프레임 워크 4.5 만 지원하지만 테스트 중에 대상 프레임 워크는 4.6으로 설정되었지만 4.5와 함께 작동합니다 ...

따라서 목표 프레임 워크에도주의를 기울이십시오. 4.5가있는 경우 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 패키지를 설치하십시오. 그러나 대상으로 4.5.1-4.6이 있으면 web.config 섹션에서 변경해야합니다.

  <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>

들어 C #을 , 단지 변경 유형 에 :

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

이것은 확실히 내가 C# 6작업하는 데 도움이 ASP.NET 4.6되었지만 type이미 올바른 코드를 게시하는 것이 더 좋았을 것입니다.
Serj Sagan

고마워요, 화요일에 집에 돌아 왔을 때 효과가 있었지만 목요일에 돌아 왔을 때 효과가 없었습니다. 어떻게 든 구성 의이 섹션이 AWOL로 이동했습니다. 왜냐하면 원래 작동하게 될 때 본 것을 기억하기 때문입니다!
Carl

16

Visual Studio 2015에서도 이와 동일한 문제가 발생했습니다. 여기에 또 다른 대답은 내가 사용한 솔루션을 암시했지만 수정 사항을 잘못 지정하고 설명을 한 적이 없습니다.

Visual Studio 메뉴에서 Project를 선택 하면이 문제가 발생 하면 하위 항목 Enable C # 6 / VB 14가 표시 됩니다. 이 메뉴 하위 항목을 선택하십시오. Nuget에서 올바른 패키지를 다운로드하여 설치합니다. 그런 다음 Visual Studio를 다시 시작하고 솔루션을 다시로드하십시오.

이것이 프로젝트 속성> 빌드> 고급> 언어 버전 선택을 C # 6으로 수정하는지 확인할 수 없으므로 메뉴에서 C # 6을 활성화 한 후에도 확인하십시오.


2
이 하위 항목이 내 프로젝트 메뉴에 없습니다. VS 2015 커뮤니티를 열어서 일부 스크립트를 만드는 Unity 5.5.2가 있습니다. 속성에 기본값을 추가 할 때 C # v.4가 현재로드됨에 따라 c # 6이 필요하다는 빨간색 오류 표시로 컴파일러 오류가 표시되었습니다. 프로젝트의 속성을 선택하려고 할 때마다 화면이 깜박이지만 페이지가 나타나지 않습니다.
Edward

15

프로젝트 속성을 확인하고 빌드하고 고급으로 이동 한 다음 기본적으로 C # 6.0이 없는지 확인하십시오.

현재 MVC5 및 C # 6.0을 완벽하게 지원하며 놀랍도록 잘 작동합니다!


18
"C # 5에서는 '널 전파 연산자'기능을 사용할 수 없습니다. 언어 버전 6 이상을 사용하십시오." 고급 설정에 대해서는 몰랐지만 여기서 작동하지 않는 것 같습니다.
juFo September

3
각 프로젝트에서 기본 버전을 설정할 필요가 없도록 기본 버전을 6으로 어떻게 변경합니까?
Mir

3
"일부"를 정의하십시오. 이것은 2015 업데이트 3 대 3에서는 작동하지 않습니다.
Robert Ivanc

1
속성을 프로젝트해야 할 때 빌드 메뉴가 표시되지 않습니다. "속성 페이지"로 이동하면 빌드 메뉴가 표시되지만 빌드 화면에 "고급"단추가 없습니다. 번역, "이 작동하지 않습니다"(나를 위해)
Malcolm Anderson

내 VS 버전은 Community 2015 Update 3 (14.0.25431.01)
Malcolm Anderson

10

최신 설치에 대한 조언을 따르는 것을 포함 하여 마지막으로 모든 오류를 없애기 위해 루트Microsoft.CodeDom.Providers.DotNetCompilerPlatform설정해야했습니다 . Web.config system.codedomVisual Studio 2015

  <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>

이제 다시 시작 Visual Studio하면됩니다.


6

Visual Studio 2015는 Enable C#6 / VB 14ASP.NET 웹 사이트 / 웹 응용 프로그램이 선택된 프로젝트 메뉴 에도 표시됩니다 .

이것은 실제로 프로젝트에 설치 Microsoft.CodeDom.Providers.DotNetCompilerPlatform하고 Microsoft.Net.Compilers패키지하고 web.config 파일에 적절한 태그를 추가합니다.

Visual Studio 2015-CS6 스 니프 사용


1
어떤 웹 사이트 탭? 속성 / 웹을 의미하는 경우 그러한 기능이 없습니다.
Robert Ivanc

1
Visual Studio에서 일부 WebSite 프로젝트를 선택하면 웹 사이트 탭이보기 탭 옆에 나타납니다. 이 기능을 찾을 수 있습니다.
Michal Šuvada

1
지금은 다운 투표를했습니다. 예를 들어 스크린 샷을 추가하여 정확히 의미하는 바를 명확하게 편집하십시오.
user247702

웹 사이트 관련 문제를 해결하려고하는데 해당 메뉴 항목을 사용할 수 없습니다. 동일한 솔루션에있는 다른 웹 이외의 프로젝트는 VB 14 기능을 사용하는 데 아무런 문제가 없습니다. 그들은 모두 .NET 4.7을 대상으로하며 CodeDom 컴파일러를 설치했습니다.
Andrew S

-1
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.