Ya no necesitas buscar más por todo internet ya que has llegado al espacio adecuado, contamos con la respuesta que quieres recibir pero sin problema.
Solución:
Para cualquiera que termine aquí. Puedes poner #nullable enable
en la parte superior del archivo para un enfoque archivo por archivo como lo sugiere @Marc en los comentarios.
También puede usar combinaciones de #nullable enable / disable para anotar solo partes del archivo
class Program
static void Main(string[] args)
#nullable enable
string? message = "Hello World";
#nullable disable
string message2 = null;
Console.WriteLine(message);
Console.WriteLine(message2);
Aquí hay un enlace a los documentos. https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references#nullable-contexts
Los contextos que aceptan valores NULL permiten un control detallado de cómo el compilador interpreta las variables de tipo de referencia. El contexto de anotación que acepta valores NULL de cualquier línea fuente dada está habilitada o deshabilitada. Puede pensar en el compilador anterior a C # 8.0 como compilando todo su código en un contexto anulable deshabilitado: cualquier tipo de referencia puede ser null. El contexto de advertencias que aceptan valores NULL también puede estar habilitado o deshabilitado. El contexto de advertencias que aceptan valores NULL especifica las advertencias generadas por el compilador mediante su análisis de flujo.
El contexto de anotación anulable y el contexto de advertencia anulable se pueden configurar para un proyecto utilizando el elemento Nullable en su
.csproj
Archivo. Este elemento configura cómo el compilador interpreta la nulabilidad de los tipos y qué advertencias se generan. Las configuraciones válidas son:
enable
:
- El contexto de anotación que acepta valores NULL está habilitado. El contexto de advertencia que acepta valores NULL está habilitado.
- Variables de un tipo de referencia,
string
por ejemplo, no aceptan valores NULL. Todas las advertencias de nulabilidad están habilitadas.warnings
:
- El contexto de anotación que acepta valores NULL está deshabilitado. El contexto de advertencia que acepta valores NULL está habilitado.
- Las variables de un tipo de referencia son ajenas. Todas las advertencias de nulabilidad están habilitadas.
annotations
:
- El contexto de anotación que acepta valores NULL está habilitado. El contexto de advertencia que acepta valores NULL está deshabilitado.
- Variables de un tipo de referencia,
string
por ejemplo, no aceptan valores NULL. Todas las advertencias de nulabilidad están deshabilitadas.disable
:
- El contexto de anotación que acepta valores NULL está deshabilitado. El contexto de advertencia que acepta valores NULL está deshabilitado.
- Las variables de un tipo de referencia son ajenas, al igual que las versiones anteriores de C #. Todas las advertencias de nulabilidad están deshabilitadas.
En tus .csproj
archivo, simplemente agregue
en el relevante
elemento (su archivo de proyecto puede tener separado
elementos para cada nombre de configuración de proyecto).
Entonces su archivo de proyecto debería verse así:
Exe
netcoreapp3.1
enable
Para mostrar los mensajes que aceptan valores NULL como errores en lugar de advertencias, agregue esto a su archivo de proyecto:
…al igual que:
Exe
netcoreapp3.1
enable
CS8600;CS8602;CS8603
Los mensajes completos correspondientes son:
- CS8600: Conversión null literal o posible null valor al tipo que no acepta valores NULL.
- CS8602: Posible desreferencia de un null referencia.
- CS8603: posible null retorno de referencia.
También puede usar directivas para establecer estos mismos contextos en cualquier lugar de su proyecto:
#nullable enable
: Establece el contexto de anotación que acepta valores NULL y el contexto de advertencia que admite valores NULL como habilitados.#nullable disable
: Establece el contexto de anotación que acepta valores NULL y el contexto de advertencia que admite valores NULL en deshabilitado.#nullable restore
: Restaura el contexto de anotación que acepta valores NULL y el contexto de advertencia que admite valores NULL a la configuración del proyecto.#nullable disable warnings
: Establece el contexto de advertencia que acepta valores NULL en deshabilitado.#nullable enable warnings
: Establece el contexto de advertencia que acepta valores NULL en habilitado.#nullable restore warnings
: Restaura el contexto de advertencia que acepta valores NULL a la configuración del proyecto.#nullable disable annotations
: Establezca el contexto de anotación que acepta valores NULL en deshabilitado.#nullable enable annotations
: Establece el contexto de anotación que acepta valores NULL en habilitado.#nullable restore annotations
: Restaura el contexto de advertencia de anotación a la configuración del proyecto.De forma predeterminada, los contextos de advertencia y anotaciones que aceptan valores NULL son discapacitado. Eso significa que su código existente se compila sin cambios y sin generar nuevas advertencias.
Tenga en cuenta que las versiones preliminares de C # 8.0 y Visual Studio 2019 también son compatibles safeonly
, sin embargo, esta opción se ha eliminado desde entonces y no está presente en el envío final C # 8.0. Además, las versiones preliminares utilizadas #pragma warning restore nullable
pero la versión publicada usa #nullable restore warnings
.
También obtuve este mismo error, y pasé unos días luchando contra él, por una razón que no se describe en las otras respuestas: hay reglas especiales (¿indocumentadas?) En el compilador Roslyn C # para código generado que usa la función anulable, y hasta que actualicé Visual Studio 2019 a la última versión (16.4+), el mensaje de error era exactamente el mismo mensaje inútil que el anterior, a pesar de tener
en mi archivo de proyecto.
Pero en las últimas versiones de Visual Studio 2019, han actualizado el mensaje de error a esto:
advertencia CS8669: La anotación para los tipos de referencia que aceptan valores NULL solo debe usarse en el código dentro de un contexto de anotaciones ‘#nullable’. El código generado automáticamente requiere una directiva explícita ‘#nullable’ en la fuente.
(Énfasis agregado a la parte recién agregada del mensaje de error).
Entonces, si ve este mensaje de error en cualquier .generated.cs
archivos que está emitiendo, esos archivos deben tener #nullable enable
añadido a ellos explícitamente – Roslyn aparentemente siempre ignora el nivel de proyecto.
configuración para el código generado.