C'est un projet WebApi utilisant VS2015.
Étape pour reproduire:
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.
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:
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
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=\"Web\" /optionInfer+" />
</compilers>
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"
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.
Ajoutez simplement le prochain paquet de nugets à votre projet - Microsoft.CodeDom.Providers.DotNetCompilerPlatform
.
Avait le même problème.
J'ai le même problème que mon application a fonctionné dans VS2013 mais obtenir l'erreur après la mise à jour à VS2015.
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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
</pre>
Après avoir mis à jour les deux lignes, l'erreur a disparu.
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.
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.
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é.
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.
Vous devez mettre à jour les packages "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" et "Microsoft.Net.Compilers" dans votre projet.
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>
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.
Voici comment je l'ai résolu:
bin
dans le répertoire du projet.Build Solution
. Dans VS2017 (Exécuter en tant qu'administrateur)> Construire> Construire la solution.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.
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:
Ouvrez IIS
Cliquez sur le pool d'applications
Sélectionnez votre pool d'applications sur lequel vous rencontrez des problèmes
Clic droit -> paramètres avancés
Cliquez sur l'icône en trois points à côté de identiy
Maintenant, sélectionnez compte personnalisé
Donnez le nom d'utilisateur et le mot de passe de votre PC
Sauvegarder
Actualisez votre application .. et cela commencera à fonctionner. Il y avait un problème de sécurité pour accéder à la DLL.
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.
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.
Ajoutez une référence à l'assembly CppCodeProvider.
Vérifiez si le dossier BIN
est complètement téléchargé ou manquant dans les fichiers.
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.
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.
En ce qui concerne cette erreur, j'ai essayé:
uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
uninstall-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.
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.
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
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.