45 votes

C# 7.1 ne peut pas être publié

J'ai une application web ASP.NET Core C#. J'ai fait quelques changements qui utilisent maintenant les fonctionnalités de C# 7.1. J'ai changé la version du projet, et il se compile et s'exécute correctement. Cependant, lorsque j'essaie de publier le projet, j'obtiens une erreur :

La fonctionnalité 'default literal' n'est pas disponible en C# 7.0. Veuillez utiliser la version 7.1 ou supérieure du langage.

La commande de compilation que je vois est :

C:...\.nuget\packages\microsoft.net.compilers\2.6.1\tools\csc.exe /noconfig /unsafe- /checked- /nowarn:1701,1702,1705,1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE;RELEASE;NETCOREAPP2_0 /errorendlocation /preferreduilang:en-US /warnaserror+:NU1605`

Comme suggéré ailleurs, j'ai installé Microsoft.Net.Compilers (v2.6.1), mais cela n'a fait aucune différence.

Y a-t-il un paramètre de Visual Studio qui affecte spécifiquement la publication ?

UPDATE : Il semble qu'une application console n'ait pas ce problème. Si elle se construit avec succès, elle se publie également avec succès. Cependant, l'application web ne publie pas . Quelqu'un a-t-il réussi à publier une application web ASP.NET Core avec les fonctionnalités de C# 7.1 ?

7 votes

Project -> Project Properties (bottom) -> Build -> Advanced -> Language Version . Changer pour minor version (latest) o C# 7.1

0 votes

Mais je me demande comment vous avez fait pour coder sans ce paramètre ? o_O

0 votes

Merci. Comme je l'ai dit, J'ai changé la version du projet, il compile et fonctionne bien. . Mais même avec ce changement, il ne publie pas (j'aurais dû dire : "il ne publie pas"). version linguistique pour plus de clarté)

51voto

Jeremy Cook Points 2236

Ajout de <LangVersion>latest</LangVersion> à votre fichier .pubxml a permis à Visual Studio 2017 (15.5.2 dans mon cas) de publier.

Fuente: https://developercommunity.visualstudio.com/solutions/166543/view.html

0 votes

C'est exactement l'interrupteur miracle que je recherchais !

6 votes

Si quelqu'un utilise la version Mac de Visual Studio, je n'ai pas pu trouver de fichier .pubxml ou l'option de configuration mentionnée dans la réponse de @ironstone13 ci-dessous. Tout ce que j'ai dû faire, c'est ajouter <LangVersion>latest</LangVersion> en vertu de la <PropertyGroup> dans mon fichier .csproj et cette erreur a disparu ! Visual Studio pour Mac V 8.0.2

0 votes

Mise à jour vers la 8.2 et le problème est réglé. Je n'ai pas eu besoin d'ajouter LangVersion.

50voto

ironstone13 Points 2000

Mise à jour :
Après avoir mis à niveau mon VS2017 de la version 15.4.5 à 15.5.2, je peux reproduire le problème, et j'obtiens une erreur

La fonction "littéral par défaut" n'est pas disponible dans C# 7.0. Veuillez utiliser la version 7.1 ou supérieure du langage

La réponse de @Jeremy Cook résout le problème :
<LangVersion>latest</LangVersion> dans .pubxml


Dans les anciens et les nouveaux formats de projet, l LangVersion dans le fichier du projet est responsable de cela. Vous pouvez soit changer cela via csproj xml ou via l'interface utilisateur de Visual Studio.

Veuillez noter que ce paramètre dépend de votre configuration de construction . Pour s'assurer que vous pouvez coder et publier à la fois en utilisant C# 7.1 et plus, assurez-vous de configurer ce paramètre indépendamment de la configuration de la construction ( Debug , Release etc).

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <LangVersion>latest</LangVersion>
  </PropertyGroup>

</Project>

enter image description here

0 votes

Merci. Comme je l'ai dit, J'ai changé la version du projet, il compile et fonctionne bien. . Mais même avec ce changement, il ne publie pas. (J'aurais dû dire version linguistique pour plus de clarté)

7 votes

@Felix, avez-vous défini C#7.1 pour Debug y Release les configurations ? Vous codez probablement dans Debug mais publier dans Release

0 votes

Je viens de vérifier que les versions release et debug sont configurées en C# 7.2 (ou la dernière version mineure).

1voto

Pour les utilisateurs de MAC, j'ai passé beaucoup de temps à le découvrir. Voici ce qui a fonctionné pour moi. Faites un clic droit sur votre fichier principal .csproj et cliquez sur 'Edit Project File' pour l'ouvrir. Ensuite, à l'intérieur du ... ajoutez la dernière ligne et enregistrez-la. C'est tout ! Exécutez votre code et il devrait fonctionner correctement à partir de maintenant. add 'latest langversion' to visual studio

0voto

Vadim Ovchinnikov Points 6879

Si vous migrez d'ASP.NET Core 2.0 vers ASP.NET Core 2.1, assurez-vous d'avoir la ligne

<TargetFramework>netcoreapp2.1</TargetFramework>

dans votre .pubxml fichier.

-3voto

Shankar Points 22

Il semble que vous soyez publié dans votre magasin Nuget local. Vérifiez que le magasin Nuget est configuré pour utiliser C#7.1. Vérifiez également si votre pack Nuget.exe est mis à jour avec la dernière version qui peut utiliser C#7.1.

0 votes

Pourquoi faites-vous cette conclusion ? Ce n'est certainement pas mon intention ; l'emplacement de la cible est indiqué comme poubelle. \Release\PublishOutput ; et quand je n'ai pas de fonctionnalités 7.1 dans le code - c'est exactement là où se trouve la sortie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X