[c#] 전체 프로젝트에 대해 C # 8.0의 Nullable 참조 형식 기능을 활성화하는 방법

C # 8 발표 비디오 에 따르면 전체 프로젝트에 대해 “nullable reference types”기능을 활성화 할 수 있습니다.

하지만 프로젝트에서 어떻게 활성화할까요? Visual Studio 2019 Preview 1의 프로젝트 속성 창에서 새로운 적절한 옵션을 찾지 못했습니다.

.csprojC # 언어 버전이 8.0으로 변경된 경우 ‘레거시’ 프로젝트에 대해 활성화 할 수 있습니까 ?



답변

Visual Studio 16.2 (미리보기 1에서)에서는 속성 이름이으로 변경되었습니다 Nullable. 이는 더 간단하고 명령 줄 인수와 일치합니다.

<PropertyGroup>
  ...
  <Nullable>enable</Nullable>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

netcoreapp3.0이상을 대상으로하는 경우 LangVersion.NET Core 3의 기본값 인 8 을 지정할 필요가 없습니다 .


이전 Visual Studio 버전의 경우 :

  • 16.0 미리보기 2에서 16.1로 설정 NullableContextOptions합니다 enable.
  • 16.0 미리보기 1에서 설정 NullableReferenceTypestrue.


답변

이 설정은 VS 2019 미리보기 1과 미리보기 2 사이에서 변경됩니다. 미리보기 2 또는 3을 사용하는 경우 다음에서 필요합니다 .csproj.

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

<NullableReferenceTypes>이전 답변에서 언급 한 대답이 기록 된 시간에 정확했다 (I 원래 2019년 2월 4일에이 답변을 작성, 허용 대답으로 표시되지 있었다), 그러나 더 이상 인식이다.


답변

@DrewNoakes 허용 답변 외에도 파일 이 포함 된 폴더에 라는 파일을 추가하여 모든 프로젝트에 대해 nullable 속성 을 한 번 에 설정할 수 있습니다 .Directory.Build.props.sln

다음 Directory.Build.props과 같이 파일을 정의하십시오 .

<Project>

  <PropertyGroup>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

이를 적용하려면 Visual Studio를 다시 시작해야합니다.

에 대한 추가 정보 Directory.Build.props.


답변

Visual Studio 2019 Preview 2 & 3의 경우 Ian Griffiths의 답변을 참조하세요.

Visual Studio 2019 Preview 1 : 솔루션 :

.NET Core 프로젝트에 대해 Nullable 참조 형식 기능을 사용하려면 다음과 같이 파일 에 NullableReferenceTypes속성을 추가 합니다 .csproj.

<PropertyGroup>
  ...
  <NullableReferenceTypes>true</NullableReferenceTypes>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

@JulienCouvreur가 https://github.com/dotnet/project-system/issues/4058 에 대한 의견에서 언급했듯이 새 속성은 ‘이전’프로젝트 시스템에서 아직 지원되지 않지만 C # 8.0이 릴리스되기 전에 지원됩니다.


답변

레거시 csproj 형식

레거시 .csproj형식 에 대해 물었습니다 . 텍스트 편집기에서 프로젝트 파일을 열고 다음과 같이 변경하십시오.

  1. 및 PropertyGroup 섹션 <LangVersion>8.0</LangVersion>에서 추가 / 변경 :DebugRelease

     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <LangVersion>preview</LangVersion>
    
  2. <Nullable>enable</Nullable>main 에 추가 하여 nullable 참조 유형에 대한 지원을 활성화합니다 PropertyGroup.

     <PropertyGroup>
        <Nullable>enable</Nullable>
    

Visual Studio 2019 v16.2.0 Preview 3에서 C # 8 및 nullable 참조 형식 구문을 사용하여 .NET WinForms 앱으로 테스트되었습니다.


SDK 스타일 프로젝트 파일

SDK 스타일 프로젝트는 훨씬 간단하며 Visual Studio 내에서 편집 할 수 있습니다. 이러한 내용은 모두 당신이 필요 (에서 동일 PropertyGroupTargetFramework또는 TargetFrameworks) :

  <PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

메모

  • .NET Core 3.x 프로젝트 는 기본적으로 C # 8 대상 으로 하므로 LangVersion해당 프로젝트에 대해을 지정할 필요가 없습니다 .

  • .NET Framework 프로젝트의 기본값은 C # 7.3이며 .NET Framework에서도 C # 8.0을 사용할 수 없습니다 <LangVersion>latest</LangVersion>. 언어 버전을 8.0으로 명시 적으로 설정해야합니다. C # 8은 .NET Framework를 지원합니까? 에 대한 내 대답을 참조하십시오 . 상세 사항은.


답변

지금까지는 프로젝트의 속성 페이지에 노출 된 설정이기도합니다.

"빌드"탭에 "널 가능"설정이 표시됨

적어도 VS2019 16.6+에서.


답변