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 pourminor version (latest)
oC# 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é)
0 votes
@Felix, je viens de créer un exemple d'application ASP.NET Core, qui utilise le littéral par défaut de C#7.1, et de le publier dans un dossier, en utilisant à la fois Visual Studio Enterprise 2017 et dotnet CLI - aucune erreur. Pourriez-vous peut-être partager votre exemple d'application présentant le problème ?
0 votes
Merci @ironstone13. J'ai également échafaudé une application Web ASP.NET Core ; puis j'ai ajouté une seule ligne dans le contrôleur Home
int x = HttpContext.Items?.Count ?? default;
et changé la langue en 7.1 (j'ai aussi essayé la 7.2, ou la dernière - aucune différence). Il compile, mais ne publie pas. J'ai téléchargé sur github.com/virshu/SOExample Mais bonne nouvelle - il fait publier avec dotnet CLI. La seule différence que je vois est que j'ai VS Community et que vous avez Enterprise ; donc peut-être que la différence est effectivement dans la version de VS.1 votes
@Felix, j'ai cloné votre repo, et je peux construire, publier et exécuter l'application web sans aucun problème. Cela ressemble à un problème de configuration de l'environnement pour moi. Votre publication utilise un chemin différent pour
csc.exe
puis le mien. J'ai téléchargé les détails de ma configuration Visual Studio, ainsi que les journaux de publication sur Gist - cela peut peut-être vous aider. gist.github.com/oleh-zheleznyak/0 votes
Merci. J'ai vu la différence dans le chemin d'accès ; étrangement, le chemin d'accès à l'application CLI est le même que celui de l'application Web et la publication se fait bien. Quoi qu'il en soit, la publication par
dotnet cli
est une solution de rechange acceptable, et en accord avec le déploiement de scripts, de toute façon !0 votes
Pour info, j'ai eu ce problème avec .NET Framework, et la solution largement rapportée ici n'a pas aidé. Le vrai problème était que mon application ASP.NET MVC ciblait "Any CPU", alors qu'une DLL référencée ciblait x86. Une fois que j'ai ajusté le ciblage pour qu'il corresponde, ce problème extrêmement frustrant a disparu.