Impossible de trouver une partie du chemin ... binroslyncsc.EXE
j'essaie de courir Asp.net MVC project extrait de TFS source control. J'ai ajouté toutes les références d'assemblée et je suis capable de construire et compiler avec succès sans aucune erreur ou avertissement.
mais j'ai l'erreur suivante dans le navigateur:
impossible de trouver une partie du chemin "C:B8akWorkspaceB8akProjectB8akSolutionB8AK.Portailbinroslyncsc.exe'.
Voici une capture d'écran 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 construction essaie de trouver binroslyncsc.exe parce que je n'ai pas configuré quoi que ce soit concernant Roslyn et je n'ai pas l'intention d'utiliser Roslyn dans mon projet.
30 réponses
le problème avec les modèles par défaut VS2015 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 .dossier csproj:
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
dans mon cas, la solution était de réinstaller/mettre à niveau les paquets Nuget:
- Microsoft.Net.Compilateurs 1.1.1
- Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform 1.0.1
puis j'ai regardé .csproj et s'est assuré que les chemins vers les paquets sont corrects (dans mon cas ..\..\paquet.*\* ) les étiquettes intérieures <ImportProject>
sur le dessus et <Target>
avec le nom" EnsureNuGetPackageBuildImports " sur le dessous. C'est sur MVC 5 et.NET Framework 4.5.2.
réponse courte - Lancez ceci dans la Console du Gestionnaire de paquets:
PM > update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
votre build essaie de trouver \bin\roslyn\csc.exe
parce que les paquets suivants ont été ajoutés dans votre projet.Il suffit de passer en revue votre fichier packages.config
, vous pouvez avoir les deux là
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
Qu'est-ce que Roslyn et qui les a ajoutés(paquets) dans le projet: si vous utilisez .net Framework 4.5.2 pour créer des projets en utilisant VS2015, vous avez peut-être remarqué que les modèles de projet utilisent Roslyn par défaut. En fait Roslyn est l'un des open-source compilateurs pour les langues .NET de Microsoft.
pourquoi supprimer Roslyn: Si votre projet a des références Roslyn et que vous êtes intéressé à déployer il pas de serveur, vous obtiendrez des erreurs indésirables sur le site autant les fournisseurs d'hébergement n'ont toujours pas mis à jour leurs serveurs et font donc pas supporter Roslyn.Pour résoudre ce problème, vous aurez besoin de supprimer Roslyn compiler du projet modèle.
si vous n'êtes pas intéressé à utiliser Roslyn, suivre les étapes ci-dessous pour le supprimer
1. Supprimer les paquets Nuget, utilisez les commandes suivantes de la Console du paquet Nuget
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
2. Après vous faites cela, votre web.le fichier de configuration doit être mis à jour automatiquement. Si ce n'est pas le cas, cherchez le code ci-dessous dans le web.le fichier de configuration et s'il est trouvé, supprimer ce morceau de code.
<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>
<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+"></compiler>
</compilers>
</system.codedom>
Voici une façon plus MSBuild de faire ceci.
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
mais je remarque que les fichiers roslyn sont aussi 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. Tu peux juste reconstruire.
, Rob Canon réponse essentiellement travaillé pour moi, mais j'ai eu à changer une poignée de options. Plus précisément, j'ai dû supprimer la condition sur la cible, ainsi que changer L'attribut Include, car $CscToolPath était vide lorsque le projet était construit sur notre serveur de construction. Curieusement, $CscToolPath n'était pas vide lors de la course locale.
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
<ItemGroup>
<RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
Par un commentaire par Daniel Neel ci-dessus :
de la version 1.0.3 de Microsoft.CodeDom.Fournisseur.Le paquet Nuget DotNetCompilerPlatform fonctionne pour moi, mais la version 1.0.6 provoque l'erreur dans cette question
déclassement à 1.0.3 a résolu cette question pour moi.
C'est un issue connue avec Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform 1.0.6. La rétrogradation à 1.0.5 a arrangé ça pour moi.
dans mon cas, j'avais juste besoin d'aller dans le répertoire bin dans Visual Studio Solution Explorer (projet d'application web) et d'inclure directement le projet roslyn. En cliquant droit sur le dossier et sélectionnez Inclure Dans le Projet. Et vérifiez à nouveau la solution pour déclencher le processus de construction.
le dossier roslyn n'était pas inclus par défaut.
ouvrir le dossier de projet et supprimer toutes les références avec Import Project="..\packages \ Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform.1.0.0....
web Ouvert.config et supprimer tout le système.codedom compilers attributs
la mise à jour des paquets nuget a fonctionné pour moi Clic droit sur la solution > Gérer les paquets NuGet pour la solution et mettre à jour tous les paquets et spécialement: Microsoft.Net.Compilateurs et Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform
dans mon cas, J'ai eu un problème à Jenkins quand il a essayé de le déployer dans le poulpe 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(String 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(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDirba9f2e0d5e4022\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(String fullPath, String relativeTo) in Z:\buildAgent\workDirba9f2e0d5e4022\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, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDirba9f2e0d5e4022\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\workDirba9f2e0d5e4022\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 avoir passé un certain temps, j'utilisais un composant développé à l'interne qui utilisait Microsoft.Net.Compilers
. La raison pour laquelle le composant interne utilisait Microsoft.Net.Compilers
était de surmonter ce problème ( c#: throw invalid expression compilation ) 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 compétent sur le programme principal, le Microsoft.Net.Compilers
obtenir ajouté lui-même automatiquement.
Solution
mon travail autour était, désinstaller suite à notre composant interne par (suite à la réponse @malikKhalil)
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
et a choisi le compilateur C# 7 dans Jenkins au lieu de C# 6 et reconstruire, c'est à vous assurer que tout fonctionne et construire correctement.
que finalement dans mon programme principal j'ai essayé de mettre à jour mon composant interne. Et tout ce que de construire de nouveau. Il a construit sans aucun problème ou des problèmes.
si vous ajoutiez ASPNETCOMPILER pour compiler vos vues de rasoir dans MVC, comme dans cette question de flux StackOverflow , puis changer PhysicalPath à l'endroit où le paquet Roslyn nuget est situé (généralement pointé via $CscToolPath variable):
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
le problème avec les modèles par défaut VS2015 est que le compilateur n'est pas réellement copié dans le répertoire {outdir}_PublishedWebsites\tfr\bin\roslyn\
, mais plutôt dans le répertoire {outdir}\roslyn\
. Cela est probablement différent de votre environnement local puisque AppHarbor
construit des applications en utilisant un répertoire de sortie au lieu de construire la solution "en place".
pour le corriger, ajouter ce qui suit vers la fin du fichier .csproj
juste après le bloc xml <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
Mise À Niveau De Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform de 1.0.0 à 1.0.1 fixe ceci pour moi.
entrez la description de l'image ici
vous devez installer Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform.BinFix, a été 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 paquet NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform
qui a ensuite supprimé:
-
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
de la paquet.fichier de configuration -
<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 noeud system.codedom
, vous pouvez voir pourquoi il a amené roslyn: compilerOptions="/langversion:6
ajouter PropertyGroup à votre .dossier csproj
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
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 ceci:
- sur mon projet d'installation, clic droit, afficher > système de fichiers
- créer un
bin/roslyn
dossier - Sélectionnez add > files et add all fichiers de
packages\Microsoft.Net.Compilers.1.3.2\tools
cela a résolu mon problème.
j'avais aussi le même problème en dirigeant le projet. voici les étapes que j'ai suivi.
- clic droit en solution
- choisir une solution propre
- après clean réussi, à nouveau construire votre projet
-
Exécuter à nouveau le projet
cette fois, je ne vois pas la même erreur . Cela fonctionne comme prévu
après avoir essayé toutes les corrections sans cigare Je l'ai corrigé en mettant à jour ce paquet Nuget dans Visual Studios:
Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform
Mine était de 1.0.0 à 2.0.0 Pour Référence (l'erreur n'apparaît plus)
"supprimez le dossier Bin dans votre explorateur de solutions et construisez à nouveau la solution. Cela résoudrait le problème
j'ai rencontré ce problème après avoir mis à jour certains paquets via NuGet. Une reconstruction (au lieu de la normale) a fonctionné pour moi.
j'ai eu le même problème après avoir mis à jour DotNetCompilerPlatform. Résolu en Redémarrant Visual Studio > Nettoyage de Projet > générer le Projet.
ma solution utilise Nuget pour mettre à jour les éléments ci-dessous à la dernière version: - Microsoft.Net.Compilateurs - Microsoft.CodeDom.Fournisseur.DotNetCompilerPlatform Puis reconstruit le projet. Puisque mon projet est un site web donc non *.fichier csproj. L'erreur ci-dessus apparaît lorsque j'essaie de visualiser un cshtml dans le navigateur.
l'erreur corrigée après les deux éléments ci-dessus mis à jour à la dernière version. Je suis en VS2015 et windows7 SP1
autre que la suppression de la Bin diretory de tous les projets à l'intérieur de la solution, supprimer les dossiers obj aussi.
dans la direction de la solution principale supprimer le dossier .vs
a fonctionné pour moi en essayant d'apporter un projet déjà fait dans une solution vierge créée sur git.
j'ai webproject sans fichier csproj et les solutions mentionnées ici n'ont pas fonctionné pour moi.
changer de cible. NET framework, réinstaller des paquets ( Update-Package -reinstall
) et ensuite construire le projet a fonctionné pour moi. Vous pouvez même changer le cadre de la cible après cette opération (faites en sorte que suere vous réinstalliez les paquets nuget après).
Problème
soyez conscient que le premier ministre NuGet brise le comportement de Rosalyn. Cliquez sur Tools > NuGet Package Manager > Manage NuGet Packages for Solution
si une mise à jour existe pour Microsoft.CodeDom.Providers.DotNetCompilerPlatform
, Microsoft.Net.Compilers
, ou Microsoft.Net.Compilers.netcore
, mettez-les à jour et la Solution cassera! Cela se produit parce que 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.
Fix
à la création du projet le $(WebProjectOutputDir)\bin
n'existe pas, donc quand Rosalyn est ajouté comme dépendance par NuGet il l'installe correctement. Après avoir mis à jour les paquets de solutions, le répertoire $(WebProjectOutputDir)\bin
ressemble à ceci:
$(WebProjectOutputDir)\bin\bin\rosalyn
la solution la plus simple est de couper et coller rosalyn à l'endroit approprié, puis supprimer le dossier supplémentaire bin
. Vous pouvez maintenant rafraîchir la page et le site se chargera.
j'ai dû changer les fichiers de projet WebAPI et MVC pour ne pas construire des vues:
<MvcBuildViews>false</MvcBuildViews>
cela a résolu mon erreur de serveur de compilation TFS 2015 avec roslyn. Toujours pas sûr de savoir pourquoi le scc.exe a été copié sur \bin\csc.exe, pourtant le processus de publication était à la recherche de \bin\Roslyn\csc.EXE...Je n'ai pas trouvé la transformation à l'origine de cette divergence.
j'ai connu cette erreur sur un serveur de compilation de Jenkins qui exécute MSBuild, qui affiche les fichiers de compilation dans un répertoire séparé (_PublishedWebsites). Exactement la même chose - le dossier roslyn n'était pas dans le répertoire bin, et tous les fichiers roslyn ont été regroupés avec les fichiers bin.
@igor-semin 's answer était la seule chose qui a fonctionné pour moi (comme j'utilise les fonctionnalités de langue C# 6, Je ne peux pas simplement désinstaller les paquets nuget selon autres réponses), mais comme j'exécute aussi CodeAnalysis, j'ai eu une autre erreur sur mon serveur cible de déploiement:
une tentative pour outrepasser un mapping existant a été détectée pour le type Microsoft.CodeAnalysis.ICompilationUnitSyntax avec nom "", actuellement associé au type Microsoft.CodeAnalysis.CSharp.Syntaxe.CompilationUnitSyntax, pour taper Microsoft.CodeAnalysis.VisualBasic.Syntaxe.CompilationUnitSyntax.
la raison pour laquelle c'est que comme les fichiers roslyn sont jetés dans le répertoire principal de la corbeille, lorsque vous lancez xcopy pour les recréer dans le dossier Roslyn imbriqué, vous avez maintenant 2 copies de ces fichiers en cours de compilation et il y a un conflit entre eux. Après beaucoup de frustration, j'ai décidé d'une correction de "hack" - une tâche post-construction supplémentaire pour supprimer ces fichiers du répertoire bin, en supprimant le conflit.
The .csproj de mes projets offensants ressemble maintenant à:
................... de plus ici ......................
<PropertyGroup>
<PostBuildEvent>
if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
</PostBuildEvent>
</PropertyGroup>
<Target Name="DeleteDuplicateAnalysisFiles" AfterTargets="AfterBuild">
<!-- Jenkins now has copies of the following files in both the bin directory and the 'bin\rosyln' directory. Delete from bin. -->
<ItemGroup>
<FilesToDelete Include="$(WebProjectOutputDir)\bin\Microsoft.CodeAnalysis*.dll" />
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
................... de plus ici ......................