web-dev-qa-db-fra.com

Comment activer la fonctionnalité Nullable Reference Types de C # 8.0 pour l'ensemble du projet

Selon la vidéo d'annonce C # 8 , la fonction "types de référence nullables" peut être activée pour l'ensemble du projet.

Mais comment l'activer pour le projet? Je n'ai trouvé aucune nouvelle option appropriée dans la fenêtre Propriétés du projet dans Visual Studio 2019 Preview 1. Peut-il être activé pour 'legacy' .csproj projets si la version du langage C # est modifiée en 8.0?

29
Sergey V

Dans Visual Studio 16.2 (à partir de l'aperçu 1), le nom de la propriété a été remplacé par Nullable, ce qui est plus simple et s'aligne sur l'argument de la ligne de commande.

<PropertyGroup>
  ...
  <Nullable>enable</Nullable>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

Pour les anciennes versions de Visual Studio:

  • De la version 16.0, prévisualisation 2 à 16.1, définissez NullableContextOptions sur enable
  • Dans l'aperçu 1 de 16.0, définissez NullableReferenceTypes sur true
17
Drew Noakes

Notez que ce paramètre a changé entre l'aperçu 1 et l'aperçu 2 du VS 2019. Avec l'aperçu 2 ou 3, vous en avez besoin dans votre .csproj:

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

Alors le <NullableReferenceTypes> mentionné dans la réponse précédente (qui, lorsque j'avais initialement écrit cette réponse le 4 février 2019, avait été marquée comme étant la réponse acceptée) était correct au moment où cette réponse a été écrite, mais elle n'est plus reconnue.

26
Ian Griffiths

Pour Visual Studio 2019 Preview 2 & 3 Voir la réponse de Ian Griffiths

Solution pour Visual Studio 2019 Preview 1:

Pour activer la fonctionnalité Nullable Reference Types pour le projet .NET Core, ajoutez la propriété NullableReferenceTypes à la propriété .csproj fichier comme ceci:

<PropertyGroup>
  ...
  <NullableReferenceTypes>true</NullableReferenceTypes>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

Comme @JulienCouvreur a fait référence aux commentaires concernant https://github.com/dotnet/project-system/issues/4058 , la nouvelle propriété n'est pas encore prise en charge dans le système "ancien" du projet. Mais sera pris en charge avant la publication de C # 8.0.

8
Sergey V

Vous avez posé une question sur l'héritage .csproj _ format. J'ai pu compiler une application .NET WinForms avec C # 8 dans Visual Studio 2019 (v16.2.0 Preview 3) en apportant manuellement les modifications suivantes:

  1. Ajouter <LangVersion>preview</LangVersion> (ou 8.0) aux sections Debug et Release PropertyGroup:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
       <LangVersion>preview</LangVersion>
    
  2. Activer la prise en charge des types de référence Nullable en ajoutant <Nullable>enable</Nullable> au principal PropertyGroup:

    <PropertyGroup>
       <Nullable>enable</Nullable>
    

Avec cette configuration, les types de référence nullables sont compilés sans avertissement ni erreur.

Si je supprime <Nullable>enable</Nullable>, le projet est compilé mais avec l'avertissement du compilateur "CS8632: l'annotation pour les types de référence nullable ne doit être utilisée dans le code que dans un contexte '#nullable'".

Veuillez vous référer à ma réponse à la question C # 8 prend-il en charge le .NET Framework? si vous souhaitez davantage d’informations.


Les projets de style SDK sont beaucoup plus simples et peuvent être modifiés dans Visual Studio. Pour cela, tout ce dont vous avez besoin est (dans la même PropertyGroup que TargetFramework ou TargetFrameworks):

  <PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

Dans les deux cas, vous voudrez probablement utiliser <LangVersion>latest</LangVersion> une fois que C # 8 n’est plus en mode prévisualisation - pour plus d’informations, consultez la section Versionnage en langage C # sur MSDN.

2
Stephen Kennedy