Según el vídeo de anuncio de C # 8, la función "tipos de referencia que aceptan valores NULL" se puede habilitar para todo el proyecto.
Pero, ¿cómo habilitarlo para el proyecto? No encontré ninguna nueva opción apropiada en la ventana Propiedades del proyecto en Visual Studio 2019 Preview 1.
¿Se puede habilitar para .csprojproyectos 'heredados' si la versión del lenguaje C # se cambia a 8.0?

NullableContextOptionstodavía.enablesignifica "habilitar la nueva configuración de C # 8.0 donde los tipos no aceptan valores NULL de forma predeterminada".disablesignifica "hágalo a la antigua, donde todos los tipos son anulables".LangVersionyNullablepropiedades al.csprojy funciona bien. El proyectoToolsVersion="15.0"también.Tenga en cuenta que esta configuración se cambia entre la vista previa 1 y la vista previa 2 de VS 2019. Con la vista previa 2 o 3, necesita esto en su
.csproj:<PropertyGroup> <LangVersion>8.0</LangVersion> <NullableContextOptions>enable</NullableContextOptions> </PropertyGroup>Lo
<NullableReferenceTypes>mencionado en la respuesta anterior (que, cuando escribí originalmente esta respuesta el 4 de febrero de 2019, se había marcado como la respuesta aceptada) era correcta en el momento en que se escribió la respuesta, pero ya no se reconoce.fuente
enable,disable,safeonlyetc.): github.com/dotnet/roslyn/blob/master/docs/features/...Además de la respuesta aceptada de @DrewNoakes, tenga en cuenta que la propiedad anulable se puede establecer para todos los proyectos a la vez agregando un archivo llamado
Directory.Build.propsen la carpeta que contiene su.slnarchivo.Simplemente defina su
Directory.Build.propsarchivo así:<Project> <PropertyGroup> <Nullable>enable</Nullable> </PropertyGroup> </Project>Deberá reiniciar Visual Studio para que esto surta efecto.
Más sobre
Directory.Build.props.fuente
Para Visual Studio 2019 Preview 2 y 3 , consulte la respuesta de Ian Griffiths.
Solución para Visual Studio 2019 Preview 1 :
Para habilitar la característica Tipos de referencia que aceptan valores NULL para el proyecto .NET Core, agregue una
NullableReferenceTypespropiedad al.csprojarchivo de esta manera:<PropertyGroup> ... <NullableReferenceTypes>true</NullableReferenceTypes> <LangVersion>8.0</LangVersion> </PropertyGroup>Como @JulienCouvreur mencionó en los comentarios sobre https://github.com/dotnet/project-system/issues/4058 , la nueva propiedad aún no es compatible con el sistema de proyecto 'antiguo', pero será compatible antes del lanzamiento de C # 8.0.
fuente
net472? Por cierto, ¿cómo / dónde encontraste ese escenario? Esa referencia sería muy útil. Encontré muchas cosas que no funcionan como se muestra en el videoFormato csproj heredado
Preguntaste sobre el
.csprojformato heredado . Abra el archivo del proyecto en un editor de texto y realice los siguientes cambios:Agregar / cambiar
<LangVersion>8.0</LangVersion>en las seccionesDebugyReleasePropertyGroup:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <LangVersion>preview</LangVersion>Habilite la compatibilidad con tipos de referencia que aceptan valores NULL agregando
<Nullable>enable</Nullable>a mainPropertyGroup:<PropertyGroup> <Nullable>enable</Nullable>Probado con una aplicación .NET WinForms utilizando C # 8 y sintaxis de tipos de referencia que aceptan valores NULL en Visual Studio 2019 v16.2.0 Preview 3.
Archivos de proyecto de estilo SDK
Los proyectos de estilo SDK son mucho más simples y se pueden editar en Visual Studio. Para estos, todo lo que necesita es (al igual
PropertyGroupqueTargetFrameworkoTargetFrameworks):<PropertyGroup> <LangVersion>8.0</LangVersion> <Nullable>enable</Nullable> </PropertyGroup>Notas
Los proyectos .NET Core 3.x tienen como destino C # 8 de forma predeterminada , por lo que no necesitará especificar el
LangVersionpara esos proyectos.El valor predeterminado para los proyectos de .NET Framework es C # 7.3 y no obtiene C # 8.0 incluso con
<LangVersion>latest</LangVersion>. Debe establecer explícitamente la versión de idioma en 8.0. Consulte mi respuesta a la pregunta ¿C # 8 es compatible con .NET Framework? para más detalles.fuente
Vale la pena señalar que, por ahora, esta también es una configuración expuesta en la página de Propiedades de un proyecto:
Al menos en VS2019 16.6+.
fuente