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 .csproj
proyectos 'heredados' si la versión del lenguaje C # se cambia a 8.0?
NullableContextOptions
todavía.enable
significa "habilitar la nueva configuración de C # 8.0 donde los tipos no aceptan valores NULL de forma predeterminada".disable
significa "hágalo a la antigua, donde todos los tipos son anulables".LangVersion
yNullable
propiedades al.csproj
y 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
,safeonly
etc.): 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.props
en la carpeta que contiene su.sln
archivo.Simplemente defina su
Directory.Build.props
archivo 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
NullableReferenceTypes
propiedad al.csproj
archivo 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
.csproj
formato heredado . Abra el archivo del proyecto en un editor de texto y realice los siguientes cambios:Agregar / cambiar
<LangVersion>8.0</LangVersion>
en las seccionesDebug
yRelease
PropertyGroup:<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
PropertyGroup
queTargetFramework
oTargetFrameworks
):<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
LangVersion
para 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