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?
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:
NullableContextOptions
sur enable
NullableReferenceTypes
sur true
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.
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.
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:
Ajouter <LangVersion>preview</LangVersion>
(ou 8.0
) aux sections Debug
et Release
PropertyGroup:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<LangVersion>preview</LangVersion>
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.