web-dev-qa-db-fra.com

Le type de fournisseur CodeDom "Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider" est introuvable.

C'est un projet WebApi utilisant VS2015.

Étape pour reproduire: 

  1. Créer un projet WebApi vide
  2. Changer le chemin de sortie de la compilation de "bin \" en "bin\Debug \"
  3. Courir

 enter image description here

Tout fonctionne parfaitement jusqu'à ce que je modifie le chemin de sortie de construction de "bin \" en "bin\Debug \" En fait, aucun chemin de sortie autre que "bin \" ne fonctionnera.

Une petite chose supplémentaire est que, avoir un autre chemin de sortie vers n'importe où fonctionnerait aussi longtemps que je laisserais une construction dans "bin \". 

S'il vous plaît aider à fournir une solution pour résoudre ce problème. Je suppose que cela coûtera un problème sur le déploiement réel.

108
cscmh99

Si votre projet contient les références Roslyn et que vous le déployez sur un serveur IIS , vous risquez d'obtenir des erreurs non souhaitées sur le site Web, car de nombreux fournisseurs d'hébergement n'ont toujours pas mis à niveau leurs serveurs. soutenir Roslyn.

Pour résoudre ce problème, vous devrez supprimer le compilateur Roslyn du modèle de projet . Supprimer Roslyn ne devrait pas affecter les fonctionnalités de votre code. Cela a bien fonctionné pour moi et certains autres projets (C # 4.5.2) sur lesquels j'ai travaillé.

Effectuez les étapes suivantes:

  1. Supprimez les packages Nuget suivants à l'aide de la ligne de commande indiquée ci-dessous (ou vous pouvez utiliser l'interface graphique du gestionnaire de packages Nuget en faisant un clic droit sur la solution de projet racine et en les supprimant).

    PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    PM> Uninstall-package Microsoft.Net.Compilers
    
  2. Supprimez le code suivant de votre fichier Web.Config et redémarrez IIS . (Utilisez cette méthode uniquement si l'étape 1 ne résout pas votre problème.)

    <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=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
    

90
vibs2006

Faites attention à suivre les conseils de cette réponse. Même si cela résout le problème, il est presque certain que différents problèmes se poseront ultérieurement.

J'ai le même problème. Apparemment, le compilateur .NET n'a pas été chargé dans la variable GAC. Ce que j'ai fait pour le résoudre était:

Tout d'abord, dans la console du gestionnaire de packages, tapez:

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Maintenant, pour une raison quelconque, les gentilshommes de Microsoft ont décidé de ne pas l’installer au GAC pour nous. Vous pouvez le faire manuellement en ouvrant l'invite de commande du développeur et en tapant:

gacutil -i "C:\*PATH TO YOUR APP CODE*\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll"

Conclusion

Microsoft essaie d’encourager tout le monde à tout faire avec des pépites, ce qui pourrait bien se passer des bugs occasionnels que vous rencontrez avec le système de pépites. Essayez d'utiliser le même projet sur différentes solutions, mettez à jour accidentellement (ou non) l'une des nombreuses pépites qu'il utilise sur l'une d'entre elles et, si vous êtes malchanceux, vous verrez ce que je veux dire lorsque vous essayez de créer l'autre solution. D'autre part, placer des fichiers dans le GAC peut également poser des problèmes futurs car les utilisateurs ont tendance à oublier ce qu'ils ont mis là-bas, puis lors de la configuration de nouveaux environnements, ils oublient d'inclure ces fichiers. Une autre solution possible consiste à placer les fichiers dans un dossier central pour les DLL tierces (même s'il est étrange d'appeler le compilateur tiers), ce qui crée des problèmes de références cassées lors de la configuration de nouveaux environnements. Si vous décidez d'installer la dll sur le GAC, soyez prudent et rappelez-vous que vous l'avez fait. Si vous ne le faites pas, téléchargez à nouveau la pépite de chaque projet et supportez tous les bugs gênants (tout au moins lorsque je suis tombé malade et que je viens de placer les fichiers dans le GAC). Les deux approches peuvent vous donner des maux de tête et créer des problèmes, il s’agit simplement de savoir quels problèmes vous préférez traiter. Microsoft recommande d'utiliser le système de nuget. De manière générale, il est préférable de l'écouter plutôt que de le faire avec un programmeur inconnu sous SO, à moins que vous n'en ayez vraiment marre du système de nuget et que vous utilisiez suffisamment de temps avec le GAC pour qu'il soit une meilleure alternative. pour vous.

35
Yuval Perelman

Ajoutez simplement le prochain paquet de nugets à votre projet - Microsoft.CodeDom.Providers.DotNetCompilerPlatform.

Avait le même problème.

25
Maris

J'ai le même problème que mon application a fonctionné dans VS2013 mais obtenir l'erreur après la mise à jour à VS2015.

  1. Dans Vs2015, cliquez avec le bouton droit sur le dossier Références du projet pour ouvrir NuGet Package Manager.
  2. Sous l'onglet Parcourir, recherchez "DotNetCompilerPlatform" et installez "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" lib.
17
ninetiger

Je sais que c'est un ancien fil de discussion, mais je voudrais signaler le problème de version possible de DotNetCompilerPlatform.dll, f. ex. après une mise à jour. Veuillez vérifier si le nouveau fichier Web.config généré est différent de votre version Web.config publiée, en particulier la partie system.codedom. Dans mon cas, il s’agissait du changement de version de 1.0.7 à 1.0.8. La nouvelle dll avait déjà été copiée sur le serveur, mais je n’ai pas changé l’ancien web.config (avec certains paramètres spéciaux du serveur):

<pre>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</pre>

Après avoir mis à jour les deux lignes, l'erreur a disparu.

14
user3266181

Selon vos étapes de repro, j'ai supposé que la modification du chemin de sortie dans la propriété de l'application était votre seule modification après la création de l'application. La seule chose que cette modification fait est qu'il indique à Visual Studio de placer les assemblys de sortie de MSBuild dans le nouveau dossier. Au moment de l'exécution, ASP.Net n'aurait aucune idée qu'il devrait charger des assemblys à partir de ce nouveau dossier au lieu du dossier\bin. 

Cette answer indique la manière de modifier le répertoire de sortie de la génération d’une application WebApi. Pour obtenir exactement la même erreur que celle affichée dans cet article, vous devez commenter l'intégralité de la section <system.codedom> de web.config. Ensuite, vous pouvez suivre les instructions pour modifier le chemin de sortie.

Une fois votre application appliquée, vous pouvez alors supprimer la mise en commentaire de la section <system.codedom>. Si vous n'utilisez pas du tout la nouvelle syntaxe C # 6 dans votre application, vous pouvez désinstaller Microsoft.CodeDom.Providers.DotNetCompilerPlatform de votre application. sinon, vous voudrez peut-être ajouter la ligne de commande suivante à votre événement post-build,

xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"

Le nouveau fournisseur CodeDom recherche toujours le dossier "\ roslyn" dans\bin. La commande ci-dessus fonctionne comme une solution de contournement et copie le dossier\roslyn de votre nouveau dossier de sortie vers\bin. 

Dans mes expériences, l'outil de publication de Visual Studio a cependant publié les assemblys de sortie dans le dossier\bin de l'emplacement de déploiement, quel que soit le paramètre défini pour le chemin de sortie. Je suppose que votre application devrait toujours fonctionner sur un déploiement réel.

10
X-Mao

Moyen facile - Projet> Gérer les paquets NuGet ...> Parcourir (onglet)> dans l'entrée de recherche, définissez ceci: Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Vous pouvez installer ou mettre à jour ou désinstaller et installer ce compilateur

 DotNetCompilerPlatform

7
Newred

Dans mon cas, cela s'est produit lorsque j'ai modifié l'autorisation du dossier de l'application et que le compte IIS_IUSRS a été supprimé. Après avoir ajouté de nouveau IIS_IUSRS (Gestionnaire IIS-> VotreWebApp -> Permission de modification -> Ajouter IIS_IUSRS) au dossier de l’application et à son utilisation. 

4
TheRegister

Une autre solution possible pourrait être:

Redémarrez votre instance Visual Studio avec Droits d'administrateur

 enter image description here

3
Legends

Il s'est arrêté après la publication sur le serveur de production. Cette erreur s’explique par le fait qu’elle a été déployée dans un dossier - - . Dans IIS, j’ai cliqué à droite sur le sous-dossier et exécuté "Convertir en application", puis cela a fonctionné.

3
Martin Lietz

Si vous avez récemment installé ou mis à jour le package Microsoft.CodeDom.Providers.DotNetCompilerPlatform, vérifiez à nouveau que les versions de ce package référencées dans votre projet pointent vers la version correcte et identique de ce package:

  • Dans ProjectName.csproj, assurez-vous qu'une balise <Import> pour Microsoft.CodeDom.Providers.DotNetCompilerPlatform est présente et pointe vers la version correcte.

  • Dans ProjectName.csproj, assurez-vous qu'une balise <Reference> pour Microsoft.CodeDom.Providers.DotNetCompilerPlatform est présente et pointe vers la version correcte, à la fois dans l'attribut Include et dans le <HintPath> enfant.

  • Dans le web.config de ce projet, assurez-vous que la balise <system.codedom> est présente et que ses balises enfant <compiler> ont la même version dans leur attribut type.

Pour une raison quelconque, dans mon cas, une mise à niveau de ce paquetage de 1.0.5 à 1.0.8 a donné à la balise <Reference> dans le.csproj son nom Include pointant vers l'ancienne version 1.0. 5 . 0 (que j'avais supprimée après mise à niveau du paquet), mais tout le reste pointait vers la nouvelle version 1.0. 8 . 0.

1
Ian Kemp

Vous devez mettre à jour les packages "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" et "Microsoft.Net.Compilers" dans votre projet.

1
salah eddine

ASP.NET ne recherche pas bin/debug ni aucun sous-dossier sous bin pour les assemblys comme le font d'autres types d'applications. Vous pouvez demander au moteur d'exécution de chercher dans un endroit différent en utilisant la configuration suivante:

<configuration>
   <runtime>   
      <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
         <probing privatePath="bin;bin\Debug;bin\Release"/>
      </assemblyBinding>
   </runtime>   
</configuration>
1
Nate Zaugg

Puis le problème est revenu. J'ai désinstallé Microsoft.CodeDom.Providers.DotNetCompilerPlatform et Uninstall-package Microsoft.Net.Compilers mais aucune aide. Puis installé aucune aide. Projet nettoyé et construit sans aide. Serveur redémarré sans aide. Ensuite, j’ai remarqué que le projet n’avait pas besoin du dernier projet en date, à savoir 1.0.5, mais 1.0.3, car c’était l’erreur qui ne pouvait pas charger la version 1.0.3. J'ai donc installé cette version dll à la place et maintenant cela fonctionne.

1
tfa

Voici comment je l'ai résolu

  1. Supprimez le dossier bin dans le répertoire du projet.
  2. Cliquez sur Build Solution. Dans VS2017 (Exécuter en tant qu'administrateur)> Construire> Construire la solution.
1
BlackBeard

Je recevais cette erreur parce que mon utilisateur de pool d'applications était défini sur ApplicationPoolIdentity. Je l'ai changé pour un compte d'utilisateur/service qui a accès au dossier et l'erreur est partie.

1
user3822295

Voici mes conclusions. J'ai également fait face à ce problème aujourd'hui matin. Je viens d'ajouter mon utilisateur actuel au pool d'applications sur lequel l'application était en cours d'exécution.

Pas:

  1. Ouvrez IIS

  2. Cliquez sur le pool d'applications

  3. Sélectionnez votre pool d'applications sur lequel vous rencontrez des problèmes

  4. Clic droit -> paramètres avancés

  5. Cliquez sur l'icône en trois points à côté de identiy

  6. Maintenant, sélectionnez compte personnalisé

  7. Donnez le nom d'utilisateur et le mot de passe de votre PC

  8. Sauvegarder

Actualisez votre application .. et cela commencera à fonctionner. Il y avait un problème de sécurité pour accéder à la DLL.

1
Nekesh hedau

J'avais plusieurs projets dans la solution et le projet Web (problème donnant cette erreur) n'était pas défini comme projet StartUp. J'ai défini ce projet Web en tant que projet de démarrage et cliqué sur l'élément de menu "Débogage" -> "Démarrer le débogage" et tout a fonctionné. J’ai arrêté le débogage, puis j’ai essayé à nouveau et c’est à présent revenu. Bizarre.

1
tfa

Dans mon cas, j'ai eu l'erreur lorsque j'avais mon application Web dans 4.5.2 et les bibliothèques de classe référencées dans 4.6.1. Lorsque j'ai mis à jour l'application Web vers la version 4.5.2, l'erreur a disparu.

0
user3554620

Ajoutez une référence à l'assembly CppCodeProvider.

0
Mason

Vérifiez si le dossier BIN est complètement téléchargé ou manquant dans les fichiers.

0
TechDo

Assurez-vous que votre projet est entièrement construit!

Cliquez sur l'onglet 'Output' et assurez-vous de ne pas avoir quelque chose comme:

========== Reconstruire tout: 14 réussies, 1 échouées, 0 ignorées =========

Et ouvrez votre dossier bin et vérifiez s'il est à jour.

J'ai eu tout un tas d'erreurs TypeScript que j'ai ignorées au début, en oubliant qu'elles cassaient la construction et conduisaient à l'absence de DLL copiée.

0
Simon_Weaver

Je viens d'avoir le même problème et c'est parce que j'ai déplacé l'emplacement du projet et que je devais simplement recréer le répertoire virtuel.

0
Steven T. Cramer

En ce qui concerne cette erreur, j'ai essayé:

  • Nettoyage et reconstruction du projet
  • Déchargement et rechargement du projet
  • Modification du cadre cible
  • Modification du chemin de sortie
  • Ajouter des pépites au GAC
  • Suppression des packages uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatformuninstall-package Microsoft.Net.Compilers et les réinstaller.

Bien que toutes ces solutions semblent être valables, je n’ai pu générer que de nouvelles erreurs et à la fin, l’erreur semble pouvoir s’afficher lorsque certaines références/nugets sont manquantes.

Dans mon cas, j'avais récemment réinstallé Microsoft Office et faisais référence à des assemblys tels que Microsoft.Office.Core. La nouvelle installation ne semblait pas inclure les packages requis, ce qui a empêché la compilation correcte de ma solution.

J'ai pu résoudre ce problème en retravaillant mon code au point de ne plus avoir besoin de faire référence à Microsoft.Office, mais de le résoudre en recherchant les packages requis et en les installant en conséquence.

Cela ressemble à un message d'erreur peu clair de Visual Studio.

0
Wouter Vanherck

Dans mon cas, mon projet Web n’était pas chargé correctement (il affichait projet indisponible), puis je devais recharger mon projet Web après avoir ouvert mon studio visuel en mode administrateur, puis tout fonctionnait bien.

0
Rupesh Kumar Tiwari

Accédez à Inetmgr à partir de la commande de démarrage Dans la console du gestionnaire IIS Choisissez le dossier de l’application sous Site Web par défaut Cliquez avec le bouton droit sur ce dossier, puis. le fichier .asmx en activant .__, le problème a été résolu

0
Prabha Rajan

il suffit de désinstaller le package à partir de la console du gestionnaire de packages à partir de la commande ci-dessous

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

PM> Uninstall-package Microsoft.Net.Compilers

puis installez-le à nouveau à partir de Nuget Manager  enter image description here

0
Hisham shahid

L'exception que nous avons rencontrée ne se trouvait pas sur le serveur local, mais sur le serveur distant. Azure CI le lisait à partir du dossier packages, mais les versions du compilateur mentionnées ci-dessus étaient introuvables.

Pour résoudre ce problème, nous avons modifié le fichier de projet afin de lui donner un aspect similaire à

Il ne fait pas référence à aucun des packages ici référençant directement les variables d'environnement.

Cela a résolu le problème. Cependant, dans nos cas, nous n'utilisons pas les packages directement à partir de "package.config". Nous disposons plutôt d'un dossier distinct pour préserver l'intégrité de la version entre les équipes.

0
Vikas Sharma