Ser*_*y V 44 c# visual-studio c#-8.0 visual-studio-2019 nullable-reference-types
根据名为"可空引用类型"的新C#8.0功能的声明,可以为整个项目启用它.(这里提到:https://youtu.be/VdC0aoa7ung?t = 137)但是如何为项目启用它?在Visual Studio 2019预览1的"项目属性"窗口中找不到任何新的适当选项.如果C#语言版本更改为8.0,是否可以为"旧".NET Framework项目启用它?
Dre*_*kes 36
在Visual Studio 16.2(预览1)中,属性名称更改Nullable为更简单,并且与命令行参数对齐。
<PropertyGroup>
...
<Nullable>enable</Nullable>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您要定位netcoreapp3.0或更高版本,则无需指定LangVersion8,因为这是.NET Core 3中的默认设置。
对于较旧的Visual Studio版本:
NullableContextOptions为enableNullableReferenceTypes为trueIan*_*ths 29
请注意,此设置在VS 2019预览1和预览2之间更改.使用预览2或3,您需要.csproj:
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
所以<NullableReferenceTypes>在前面的答复中提到(其中,当我最初写于2019年2月4日这个答案,已经被标记为接受的答案)是在那个答案写时是正确的,但它不再被识别.
Max*_*nas 20
除了@DrewNoakes 接受的答案之外,请注意,可以通过添加在包含您的文件的文件夹中调用的文件,一次性为所有项目设置可空属性。Directory.Build.props.sln
只需Directory.Build.props像这样定义您的文件:
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
您需要重新启动 Visual Studio 才能使其生效。
要为.NET Core项目启用Nullable Reference Types功能,请将NullableReferenceTypes属性添加到.csproj文件中,如下所示:
<PropertyGroup>
...
<NullableReferenceTypes>true</NullableReferenceTypes>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
UPD:
正如@JulienCouvreur在关于https://github.com/dotnet/project-system/issues/4058的评论中引用的那样,"旧"项目系统尚不支持新属性.但在C#8.0发布之前将得到支持.
您询问了旧.csproj格式。在文本编辑器中打开项目文件,并进行以下更改:
<LangVersion>8.0</LangVersion>在Debug和ReleasePropertyGroup部分中添加/更改:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
Run Code Online (Sandbox Code Playgroud)通过添加<Nullable>enable</Nullable>到main来启用对可空引用类型的支持PropertyGroup:
<PropertyGroup>
<Nullable>enable</Nullable>
Run Code Online (Sandbox Code Playgroud)已在Visual Studio 2019 v16.2.0 Preview 3中使用C#8和可空引用类型语法在.NET WinForms应用程序中进行了测试。
SDK样式的项目要简单得多,并且可以在Visual Studio中进行编辑。对于这些你需要的是(在相同PropertyGroup的TargetFramework或TargetFrameworks):
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
.NET Framework项目的默认值为C#7.3,即使使用,也不会获得C#8.0 <LangVersion>latest</LangVersion>。您必须将语言版本显式设置为8.0。请参考我对以下问题的回答:C#8是否支持.NET Framework?更多细节。