webentwicklung-frage-antwort-db.com.de

Konnte keinen Teil des Pfads finden ... bin\roslyn\csc.exe

Ich versuche, das von der TFS-Quellcodeverwaltung abgerufene Asp.net-MVC-Projekt auszuführen. Ich habe alle Assemblyreferenzen hinzugefügt und ich kann erfolgreich ohne Fehler oder Warnung bauen und kompilieren.

Ich erhalte jedoch folgende Fehlermeldung im Browser:

Konnte keinen Teil des Pfads finden "C:\B8akWorkspace\B8akProject\B8akSolution\B8AK.Portal\bin\roslyn\csc.exe".

Hier ist ein vollständiger Screenshot der Fehlerseite.

 enter image description here

Nach ein paar Tagen der Recherche habe ich verstanden, dass Roslyn eine .Net-Compiler-Plattform ist, die erweiterte Kompilierungsfunktionen bietet. Ich verstehe jedoch nicht, warum mein Build versucht,\bin\roslyn\csc.exe zu finden, weil ich nichts in Bezug auf Roslyn konfiguriert habe und Roslyn in meinem Projekt verwenden möchte.

382
Eyad

Das Problem bei den Standardvorlagen von VS2015 ist, dass der Compiler nicht wirklich in das Verzeichnis tfr\bin\roslyn\kopiert wird, sondern in das Verzeichnis {outdir}\roslyn \

Fügen Sie diesen Code in Ihre .csproj-Datei ein:

<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>
209
Mitchell

In meinem Fall bestand die Lösung darin, Nuget-Pakete neu zu installieren/zu aktualisieren:

  • Microsoft.Net.Compilers 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

Dann schaute ich in .csproj nach und stellte sicher, dass die Pfade zu Paketen (in meinem Fall ..\..\packages\*. *) Innerhalb der Tags <ImportProject> oben und in <Target> mit dem Namen "EnsureNuGetPackageBuildImports" unten korrekt sind. Dies ist auf MVC 5 und .NET Framework 4.5.2.

Kurze Antwort - Führen Sie dies in der Package Manager Console aus:

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

475
andy250

Ihr Build versucht, \bin\roslyn\csc.exe zu finden, da folgende Pakete in Ihrem Projekt hinzugefügt wurden. Überprüfen Sie Ihre packages.config-Datei. Sie können beide dort haben

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers

Was ist Roslyn und Who hat sie (Pakete) in project hinzugefügt: Wenn Sie .net Framework 4.5.2 zum Erstellen von Projekten verwenden Mit VS2015 haben Sie möglicherweise bemerkt, dass die Projektvorlagen .__ verwenden. Roslyn standardmäßig. Eigentlich gehört Roslyn zu open-source Compiler für .NET-Sprachen von Microsoft.

Warum sollten wir Roslyn löschen: Wenn Ihr Projekt über Roslyn-Referenzen verfügt und Sie daran interessiert sind, Wenn Sie keinen Server verwenden, werden auf der Website so viele unerwünschte Fehler angezeigt Hosting-Provider haben ihre Server immer noch nicht aktualisiert und tun dies Roslyn nicht unterstützen. Um dieses Problem zu beheben, müssen Sie die .__ entfernen. Roslyn-Compiler aus der Projektvorlage.

wenn Sie nicht an Roslyn interessiert sind,Befolgen Sie die folgenden Schritte, um sie zu löschen.

1. Entfernen Sie Nuget-Pakete, verwenden Sie die folgenden Befehle aus der Nuget Package Console 

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

2. Nachdem Sie dies getan haben, sollte Ihre web.config-Datei automatisch aktualisiert werden. Ist dies nicht der Fall, suchen Sie nach dem folgenden Code in der Datei web.config. Wenn Sie ihn finden, löschen Sie diesen 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=\&quot;Web\&quot; /optionInfer+"></compiler>
    </compilers>
</system.codedom>
137
Malik Khalil

Hier ist eine weitere MSBuild-Methode. 

<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>

Ich stelle jedoch fest, dass sich die roslyn-Dateien auch in meinem bin-Verzeichnis befinden (nicht in einem Ordner). Die App scheint jedoch zu funktionieren.

54
Rob Cannon

Ein sauberer und neuer Aufbau funktionierte für mich!

Edit: Kommentatoren sagen, dass der saubere Schritt nicht notwendig ist. Sie können einfach wieder aufbauen.

48
pipedreambomb

NuGet Package Manager

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix muss installiert werden

15
Adrian Berca

Also, Rob Cannons Antwort funktionierte im Wesentlichen für mich, aber ich musste eine Handvoll Optionen anpassen. Insbesondere musste ich die Bedingung auf dem Ziel entfernen und das Include-Attribut ändern, da $ CscToolPath leer war, als das Projekt auf unserem Build-Server erstellt wurde. Seltsamerweise war $ CscToolPath bei lokaler Ausführung NICHT leer.

<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>
11
jonnybot

Nachdem ich alle Korrekturen ohne Zigarre ausprobiert hatte, habe ich das Problem behoben, indem ich dieses Nuget-Paket in Visual Studios aktualisiert habe:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Mine war von 1.0.0 bis 2.0.0 als Referenz (Der Fehler wird nicht mehr angezeigt)

11
josh.thomson

Dies ist ein bekanntes Problem mit Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Ein Downgrade auf 1.0.5 hat dieses Problem behoben.

9
jrummell

Zu einem Kommentar von Daniel Neel oben: 

version 1.0.3 des Microsoft.CodeDom.Providers.DotNetCompilerPlatform-Nuget-Pakets funktioniert für mich, aber Version 1.0.6 verursacht den Fehler in dieser Frage

Durch das Downgrade auf 1.0.3 wurde dieses Problem für mich behoben. 

8
Jason Coyne

In meinem Fall musste ich nur in das bin-Verzeichnis in Visual Studio Solution Explorer (Webanwendungsprojekt) gehen und das roslyn-Projekt direkt einschließen. Klicken Sie mit der rechten Maustaste auf den Ordner und wählen Sie In Projekt einschließen. Überprüfen Sie die Lösung erneut, um den Build-Prozess auszulösen.

Der Roslyn-Ordner wurde standardmäßig nicht eingeschlossen.

8

Das Aktualisieren von Nuget-Paketen funktionierte für mich Klicken Sie mit der rechten Maustaste auf die Lösung> NuGet-Pakete verwalten für Lösung Und aktualisieren Sie alle Pakete und insbesondere: Microsoft.Net.Compilers Und Microsoft .CodeDom.Providers.DotNetCompilerPlatform

8
hichamkazan

Ich bin diesen Schritten gefolgt und es hat perfekt funktioniert

  • Löschen Sie alle Ordner bin und obj 
  • Lösung reinigen und neu aufbauen
  • Führen Sie diesen Befehl in Powershell aus

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

6

In meinem Fall hatte ich ein Problem mit Jenkins, als es versuchte, es mit folgendem Fehler in Octopus bereitzustellen:

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\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(String fullPath, String 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, String sourceBaseDirectory, String targetDirectory, String 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

Ursache

Nach einiger Zeit verwendete ich eine intern entwickelte Komponente, die Microsoft.Net.Compilers verwendete. Der Grund, warum die interne Komponente Microsoft.Net.Compilers verwendete, bestand darin, dieses Problem zu beheben ( C #: Ungültige Ausdruckskompilierung ) und wurde auf diese Weise gelöst ( Verwendung von c # 7 mit Visual Studio 2015? ). Dies führt dazu, dass, wenn ich den Sachbearbeiter im Hauptprogramm installiert habe, der Microsoft.Net.Compilers automatisch hinzugefügt wird.

Lösung

Meine Problemumgehung war, deinstalliere folgend von unserer internen Komponente aus (nach @malikKhalil Antwort)

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

Und wählte den C # 7-Compiler in Jenkins anstelle von C # 6 und re -build, um sicherzustellen, dass alles funktioniert und korrekt aufgebaut wird.

Schließlich habe ich in meinem Hauptprogramm versucht, meine interne Komponente zu aktualisieren. Und alles wieder bauen. Es hat ohne Probleme oder Probleme gebaut.

Öffnen Sie die Projektdatei und remove alle Referenzen mit Import Project = "..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....

Öffnen Sie die Attribute web.config und remove all system.codedom compiler

6
user6326076

Das Problem bei den Standardvorlagen von VS2015 ist, dass der Compiler nicht wirklich in das Verzeichnis {outdir}_PublishedWebsites\tfr\bin\roslyn\ kopiert wird, sondern in das Verzeichnis {outdir}\roslyn\. Dies unterscheidet sich wahrscheinlich von Ihrer lokalen Umgebung, da AppHarbor Apps mithilfe eines Ausgabeverzeichnisses erstellt, anstatt die Lösung "in-place" zu erstellen.

Um dies zu beheben, fügen Sie Folgendes am Ende der .csproj-Datei direkt nach dem XML-Block <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target> ein.

<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>

Referenz: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-projekt-generierte-von-vstudio-2015-enterprise

5
Korayem

Wenn Sie ASPNETCOMPILER hinzugefügt haben, um Ihre Razor-Ansichten in MVC zu kompilieren, wie in dieser StackOverflow-Frage , dann ändern Sie PhysicalPath in den Ort, wo sich das Roslyn-Nuget-Paket befindet (normalerweise über die Variable $ CscToolPath):

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />

5

Das Aktualisieren von Microsoft.CodeDom.Providers.DotNetCompilerPlatform von 1.0.0 auf 1.0.1 hat dieses Problem behoben.

5
Ben

In meinem Fall gab es, ähnlich wie bei Basim, ein NuGet-Paket, das dem Compiler mitteilte, wir brauchten C # 6, was wir jedoch nicht benötigten.

Wir mussten das NuGet-Paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform entfernen, das dann entfernt wurde:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> aus der Datei packages.config
  2. <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> </system.codedom>

Im system.codedom-Knoten können Sie sehen, warum es roslyn eingeführt hat: compilerOptions="/langversion:6

4
Mark C.
  1. Saubere Lösung
  2. Rebuild Solution, Diese beiden Schritte haben bei mir funktioniert.
4
nischa

Ich habe ein Webprojekt ohne Csproj-Datei und Lösungen, die hier erwähnt werden, haben bei mir nicht funktioniert.

Ziel-.NET-Framework ändern, Pakete erneut installieren (Update-Package -reinstall) und dann das Projekt erstellen, das für mich funktioniert hat. Sie können das Zielframework nach dieser Operation sogar wieder ändern (stellen Sie sicher, dass Sie die Nuget-Pakete erneut installieren). 

3
Miroslav Adamec

Starten Sie Windows neu.

Dies ist die einzige Lösung, die für mich funktioniert hat, nachdem ich versucht habe, neu zu erstellen, den Inhalt von bin zu löschen und neu zu erstellen, und Visual Studio neu zu starten.

Dies ist ein weiteres Beispiel dafür, wie schrecklich C # /. NET-Build-Tools sind.

Ich denke, nachdem ich viele der Antworten gelesen habe, ist die allgemeine Schlussfolgerung, dass die Ursache und Lösung dieses Problems stark von der Einrichtung und dem Projekt abhängt. Wenn eine Antwort nicht funktioniert, versuchen Sie es einfach mit einer anderen. Aufdringliche/destruktive Lösungen wie Neustarten von Visual Studio, Neustarten, Neuerstellen usw. ZUERST, bevor Sie mit NuGet-Paketen herumspielen oder Entwicklungstools neu installieren. Viel Glück!

(HINWEIS: Wenn Sie Visual Studio 2019 verwenden und die Projektdatei ursprünglich in Visual Studio 2015 erstellt wurde. Vielleicht hilft dies jemandem, das Problem zu untersuchen.)

(BEARBEITEN: Kann dies daran liegen, dass der Computer nach der Installation/Änderung der Visual Studio-Installation oder dem Aktualisieren von Visual Studio nicht neu gestartet wird, wenn das Installationsprogramm zum Neustart auffordert?)

3
Florian Winter

Ich hatte das gleiche Problem bei der Installation meiner Anwendung auf dem Server, als alles perfekt auf localhost funktionierte.

Keine dieser Lösungen war falsch, ich hatte immer den gleichen Fehler:

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

Ich endete damit: 

  • klicken Sie in meinem Setup-Projekt mit der rechten Maustaste auf Ansicht> Dateisystem
  • erstellen Sie einen bin/roslyn-Ordner
  • wählen Sie Hinzufügen> Dateien und fügen Sie alle Dateien aus packages\Microsoft.Net.Compilers.1.3.2\tools hinzu.

Das hat mein Problem gelöst.

3
Alexandre Hamon

Ich hatte auch das gleiche Problem während der Durchführung des Projekts. Hier sind die Schritte, die ich befolgt habe.

  1. Klicken Sie mit der rechten Maustaste in die Lösung
  2. wählen Sie Lösung reinigen 
  3. Nachdem die Reinigung erfolgreich abgeschlossen wurde, erstellen Sie erneut Ihr Projekt
  4. Führen Sie das Projekt erneut aus

    Diesmal sehe ich nicht den gleichen Fehler. Das funktioniert wie erwartet

3
Narendra

Fügen Sie Ihrer .csproj-Datei PropertyGroup hinzu 

<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>
2
Igor Semin

Löschen Sie den Ordner Bin in Ihrem Projektmappen-Explorer und erstellen Sie die Projektmappe erneut. Das würde das Problem lösen

2
user1903050

Dieses Problem trat auf, nachdem ich einige Pakete über NuGet aktualisiert hatte. Ein Umbau (anstelle eines normalen Builds) hat für mich funktioniert.

1
Helen

meine Lösung verwendet Nuget, um folgende Elemente auf die neueste Version zu aktualisieren: - Microsoft.Net.Compilers - Microsoft.CodeDom.Providers.DotNetCompilerPlatform Erstellen Sie anschließend das Projekt neu. Da mein Projekt eine Website ist, gibt es keine * .csproj-Datei. Die obige Fehlermeldung erscheint, wenn ich versuchte, eine cshtml im Browser anzuzeigen.

Der Fehler wurde behoben, nachdem die beiden obigen Elemente auf die neueste Version aktualisiert wurden. Ich bin in VS2015 und Windows7 SP1

1
Penny

Zu Ihrer Information ...

Ab dem 31.08.2017 ist ein Upgrade auf Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7 möglich.

1
Prisoner ZERO

Wie in ein Problem im Roslyn-Projekt auf GitHub erwähnt, besteht eine Lösung (die bei mir funktioniert hat) darin, das Projekt einfach in Visual Studio zu entladen und neu zu laden.

Der Ordner "bin\roslyn" wurde erst beim Erstellen oder erneuten Erstellen erstellt, nachdem ich das Projekt neu geladen habe.

1

Ich hatte das gleiche Problem nach dem Update von DotNetCompilerPlatform . Gelöst durch Neustarten von Visual Studio> Projekt reinigen> Projekt erstellen.

1
Uhha

Ich hatte diesen Fehler für Microsoft.CodeDom.Providers.DotNetCompilerPlatform1.06, aber auch mit 1.0.7, der für @PrisonerZERO funktionierte. Als Microsoft jedoch 1.0.8 2017-10-18 veröffentlichte, funktionierte es endlich wieder für mich und ich musste kein Downgrade durchführen.

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

1
Ogglas

Löschen Sie neben dem Löschen des Bin-Verzeichnisses aus allen Projekten innerhalb der Projektmappe auch die obj-Ordner.

Entfernen Sie im Hauptlösungsverzeichnis den Ordner .vs

Arbeitete für mich, als ich versuchte, ein bereits erledigtes Projekt in eine auf git erstellte leere Lösung zu bringen.

1
Erik Silva

Dieser Fehler ist auf einem Jenkins-Build-Server mit MSBuild aufgetreten, der die Build-Dateien in einem separaten Ordner (_PublishedWebsites) ausgibt. Genau das Gleiche - der Roslyn-Ordner befand sich nicht im Bin-Verzeichnis, und alle Roslyn-Dateien wurden mit den Bin-Dateien in einem Ordner zusammengefasst.

@ igor-semins Antwort war das einzige, was für mich funktionierte (da ich die C # 6-Sprachfeatures verwende, kann ich die Nuget-Pakete nicht einfach wie andere Antworten deinstallieren), aber da ich auch CodeAnalysis verwende , Ich habe einen weiteren Fehler auf meinem Implementierungszielserver erhalten: 

Ein Versuch, eine vorhandene Zuordnung zu überschreiben, wurde für den Typ Microsoft.CodeAnalysis.ICompilationUnitSyntax mit dem Namen "" erkannt, der derzeit dem Typ Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax zugeordnet ist, um Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax einzugeben. 

Der Grund dafür ist, dass die roslyn-Dateien in das Hauptverzeichnis von bin geladen werden, wenn Sie xcopy ausführen, um sie im verschachtelten roslyn-Ordner neu zu erstellen. Jetzt werden 2 Kopien dieser Dateien kompiliert, und es kommt zu einem Konflikt . Nach viel Frustration entschied ich mich für eine "Hack" -Lösung - eine zusätzliche Aufgabe nach dem Build, um diese Dateien aus dem bin-Verzeichnis zu löschen und den Konflikt zu entfernen. 

Der .csproj meiner beleidigenden Projekte sieht jetzt so aus:

................... mehr hier ......................

 <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>

................... mehr hier ......................

0
Ciaran

Viele dieser Antworten beziehen sich auf die Nuget-Pakete und/oder auf das Bereinigen und Neuladen Ihres Projekts.

Wenn Sie WCF-Dienstreferenzen und ungültige Endpunkte haben, können Sie auch diese Fehlermeldung erhalten. Stellen Sie sicher, dass Ihre Endpunkte korrekt sind, und aktualisieren Sie die Dienstkonfiguration mit dem richtigen Endpunkt in der .config-Datei und wenn Sie die Dienstreferenz über die GUI konfigurieren.

 Image of Service Reference Configuration GUI

0
GibralterTop

In meiner Situation möchte unser Team den Ordner "packages" nicht behalten, daher legen wir alle DLLs in einem anderen Verzeichnis wie "sharedlib" ab.

Ich habe build event verwendet, um dieses Problem zu lösen.

if "$(ConfigurationName)" == "Release" (
goto :release
) else (
goto:exit
)

:release
if not exist $(TargetDir)\roslyn mkdir $(TargetDir)\roslyn

copy /Y "$(ProjectDir)..\..\Shared Lib\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\tools\Roslyn45\*" "$(TargetDir)\roslyn"
goto :exit

:exit
0
Ray Chung

Dies kann auf folgende einfache Weise erfolgen:

  • Erstellen Sie ein neues Projekt eines ähnlichen Typs an einem beliebigen Ort in Ihrem System. Erstellen Sie es und kopieren Sie es über den Ordner roslyn in Ihr bin-Verzeichnis.

Die Antwort hiervon unterscheidet sich für das Website-Projekt und das Webanwendungsprojekt .. Das zugrunde liegende Problem ist dasselbe, dass das NuGet-Paket auf verschiedenen Rechnern anders verhält. Es kann sich um ein Rechteproblem handeln oder um eine Ausführungsrichtlinie, die das Kopieren in den Bin-Ordner verhindert Wie Sie wissen, ist Roslyn ein neuer Compiler. Sie sollten es im Bin-Ordner für diese Projekte haben Gehen Sie zu Ihrer Website. NuGet-Pakete, überprüfen Sie diesen Ordner Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \code\packages\Microsoft.CodeDom .Providers.DotNetCompilerPlatform.2.0.0 Sehen Sie es? Können Sie den Code\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\tools\RoslynLatest darin sehen Dieser Ordner sollte jetzt beim Kompilieren unter bin wie folgt auf Ihre Website kopiert werden .\code\WebSite1\Bin\Roslyn Einige davon, wie dies für Sie nicht möglich ist . Versuchen Sie, Visual Studio als Admin ..__ auszuführen. Kopieren Sie den Roslyn-Ordner manuell . Deinstallieren Sie das NuGet-Paket ..__ und installieren Sie es. Denken Sie daran, dass dieses Paket Ihren Ordner kompiliert. Wenn dies nicht der Fall ist, können Sie nichts kompilieren. Sie können also auch nichts hinzufügen. Versuchen Sie, dieses Paket in die Offline-Version zu kopierentools -> Optionen-> Nuget-Paket-Manager-> Paketquelle- > Microsoft Visual Studio-Offline-Pakete C:\Programme (x86)\Microsoft SDKs\NuGetPackages

0
Jin Thakur

Ich hatte diesen Fehler, nachdem ich eine Lösung und einige enthaltene Projekte umbenannt und mit dem Entfernen von Nuget-Paketen herumgespielt hatte. Ich verglich das neue Projekt mit dem letzten Arbeitsprojekt und stellte fest, dass die folgenden Zeilen fehlten und wieder eingefügt werden mussten:

  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

Dadurch wurde das Problem für mich gelöst.

0
TTT

Ich bin auf dieses Problem mit der Veröffentlichungspipeline gestoßen (die ein _PublishedWebsites-Verzeichnis erzeugt) und habe dies als Ziel im Projekt verwendet:

<Target Name="CopyRoslynCompilerFilesToPublishedWebsitesDirectory" AfterTargets="AfterBuild" Condition="Exists('$(OutDir)\_PublishedWebsites\$(TargetName)')">
    <Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)\_PublishedWebsites\$(TargetName)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
</Target>

Der Nachteil ist, dass es zwei Kopien der Roslyn-Dateien in der Ausgabe gibt.

0
EKW

Problem

Beachten Sie, dass NuGet PM das Rosalyn-Verhalten bricht. Klicken Sie auf Tools > NuGet Package Manager > Manage NuGet Packages for Solution, Wenn ein Update für Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Microsoft.Net.Compilers Oder Microsoft.Net.Compilers.netcore, Aktualisieren Sie sie und die Lösung bricht ab! Dies liegt daran, dass für die ASP Sites-Vorlagen die Verwendung bestimmter Versionen bei der Projekterstellung festgelegt wurde. Um das Problem anzuzeigen, klicken Sie in der Lösung auf Alle Dateien anzeigen Forscher.

Fix

Bei der Projekterstellung ist die Funktion $(WebProjectOutputDir)\bin nicht vorhanden. Wenn Rosalyn von NuGet als Abhängigkeit hinzugefügt wird, wird sie daher ordnungsgemäß installiert. Nach dem Aktualisieren der Lösungspakete sieht das Verzeichnis $(WebProjectOutputDir)\bin folgendermaßen aus:

$(WebProjectOutputDir)\bin\bin\rosalyn

Die einfachste Lösung besteht darin, rosalyn auszuschneiden und an der richtigen Stelle einzufügen und dann den zusätzlichen Ordner bin zu löschen. Sie können jetzt die Seite aktualisieren und die Site wird geladen.

0
eyoung100
  • Klicken Sie mit der rechten Maustaste auf Ihr Projekt, und wählen Sie Nuget-Pakete verwalten aus
  • Suchen Sie nach "Microsoft.CodeDom.Providers.DotNetCompilerPlatform".
  • Aktualisieren Sie einfach auf eine ältere oder neuere Version (egal welche), und aktualisieren Sie dann wieder auf Ihre ursprüngliche Version.

Dadurch werden alle Abhängigkeiten und Dateien des Pakets (wie csc.exe) neu installiert.

 Nuget - DotNetCompilerPlatform

0
Bojan

Ich musste die WebAPI- und MVC-Projektdateien ändern, um keine Ansichten zu erstellen: 

<MvcBuildViews>false</MvcBuildViews>

Dies hat meinen TFS 2015 Build Server-Fehler mit Roslyn behoben. Immer noch nicht sicher, warum csc.exe nach\bin\csc.exe kopiert wurde, der Veröffentlichungsprozess suchte jedoch nach\bin\Roslyn\csc.exe. 

0
Robert J. Good

In meinem Fall hatte ich dieses Problem, als ich zwei Visual Studio IDE gleichzeitig laufen ließ. Die Lösung bestand also darin, das Projekt zu säubern und die andere Instanz zu schließen.

0
Badr Bellaj

In meinem Fall hat das Löschen von allem im Ordner bin und das erneute Kompilieren die ganze Arbeit für mich erledigt.

Viel Glück für alle, die dieses Problem haben.

0
Juan Martí