J'ai gardé cette erreur lors de l'exécution d'une nouvelle application ASP.NET MVC (tout droit sortie de la communauté VS 2015) sur une machine Windows 2008 Server.
J'ai gardé cette erreur lors de l'exécution d'une nouvelle application ASP.NET MVC (tout droit sortie de la communauté VS 2015) sur une machine Windows 2008 Server.
Réponses:
Beaucoup de gens s'y heurtent, alors je voulais poster ici.
J'ai trouvé une solution de contournement facile et folle grâce à ce gars: Expertdebugger .
Rétrogradez simplement votre version linguistique de C # 6 à C # 5, comme ceci:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
Changer le langversion:6
vers le bas de 6 à 5 -langversion:5
Corrigé pour moi. Remerciez-le.
Si vous souhaitez utiliser C # 6.0:
.config
fichier pour effectuer les modifications suivantes.Recherchez system.codedom
et modifiez-le pour qu'il ressemble à l'illustration ci-dessous:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
J'ai constaté que la cause directe de l'erreur dans mon cas était:
cela a du sens puisque l'erreur indique qu'il existe une option non valide pour la langue.
mais, cela fonctionnait bien avant - donc il doit avoir été sélectionné. Qu'est ce qui a changé? Il s'avère qu'un membre de mon équipe est passé à vs 2017, alors que j'utilisais encore 2015. après avoir apporté des modifications au projet, la version linguistique a été modifiée et j'ai reçu ce changement sur le contrôle de code source. mais la version sélectionnée n'était pas disponible pour ma version de vs, elle était donc vide - d'où l'erreur. après avoir sélectionné une valeur dans la liste déroulante de la langue (j'ai choisi la valeur par défaut), une nouvelle erreur est apparue. la nouvelle erreur provoquait un échec de construction sur toutes les lignes de code qui utilisaient la nouvelle version de c #. J'ai changé le code pour exécuter les mêmes fonctions, mais avec ma syntaxe de version c # et mon problème résolu.
Ainsi, alors que la cause directe de l'erreur était en effet une sélection invalide de la version de la langue, la cause principale était due à des versions différentes de vs / c # en conflit.
Dans mon cas, l'erreur était:
Erreur CS1617 Option non valide 'latest' pour / langversion; doit être ISO-1, ISO-2, Default ou un entier compris entre 1 et 6.
J'ai ouvert mon fichier .csproj avec le bloc-notes et j'ai vu cette ligne:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
J'ai changé le dernier pour un entier compris entre 1 et 6
<LangVersion>6</LangVersion>
L'erreur a disparu!
Dans mon cas, j'utilisais le mauvais MSBuild.exe, celui trouvé dans:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Pour résoudre l'erreur, j'ai mis à jour ma variable d'environnement PATH pour commencer à utiliser Visual Studio 2017 MSBuild.exe:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
Veuillez consulter ce lien pour plus de détails: Erreur CS1056: caractère inattendu '$' exécutant le msbuild sur un processus d'intégration continue tfs
dans mon cas (projet créer dans un autre système):
Je peux exécuter ce projet.
Au lieu de changer la version du langage de 6 à 5, changez l'attribut "type" sur la balise du compilateur de
Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
à
Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
La solution la plus simple pour moi était de mettre à niveau les compilateurs .Net via Package Manager
Package d'installation Microsoft.Net.Compilers
puis en modifiant les lignes Web.Config en ceci
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Il s'avère que c'était un problème, car le projet ASP.NET MVC 4 faisait référence à une version spécifique du package Microsoft.Net.Compilers. Visual Studio utilisait le compilateur de ce package spécifique, et non le compilateur qui était installé sur l'ordinateur.
Un avertissement ou quelque chose aurait été bien de VS2019 :-)
La solution consiste alors à mettre à jour le package Microsoft.Net.Compilers vers une version plus récente.
La version 1.x est pour C # 6 La version 2.x est pour C # 7 La version 3.x est pour C # 8 Comment j'ai réussi à résoudre ce problème n'était pas immédiatement évident. Visual Studio aurait pu suggérer ou laisser entendre qu'en sélectionnant une nouvelle version dans les paramètres du projet, ce paramètre était désormais en conflit avec le package installé dans le projet.
(J'ai fini par activer la journalisation MSBuild de niveau Diagnostics pour savoir quel CSC.EXE l'EDI essaie vraiment d'utiliser)
J'ai mis à jour les Microsoft.Net.Compilers vers la version 2.0 ou supérieure
J'ai juste changé le langversion
en default
et cela a fonctionné pour moi. VS 2015
<system.codedom>
<compilers>
<compiler language=”c#;cs;csharp” extension=”.cs” type=”Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:default /nowarn:1659;1699;1701″>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
<compiler language=”vb;vbs;visualbasic;vbscript” extension=”.vb” type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
Nettoyer la solution et reconstruire Dans mon cas, quels que soient les paramètres précédents bloquaient en raison d'une incompatibilité. J'ai importé un nouveau projet et l'ai construit, essayé de changer de version et tout. nettoyer les solutions et construire a fonctionné pour moi.
Dans mon cas, je téléchargeais une bibliothèque avec un exemple de code d'implémentation keycloak par mattorg de GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples
La solution était assez simple, car j'utilisais .Net Framework 4.6.1, mais le projet m'a supplié au début d'utiliser 4.6.2. Bien que je l'ai téléchargé, il a d'abord été activement choisi, lorsque vous redémarrez toutes les instances de Visual Studion (ou mieux fermez toutes les instances). Le projet a été manipulé en 4.6.1 (bien que je ne l'ai pas souhaité et que je l'ai choisi).
Donc, après avoir choisi à nouveau la configuration pour choisir .Net Framework 4.6.1, l'erreur a disparu immédiatement.
Dans mon cas, le message d'erreur était:
ASPNETCOMPILER: erreur CS1617: option "7.3" non valide pour / langversion; doit être ISO-1, ISO-2, Default ou un entier compris entre 1 et 6.
Comme indiqué dans ce problème GitHub et dans ce message de la communauté des développeurs VS, il semble qu'il s'agisse d'un bogue dans un ancien package NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform .
Après la mise à niveau de ce package NuGet vers la version 3.6.0, l'erreur persistait toujours dans mon application Web.
J'ai découvert que je devais supprimer un ancien dossier "bin \ Roslyn" dans mon application Web pour que cela fonctionne.
Il semble que le nouveau package NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform (3.6.0 dans mon cas) n'apporte plus son propre dossier "Rosyln", et s'il est présent, cet ancien dossier "Roslyn" a pris la priorité lors de la compilation.
Cela m'est arrivé lorsque j'ai supprimé mon repo après l'avoir déplacé vers un nouvel emplacement. La solution était de décharger puis de recharger chaque projet qui montrait cette erreur.
J'ai essayé quelques autres options mais rien n'a fonctionné pour moi. De plus, dans cette situation, mes fichiers de configuration ont été configurés pour utiliser la version 6 de la langue, donc leur définition par défaut n'a pas résolu le problème.
Si toutes les options ci-dessus ne fonctionnent pas et que vous avez utilisé des packages nuget tels que Microsoft.Net.Compilers et CodeDom et ne fonctionnent toujours pas, il y a un problème avec votre fichier de projet. Le fichier de projet utilise l'une des options du compilateur qui ne prend pas en charge la langue sélectionnée. Ouvrez le fichier de projet avec notepad ++ et supprimez la ligne suivante.
Fichier de projet original
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
<!--Don't delete below one-->
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
Supprimer les lignes suivantes
<Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />