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.
c#
asp.net
asp.net-mvc
iis
Kyle Carlson
la source
la source
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.
la source
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>
la source
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.
la source
Dans mon cas, l'erreur était:
J'ai ouvert mon fichier .csproj avec le bloc-notes et j'ai vu cette ligne:
J'ai changé le dernier pour un entier compris entre 1 et 6
<LangVersion>6</LangVersion>
L'erreur a disparu!
la source
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
la source
dans mon cas (projet créer dans un autre système):
Je peux exécuter ce projet.
la source
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 source
Mettez à niveau le package Microsoft.Net.Compilers Nuget vers la dernière version (au moins 2.x)
la source
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>
la source
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)
https://developercommunity.visualstudio.com/content/problem/519531/c-7x-versions-do-not-seem-to-work-in-vs2019.html
la source
J'ai mis à jour les Microsoft.Net.Compilers vers la version 2.0 ou supérieure
regarde ça
la source
J'ai juste changé le
langversion
endefault
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>
la source
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.
la source
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.
la source
Dans mon cas, le message d'erreur était:
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.
Solution
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.
la source
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.
la source
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')" />
la source