web-dev-qa-db-ja.com

プロジェクト全体でC#8.0のNullable Reference Types機能を有効にする方法

C#8アナウンスビデオ によると、「nullable reference types」機能はプロジェクト全体で有効にできます。

しかし、プロジェクトでそれを有効にする方法は? Visual Studio 2019プレビュー1の[プロジェクトプロパティ]ウィンドウに新しい適切なオプションが見つかりませんでした。C#言語バージョンが8.0に変更された場合、「レガシー」.csprojプロジェクトに対して有効にできますか?

29
Sergey V

Visual Studio 16.2(プレビュー1以降)では、プロパティ名がNullableに変更されました。これはより単純で、コマンドライン引数と一致します。

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

古いVisual Studioバージョンの場合:

  • 16.0プレビュー2から16.1にNullableContextOptionsenableに設定します
  • 16.0プレビュー1では、NullableReferenceTypestrueに設定します
17
Drew Noakes

この設定はVS 2019プレビュー1とプレビュー2の間で変更されたことに注意してください。プレビュー2または3では、.csprojでこれが必要です。

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

したがって、以前の回答(2019年2月4日にこの回答を最初に書いたときに受け入れられた回答としてマークされていた)で言及された<NullableReferenceTypes>は、回答が書かれた時点で正しいですが、もはや認識されていません。

26
Ian Griffiths

Visual Studio 2019の場合プレビュー2&3 Ian Griffithsの回答を参照

Visual Studio 2019のソリューションプレビュー1

.NET CoreプロジェクトのNullable Reference Types機能を有効にするには、次のようにNullableReferenceTypesプロパティを.csprojファイルに追加します。

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

@ -JulienCouvreurが https://github.com/dotnet/project-system/issues/4058 に関するコメントで言及したように、新しいプロパティは「古い」プロジェクトシステムではまだサポートされていません。ただし、C#8.0がリリースされる前にサポートされます。

8
Sergey V

古い.csproj形式について尋ねました。次の変更を手動で行うことで、Visual Studio 2019(v16.2.0 Preview 3)でC#8を使用して.NET WinFormsアプリをコンパイルできました。

  1. <LangVersion>preview</LangVersion>(または8.0)をDebugおよびRelease PropertyGroupセクションに追加します。

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
       <LangVersion>preview</LangVersion>
    
  2. メインのPropertyGroup<Nullable>enable</Nullable>を追加して、null許容参照型のサポートを有効にします。

    <PropertyGroup>
       <Nullable>enable</Nullable>
    

この構成では、null許容参照型は警告またはエラーなしでコンパイルされます。

<Nullable>enable</Nullable>を削除すると、プロジェクトはコンパイルされますが、コンパイラの警告「CS8632:nullable参照型の注釈は「#nullable」コンテキスト内のコードでのみ使用する必要があります」.

質問への私の答えを参照してください C#8は.NET Frameworkをサポートしていますか? 詳細情報が必要な場合。


SDKスタイルのプロジェクトははるかに単純であり、Visual Studio内で編集できます。これらに必要なものはすべて(PropertyGroupまたはTargetFrameworkと同じTargetFrameworksにあります):

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

どちらの場合も、おそらくC#8のプレビューが終了したら<LangVersion>latest</LangVersion>を使用することになるでしょう。詳細については、MSDNの C#言語バージョン管理 を参照してください。

2
Stephen Kennedy