Impossible de trouver une partie du chemin… bin \ roslyn \ csc.exe

J’essaye de lancer le projet Asp.net MVC récupéré du contrôle de source TFS. J’ai ajouté toutes les références d’assemblage et je suis capable de comstackr et de comstackr sans 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.

entrer la description de l'image ici

Après quelques jours de recherche, j’ai compris que Roslyn est une plate-forme de compilation .Net qui offre des fonctionnalités de compilation avancées. Cependant, je ne comprends pas pourquoi ma version essaie de trouver \ bin \ roslyn \ csc.exe car je n’ai rien configuré avec Roslyn, ni l’intention d’utiliser Roslyn dans mon projet.

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:

       

Dans mon cas, la solution consistait à réinstaller / mettre à jour les paquets Nuget:

  • Microsoft.Net.Comstackrs 1.1.1
  • Microsoft.CodeDom.Providers.DotNetComstackrPlatform 1.0.1

Ensuite, j’ai regardé dans .csproj et je me suis assuré que les chemins des paquets étaient corrects (dans mon cas .. \ .. \ packages \ *. *) Dans les balises en haut et dans avec le nom “EnsureNuGetPackageBuildImports” le fond. Ceci est sur MVC 5 et .NET Framework 4.5.2.

Réponse courte – exécutez ceci dans la console du gestionnaire de packages:

PM > update-package Microsoft.CodeDom.Providers.DotNetComstackrPlatform -r

Votre build essaie de trouver \bin\roslyn\csc.exe car les packages suivants ont été ajoutés dans votre projet.Voyez votre fichier packages.config , vous pouvez les avoir tous les deux

 Microsoft.CodeDom.Providers.DotNetComstackrPlatform Microsoft.Net.Comstackrs 

Qu’est-ce que Roslyn et Qui les a ajoutés (packages) dans le projet: Si vous utilisez .net Framework 4.5.2 pour créer des projets avec VS2015, vous avez peut-être remarqué que les modèles de projet utilisent Roslyn par défaut. En fait, Roslyn est l’un des compilateurs open source pour les langages .NET de Microsoft.

Pourquoi devrions-nous supprimer Roslyn: Si votre projet a des références Roslyn et que vous souhaitez le déployer sans serveur, vous obtiendrez des erreurs indésirables sur le site car de nombreux hébergeurs n’ont toujours pas mis à niveau leurs serveurs et ne supportent pas Roslyn. problème, vous devrez supprimer le compilateur Roslyn du modèle de projet.

Si vous ne souhaitez pas utiliser Roslyn, suivez les étapes ci-dessous pour le supprimer.

1. Supprimez les packages Nuget, utilisez les commandes suivantes à partir de Nuget Package Console

 PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetComstackrPlatform PM> Uninstall-package Microsoft.Net.Comstackrs 

2. Après cela, votre fichier web.config doit être mis à jour automatiquement. Si ce n’est pas le cas, recherchez le code ci-dessous dans le fichier web.config et, s’il est trouvé, supprimez ce morceau de code.

       

Voici une manière plus MSBuild de le faire.

        

Mais je remarque que les fichiers roslyn sont également dans mon répertoire bin (pas dans un dossier). L’application semble fonctionner, cependant.

Un nettoyage et une reconstruction ont fonctionné pour moi!

Edit: les commentateurs disent que l’étape propre n’est pas nécessaire. Vous pouvez simplement reconstruire.

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 et modifier l’atsortingbut Include car $ CscToolPath était vide lors de la construction du projet sur notre serveur de génération. Curieusement, $ CscToolPath n’était PAS vide lors de l’exécution locale.

        

Par un commentaire de Daniel Neel ci-dessus:

la version 1.0.3 du package Microsoft.CodeDom.Providers.DotNetComstackrPlatform Nuget fonctionne pour moi, mais la version 1.0.6 provoque l’erreur dans cette question

La rétrogradation à 1.0.3 a résolu ce problème pour moi.

Ceci est un problème connu avec Microsoft.CodeDom.Providers.DotNetComstackrPlatform 1.0.6. La rétrogradation à la version 1.0.5 a résolu ce problème pour moi.

Dans mon cas, je devais simplement aller au 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 réinsérez la solution pour déclencher le processus de génération.

Le dossier roslyn n’était pas inclus par défaut.

Ouvrez le fichier de projet et supprimez toutes les références avec Import Project = “.. \ packages \ Microsoft.CodeDom.Providers.DotNetComstackrPlatform.1.0.0 ….

Ouvrez web.config et supprimez tous les atsortingbuts du compilateur system.codedom

Mise à jour des paquets nuget a fonctionné pour moi Cliquez droit sur la solution> Gérer les paquets NuGet pour solution et mettre à jour tous les paquets et spécialement: Microsoft.Net.Comstackrs et Microsoft.CodeDom.Providers.DotNetComstackrPlatform

Si vous ajoutez ASPNETCOMPILER pour comstackr vos vues Razor dans MVC, comme dans cette question StackOverflow , changez PhysicalPath pour placer l’emplacement du package Roslyn nuget (généralement désigné par la variable $ CscToolPath ):

   

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\ , mais plutôt dans le {outdir}\roslyn\ . Ceci est probablement différent de votre environnement local puisque AppHarbor construit des applications en utilisant un répertoire de sortie au lieu de créer la solution “in- AppHarbor “.

Pour résoudre ce problème, ajoutez ce qui suit vers la fin du fichier .csproj juste après le bloc xml ...

   if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn" start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"   

Référence: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise

La mise à niveau de Microsoft.CodeDom.Providers.DotNetComstackrPlatform de 1.0.0 à 1.0.1 a résolu ce problème pour moi.

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:

 MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: at System.Uri.CreateThis(Ssortingng uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: at System.Uri..ctor(Ssortingng uriSsortingng) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(Ssortingng fullPath, Ssortingng relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(Ssortingng fullPath, Ssortingng relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, Ssortingng sourceBaseDirectory, Ssortingng targetDirectory, Ssortingng relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj] Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED 

Cause

Après un certain temps, j’utilisais un composant développé en interne qui utilisait Microsoft.Net.Comstackrs . La raison pour laquelle le composant interne utilisait Microsoft.Net.Comstackrs était de résoudre ce problème ( C #: lancer une compilation d’expression non valide ) et a été résolu de cette façon ( Comment utiliser c # 7 avec Visual Studio 2015? ). Cela se traduit, lorsque j’ai installé le compétent sur le programme principal, le Microsoft.Net.Comstackrs s’ajoutent automatiquement.

Solution

Mon travail a été de désinstaller après notre composant interne par (suite à la réponse de @malikKhalil)

 PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetComstackrPlatform PM> Uninstall-package Microsoft.Net.Comstackrs 

Et choisi le compilateur C # 7 dans Jenkins au lieu de C # 6 et reconstruit, ceci pour s’assurer que tout fonctionne correctement.

Que finalement dans mon programme principal j’ai essayé de mettre à jour mon composant interne. Et tout sauf reconstruire. Il s’est construit sans aucun problème ou problème.

entrer la description de l’image ici

Vous devez installer Microsoft.CodeDom.Providers.DotNetComstackrPlatform.BinFix, spécialement créé pour cette erreur

Dans mon cas, similaire à Basim, il y avait un paquet NuGet qui disait au compilateur que nous avions besoin de C # 6, ce que nous n’avons pas fait.

Nous avons dû supprimer le package NuGet Microsoft.CodeDom.Providers.DotNetComstackrPlatform qui a ensuite été supprimé:

  1. partir du fichier packages.config

Dans le nœud system.codedom , vous pouvez voir pourquoi cela amène roslyn: comstackrOptions="/langversion:6

Ajouter PropertyGroup à votre fichier .csproj

   if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn" start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"   

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:

 Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe' 

J’ai fini par faire ça:

  • sur mon projet d’installation, clic droit, vue> système de fichiers
  • créer un dossier bin/roslyn
  • sélectionnez Ajouter> Fichiers et ajoutez tous les fichiers à partir des packages\Microsoft.Net.Comstackrs.1.3.2\tools

Cela a résolu mon problème.

J’avais également le même problème lors de l’exécution du projet. voici les étapes que j’ai suivies.

  1. Clic droit dans la solution
  2. sélectionnez la solution propre
  3. Après avoir réussi, construisez à nouveau votre projet
  4. Exécutez le projet à nouveau

    Cette fois, je ne vois pas la même erreur. Cela fonctionne comme prévu

Supprimez le dossier Bin dans l’explorateur de solutions et créez à nouveau la solution. Cela résoudrait le problème

J’ai rencontré ce problème après avoir mis à jour certains packages via NuGet. Une reconstruction (au lieu d’une construction normale) a fonctionné pour moi.

J’ai eu le même problème après la mise à jour de DotNetComstackrPlatform. Résolu en redémarrant Visual Studio> Nettoyer le projet> Construire le projet.

Ma solution utilise Nuget pour mettre à jour les éléments ci-dessous vers la dernière version: – Microsoft.Net.Comstackrs – Microsoft.CodeDom.Providers.DotNetComstackrPlatform Puis, reconstruisez le projet. Comme mon projet est un site Web, pas de fichier * .csproj. L’erreur ci-dessus apparaît lorsque j’ai essayé d’afficher un cshtml dans le navigateur.

L’erreur corrigée après les deux éléments ci-dessus mis à jour avec la dernière version. Je suis dans VS2015 et windows7 SP1

J’ai webproject sans fichier csproj et les solutions mentionnées ici ne fonctionnaient pas pour moi.

Modifier le framework .NET cible, réinstaller les packages ( Update-Package -reinstall ) et créer 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 nuget après).

Problème

Sachez que le PM NuGet rompt le comportement de Rosalyn. Cliquez sur Tools > NuGet Package Manager > Manage NuGet Packages for Solution Si une mise à jour existe pour Microsoft.CodeDom.Providers.DotNetComstackrPlatform , Microsoft.Net.Comstackrs ou Microsoft.Net.Comstackrs.netcore , mettez-les à jour et la solution sera interrompue! Cela se produit car les modèles de sites ASP sont définis pour utiliser des versions spécifiques lors de la création du projet. Pour voir le problème, cliquez sur Afficher tous les fichiers dans l’explorateur de solutions.

Réparer

Lors de la création du projet, $(WebProjectOutputDir)\bin n’existe pas. Par conséquent, lorsque Rosalyn est ajouté en tant que dépendance par NuGet, il l’installe correctement. Après la mise à jour des packages de solution, le $(WebProjectOutputDir)\bin se présente comme $(WebProjectOutputDir)\bin :

$(WebProjectOutputDir)\bin\bin\rosalyn

La solution la plus simple consiste à couper et coller Rosalyn au bon emplacement, puis à supprimer le dossier bin supplémentaire. Vous pouvez maintenant actualiser la page et le site se chargera.

J’ai dû modifier les fichiers de projet WebAPI et MVC pour ne pas générer de vues:

 false 

Cela a résolu mon erreur TFS 2015 Build serveur avec roslyn. Vous ne savez toujours pas pourquoi csc.exe a été copié dans \ bin \ csc.exe, mais le processus de publication recherchait \ bin \ Roslyn \ csc.exe … ne pouvait pas trouver la transformation à l’origine de cette divergence.

J’ai rencontré cette erreur sur un serveur de génération Jenkins exécutant MSBuild, qui génère les fichiers de génération dans un dossier distinct (_PublishedWebsites). Exactement les mêmes – le dossier roslyn n’était pas dans le répertoire bin et tous les fichiers roslyn étaient regroupés avec les fichiers bin.

La réponse de @ igor-semin était la seule chose qui a fonctionné pour moi (comme j’utilise les fonctionnalités du langage C # 6, je ne peux pas simplement désinstaller les paquets nuget selon les autres réponses), mais comme j’utilise aussi CodeAnalysis, je devenais une autre erreur sur le serveur cible de déploiement:

Une tentative de substitution d’un mappage existant a été détectée pour le type Microsoft.CodeAnalysis.ICompilationUnitSyntax avec le nom “”, actuellement mappé sur le type Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax, pour taper Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax.

La raison en est que lorsque les fichiers roslyn sont stockés dans le répertoire bin principal, lorsque vous exécutez xcopy pour les recréer dans le dossier roslyn nested, vous disposez maintenant de deux copies de ces fichiers en cours de compilation. . Après beaucoup de frustration, j’ai décidé d’un correctif «hack» – une tâche supplémentaire de post-build pour supprimer ces fichiers du répertoire bin, en supprimant le conflit.

Le .csproj de mes projets offensants ressemble maintenant à:

………………. plus ici ………………….

    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn" start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"          

………………. plus ici ………………….

J’ai rencontré ce problème avec le pipeline de publication (qui produit un répertoire _PublishedWebsites) et je l’ai utilisé comme cible dans le projet:

    

L’inconvénient est qu’il y aura deux copies des fichiers Roslyn dans la sortie.

J’ai eu cette erreur après avoir renommé une solution et certains projets inclus, et joué avec la suppression des paquets nuget. J’ai comparé le nouveau projet avec le dernier projet en cours et j’ai constaté que les lignes suivantes manquaient et devaient être rajoutées dans:

     

Faire cela a résolu le problème pour moi.