J'essaie d'exécuter le projet Asp.net MVC récupéré du contrôle de source TFS. J'ai ajouté toutes les références d'assembly et je suis capable de construire et de compiler avec succès sans aucune erreur ni avertissement.
Mais j'obtiens l'erreur suivante dans le navigateur:
Impossible de trouver une partie du chemin «C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe».
Voici une capture d'écran complète de la page d'erreur.
Après quelques jours de recherche, j'ai compris que Roslyn est une plate-forme de compilateur .Net qui offre des fonctionnalités de compilation avancées. Cependant, je ne comprends pas pourquoi ma génération essaie de trouver \ bin \ roslyn \ csc.exe car je n'ai configuré aucun élément lié à Roslyn et je n'ai pas l'intention d'utiliser Roslyn dans mon projet.
.csproj
dossier.Réponses:
Le problème avec les modèles VS2015 par défaut est que le compilateur n'est pas réellement copié dans le répertoire tfr \ bin \ roslyn \, mais plutôt dans le répertoire {outdir} \ roslyn \
Ajoutez ce code dans votre fichier .csproj:
la source
TL; DR
exécutez ceci dans la console du gestionnaire de packages:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Plus d'information
Ce problème n'est pas lié à Visual Studio lui-même, donc les réponses suggérant d'ajouter des étapes de génération pour copier des fichiers sont plutôt une solution de contournement. Idem avec l'ajout manuel de binaires du compilateur au projet.
Le compilateur Roslyn provient d'un package NuGet et il y a / il y avait un bug dans certaines versions de ce package (je ne sais pas exactement lesquelles). La solution consiste à réinstaller / mettre à niveau ce package vers une version sans bogue. À l'origine, avant d'écrire la réponse en 2015, je l'ai corrigée en installant les packages suivants dans des versions spécifiques:
Ensuite, j'ai regardé dans .csproj et je me suis assuré que les chemins d'accès aux packages sont corrects (dans mon cas .. \ .. \ packages \ *. *) À l'intérieur des balises
<ImportProject>
en haut et<Target>
avec le nom "EnsureNuGetPackageBuildImports" en bas. C'est sur MVC 5 et .NET Framework 4.5.2.la source
Votre build essaie de trouver
\bin\roslyn\csc.exe
car les packages suivants ont été ajoutés à votre projet. Examinez simplement votrepackages.config
dossier, vous pouvez les avoir tous les deux là-bassi vous n'êtes pas intéressé à utiliser Roslyn, suivez les étapes ci-dessous pour le supprimer
1. Supprimez les packages NuGet, utilisez les commandes suivantes à partir de Nuget Package Console
2. Après cela, votre fichier web.config doit être mis à jour automatiquement. Dans le cas contraire, recherchez le code ci-dessous dans le
web.config
fichier et s'il est trouvé, supprimez ce morceau de code.la source
Un nettoyage et une reconstruction ont fonctionné pour moi!
la source
Copying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
Voici une façon plus MSBuild de procéder.
Mais je remarque que les fichiers roslyn sont également dans mon répertoire bin (pas dans un dossier). Cependant, l'application semble fonctionner.
la source
Comme indiqué dans un problème du projet Roslyn sur GitHub , une solution (qui a fonctionné pour moi) consiste simplement à décharger et recharger le projet dans Visual Studio.
Le dossier "bin \ roslyn" n'a pas été créé lors de la construction ou de la reconstruction tant que je n'ai pas rechargé le projet.
la source
J'ai suivi ces étapes et cela a parfaitement fonctionné
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
la source
Après avoir essayé toutes les corrections sans cigare, je l'ai corrigé en mettant à jour ce package Nuget dans Visual Studios:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Le mien était de 1.0.0 à 2.0.0 pour référence (l'erreur ne s'affiche plus)
la source
roslyn
dossier est créé dans mon chemin de sortie. Je ne vois pas non plus de référence "roslyn" dans mon csproj. Il se pourrait que ceTarget Name="CopyRoslyn...
soit une chose VS2015 et non nécessaire dans (la version de) 2017 que j'ai. À noter: depuis que j'ai mis à jour DotnetCompilerPlatform avant de jouer avec l'ajout d'une cible de copie (celle que j'ai mentionnée), j'ai un csproj plus propre.la source
Ctrl C
lorsque j'étais en train de vérifier une succursalegit
et cela a foiré mon repo.git reset --hard
n'a pas fonctionné, j'ai doncgit clean -xdf
dû reconstruire le projet. Cependant, j'ai rencontré cette erreur, j'ai donc simplement nettoyé et reconstruit le projet à nouveau et cela a fonctionné pour moi.Vous devez installer Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, a été spécialement créé pour cette erreur
la source
Cela réinstalle toutes les dépendances et les fichiers du package (comme csc.exe)
la source
Donc, la réponse de Rob Cannon a essentiellement fonctionné pour moi, mais j'ai dû modifier quelques options. Plus précisément, j'ai dû supprimer la condition sur la cible, ainsi que modifier l'attribut Include, car $ CscToolPath était vide lorsque le projet était en cours de génération sur notre serveur de génération. Curieusement, $ CscToolPath n'était PAS vide lors de l'exécution locale.
la source
La mise à jour des packages nuget a fonctionné pour moi Cliquez avec le bouton droit sur la solution> Gérer les packages NuGet pour la solution et mettre à jour tous les packages et spécialement: Microsoft.Net.Compilers et Microsoft.CodeDom.Providers.DotNetCompilerPlatform
la source
Il s'agit d'un problème connu avec Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. La rétrogradation vers 1.0.5 a résolu ce problème pour moi.
la source
Pour VS 2019, supprimez complètement le nœud suivant:
la source
Selon un commentaire de Daniel Neel ci-dessus:
la version 1.0.3 du package Nuget Microsoft.CodeDom.Providers.DotNetCompilerPlatform fonctionne pour moi, mais la version 1.0.6 provoque l'erreur dans cette question
La rétrogradation vers 1.0.3 a résolu ce problème pour moi.
la source
Dans mon cas, j'ai eu un problème dans Jenkins quand il a essayé de le déployer dans Octopus avec l'erreur suivante:
Cause
Après avoir passé quelque temps, j'utilisais un composant développé en interne qui utilisait
Microsoft.Net.Compilers
. La raison pour laquelle le composant interne utilisaitMicrosoft.Net.Compilers
était de résoudre ce problème ( C #: jeter la compilation d'expressions non valides ) et a été résolu de cette façon ( Comment utiliser C # 7 avec Visual Studio 2015? ). Ce résultat, lorsque j'ai installé le composant sur le programme principal, l'Microsoft.Net.Compilers
ajout s'ajoute automatiquement.Solution
Mon travail a consisté à désinstaller le suivi de notre composant interne par (suite à la réponse @malikKhalil)
Et choisi le compilateur C # 7 dans Jenkins au lieu de C # 6 et reconstruire, c'est pour s'assurer que tout fonctionne et se construit correctement.
Enfin, dans mon programme principal, j'ai essayé de mettre à jour mon composant interne. Et tout à reconstruire. Il a construit sans aucun problème ni problème.
la source
Dans mon cas, je devais simplement aller dans le répertoire bin dans Visual Studio Solution Explorer (projet d'application Web) et inclure directement le projet roslyn. En cliquant avec le bouton droit sur le dossier et en sélectionnant Inclure dans le projet. Et archivez à nouveau la solution pour déclencher le processus de génération.
Le dossier roslyn n'était pas inclus par défaut.
la source
J'avais également le même problème lors de l'exécution du projet. Voici les étapes que j'ai suivies.
Cette fois, je n'ai pas vu la même erreur. Cela fonctionne comme prévu.
la source
La mise
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
à niveau de 1.0.0 vers 1.0.1 a corrigé cela pour moi.la source
Ouvrez le fichier de projet et supprimez toutes les références avec Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....
Ouvrez web.config et supprimez tous les attributs des compilateurs system.codedom
la source
Comme nous l' avons noté /programming/32780315#34391473 , la solution rapide est d'utiliser le gestionnaire de paquets,
Tools
>Nuget Package Manager
>Package Manager Console
, pour exécuterMais une solution alternative (qui recrée automatiquement et silencieusement vos packages s'ils sont manquants) consiste à supprimer un attribut du
Web.config
fichier de votre projet .(se
Web.config
trouve dans le même répertoire que votre.csproj
fichier.)Ouvrez le
Web.config
fichier dans un éditeur de texte (ou dans Visual Studio).- Dans la balise
configuration
>system.codedom
>compilers
>compiler language="c#;cs;csharp"
, supprimer complètement l'type
attribut.En bref, supprimez la ligne commençant par
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft
.(Vraisemblablement, le même correctif fonctionne pour Visual Basic ainsi que pour Csharp, mais je ne l'ai pas essayé.)
Visual Studio s'occupe du reste. Pas plus
Server Error in '/' Application
.Dans l'exemple de code que j'ai fourni dans le fichier zip ci-dessus, vous obtiendrez maintenant
HTTP Error 403
lorsque vous appuyez sur Ctrl+ F5.Essayez de remplacer
http://localhost:64195
dans votre navigateur Web parhttp://localhost:64195/api/products
.L'API Web s'affiche désormais comme il se doit:
Par provocation, j'ai essayé de supprimer tout le
package
répertoire de ma solution Visual Studio.Il a été recréé automatiquement et silencieusement dès que je l'ai (re) construit.
Enfin, voici le code qui reproduit l'erreur: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (à l'origine de https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / présentation / avancé / appeler-un-web-api-à-partir-d'un-net-client / exemple / serveur / ProductsApp )
la source
Dans mon cas, simplement en supprimant tout dans le dossier bin et en recompilant tout le travail pour moi.
la source
Si vous ajoutez ASPNETCOMPILER pour compiler vos vues Razor dans MVC, comme dans cette question StackOverflow , changez PhysicalPath pour placer où se trouve le package de nuget Roslyn (généralement pointé via la variable $ CscToolPath ):
la source
Le problème avec les modèles VS2015 par défaut est que le compilateur n'est pas réellement copié dans le
{outdir}_PublishedWebsites\tfr\bin\roslyn\
répertoire, mais plutôt dans le{outdir}\roslyn\
répertoire. Ceci est probablement différent de votre environnement local, car ilAppHarbor
crée des applications à l'aide d'un répertoire de sortie au lieu de créer la solution "sur place".Pour le corriger, ajoutez ce qui suit vers la fin du
.csproj
fichier juste après le bloc xml<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
Référence: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
la source
Dans mon cas, similaire à Basim, il y avait un package NuGet qui indiquait au compilateur que nous avions besoin de C # 6, ce que nous n'avions pas.
Nous avons dû supprimer le package NuGet
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
qui a ensuite supprimé:<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
à partir du fichier packages.config<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>
Dans le
system.codedom
nœud, vous pouvez voir pourquoi il apportait roslyn:compilerOptions="/langversion:6
la source
Supprimez le dossier Bin dans votre explorateur de solutions et générez à nouveau la solution. Cela résoudrait le problème
la source
J'ai eu le même problème lors de l'installation de mon application sur le serveur lorsque tout fonctionnait parfaitement sur localhost.
Aucune de ces solutions n'a fonctionné, j'ai toujours eu la même erreur:
J'ai fini par faire ça:
bin/roslyn
dossierpackages\Microsoft.Net.Compilers.1.3.2\tools
Cela a résolu mon problème.
la source
Redémarrez Windows.
C'est la seule solution qui a fonctionné pour moi après avoir essayé de reconstruire, supprimer le contenu
bin
et reconstruire, redémarrer Visual Studio.C'est encore un autre exemple de la gravité des outils de construction C # /. NET.
Je pense (après avoir lu beaucoup de réponses), la conclusion générale est que la cause et la solution de ce problème dépendent fortement de la configuration et du projet, donc si une réponse ne fonctionne pas, essayez simplement une autre. Essayez les solutions non intrusives / destructives, telles que le redémarrage de Visual Studio, le redémarrage, la reconstruction, etc., D'ABORD, avant de jouer avec les packages NuGet ou de réinstaller les outils de développement. Bonne chance!
(REMARQUE: l'utilisation de Visual Studio 2019 et du fichier de projet a été initialement créé dans Visual Studio 2015. Cela peut peut-être aider quelqu'un à enquêter sur le problème)
(EDIT: cela peut-il être dû au fait de ne pas redémarrer après avoir installé / modifié l'installation de Visual Studio ou mis à jour Visual Studio lorsque le programme d'installation vous invite à redémarrer?)
la source
J'ai un projet Web sans fichier csproj et les solutions mentionnées ici n'ont pas fonctionné pour moi.
Changer le framework .NET cible, réinstaller les packages (
Update-Package -reinstall
) puis construire le projet a fonctionné pour moi. Vous pouvez même modifier le framework cible après cette opération (assurez-vous de réinstaller les packages de nuget après).la source
update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall