C#8アナウンスビデオ によると、「nullable reference types」機能はプロジェクト全体で有効にできます。
しかし、プロジェクトでそれを有効にする方法は? Visual Studio 2019プレビュー1の[プロジェクトプロパティ]ウィンドウに新しい適切なオプションが見つかりませんでした。C#言語バージョンが8.0に変更された場合、「レガシー」.csproj
プロジェクトに対して有効にできますか?
Visual Studio 16.2(プレビュー1以降)では、プロパティ名がNullable
に変更されました。これはより単純で、コマンドライン引数と一致します。
<PropertyGroup>
...
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
古いVisual Studioバージョンの場合:
NullableContextOptions
をenable
に設定しますNullableReferenceTypes
をtrue
に設定しますこの設定はVS 2019プレビュー1とプレビュー2の間で変更されたことに注意してください。プレビュー2または3では、.csproj
でこれが必要です。
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
したがって、以前の回答(2019年2月4日にこの回答を最初に書いたときに受け入れられた回答としてマークされていた)で言及された<NullableReferenceTypes>
は、回答が書かれた時点で正しいですが、もはや認識されていません。
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がリリースされる前にサポートされます。
古い.csproj
形式について尋ねました。次の変更を手動で行うことで、Visual Studio 2019(v16.2.0 Preview 3)でC#8を使用して.NET WinFormsアプリをコンパイルできました。
<LangVersion>preview</LangVersion>
(または8.0
)をDebug
およびRelease
PropertyGroupセクションに追加します。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
メインの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#言語バージョン管理 を参照してください。