Ich versuche, ein Asp.net MVC-Projekt auszuführen, das von der TFS-Quellcodeverwaltung abgerufen wurde. Ich habe alle Assemblyreferenzen hinzugefügt und kann ohne Fehler oder Warnung erfolgreich erstellen und kompilieren.
Aber ich bekomme folgenden Fehler im Browser:
Ein Teil des Pfads 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe' konnte nicht gefunden werden.
Hier ist ein vollständiger Screenshot der Fehlerseite.
Nach einigen Tagen der Recherche habe ich verstanden, dass Roslyn eine .NET-Compilerplattform ist, die erweiterte Kompilierungsfunktionen bietet. Ich verstehe jedoch nicht, warum mein Build versucht, \ bin \ roslyn \ csc.exe zu finden, da ich weder Roslyn konfiguriert habe noch beabsichtige, Roslyn in meinem Projekt zu verwenden.
.csproj
Datei behoben .Antworten:
Das Problem mit den Standardvorlagen für VS2015 besteht darin, dass der Compiler nicht in das Verzeichnis tfr \ bin \ roslyn \ kopiert wird, sondern in das Verzeichnis {outsir} \ roslyn \
Fügen Sie diesen Code in Ihre .csproj-Datei ein:
quelle
TL; DR
Führen Sie dies in der Package Manager-Konsole aus:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Mehr Informationen
Dieses Problem hängt nicht mit Visual Studio selbst zusammen. Antworten, die das Hinzufügen von Erstellungsschritten zum Kopieren von Dateien vorschlagen, sind daher eher eine Problemumgehung. Gleiches gilt für das manuelle Hinzufügen von Compiler-Binärdateien zum Projekt.
Der Roslyn-Compiler stammt aus einem NuGet-Paket und es gab / gab einen Fehler in einigen Versionen dieses Pakets (ich weiß nicht genau, welche). Die Lösung besteht darin, dieses Paket neu zu installieren / auf eine fehlerfreie Version zu aktualisieren. Ursprünglich, bevor ich die Antwort im Jahr 2015 schrieb, habe ich sie behoben, indem ich folgende Pakete in bestimmten Versionen installiert habe:
Dann habe ich in .csproj nachgesehen und sichergestellt, dass die Pfade zu Paketen (in meinem Fall .. \ .. \ packages \ *. *) In Tags
<ImportProject>
oben und<Target>
unten mit dem Namen "EnsureNuGetPackageBuildImports" korrekt sind. Dies ist unter MVC 5 und .NET Framework 4.5.2 möglich.quelle
Ihr Build versucht zu finden,
\bin\roslyn\csc.exe
da die folgenden Pakete zu Ihrem Projekt hinzugefügt wurden. Überprüfen Sie einfach Ihrepackages.config
Datei, Sie können beide dort habenWenn Sie nicht an der Verwendung von Roslyn interessiert sind, führen Sie die folgenden Schritte aus, um es zu löschen
1. Entfernen Sie NuGet-Pakete und verwenden Sie die folgenden Befehle in der Nuget Package Console
2. Danach sollte Ihre Datei web.config automatisch aktualisiert werden. Falls dies nicht der Fall ist, suchen Sie nach dem folgenden Code in der
web.config
Datei. Wenn er gefunden wird, löschen Sie diesen Code.quelle
Ein sauberer und umgebauter hat bei mir funktioniert!
quelle
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".
Hier ist eine MSBuild-Methode, um dies zu tun.
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.
quelle
Wie in einer Ausgabe im Roslyn-Projekt auf GitHub erwähnt , besteht eine Lösung (die für mich 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, als ich das Projekt neu geladen habe.
quelle
Ich habe diese Schritte befolgt und es hat perfekt funktioniert
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
quelle
Nachdem ich alle Korrekturen ohne Zigarre ausprobiert hatte, habe ich sie behoben, indem ich dieses Nuget-Paket in Visual Studios aktualisiert habe:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Meins war von 1.0.0 bis 2.0.0 als Referenz (Der Fehler wird nicht mehr angezeigt)
quelle
roslyn
Ordner in meinem Ausgabepfad erstellt. Ich sehe auch keine "Roslyn" -Referenz in meinem csproj. Es könnte sein, dass diesTarget Name="CopyRoslyn...
eine VS2015-Sache ist und in (der Version von) 2017, die ich habe, nicht notwendig ist. Bemerkenswert: Da ich DotnetCompilerPlatform aktualisiert habe, bevor ich mit dem Hinzufügen eines Kopierziels (dem von mir erwähnten) herumgespielt habe, habe ich ein saubereres csproj.quelle
Ctrl C
als ich gerade einen Zweiggit
auscheckte, und es hat mein Repo vermasselt.git reset --hard
hat nicht funktioniert, also musste ichgit clean -xdf
das Projekt neu aufbauen. Allerdings bin ich auf diesen Fehler gestoßen, also habe ich das Projekt einfach bereinigt und neu erstellt und es hat bei mir funktioniert.Sie müssen Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix installieren, das speziell für diesen Fehler erstellt wurde
quelle
Dadurch werden alle Abhängigkeiten und Dateien des Pakets (wie csc.exe) neu installiert.
quelle
Also, Rob Cannons Antwort war im Wesentlichen für mich, aber ich hatte eine Handvoll Optionen zwicken. 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 beim lokalen Ausführen NICHT leer.
quelle
Das Aktualisieren von Nuget-Paketen hat bei mir funktioniert Klicken Sie mit der rechten Maustaste auf die Lösung> NuGet-Pakete für die Lösung verwalten und aktualisieren Sie alle Pakete und insbesondere Microsoft.Net.Compilers und Microsoft.CodeDom.Providers.DotNetCompilerPlatform
quelle
Dies ist ein bekanntes Problem mit Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Ein Downgrade auf 1.0.5 hat dies für mich behoben.
quelle
Entfernen Sie für VS 2019 den folgenden Knoten vollständig:
quelle
Per 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
Ein Downgrade auf 1.0.3 hat dieses Problem für mich behoben.
quelle
In meinem Fall hatte ich ein Problem in Jenkins, als versucht wurde, es in Octopus mit folgendem Fehler bereitzustellen:
Ursache
Nachdem ich einige Zeit verbracht hatte, verwendete ich eine intern entwickelte Komponente, die verwendet wurde
Microsoft.Net.Compilers
. Der Grund, warum die interne Komponente verwendet wurde,Microsoft.Net.Compilers
war die Behebung dieses Problems ( C #: Kompilierung ungültiger Ausdrücke auslösen ) und wurde auf diese Weise gelöst ( Verwendung von C # 7 mit Visual Studio 2015? ). Wenn ich die Komponente im Hauptprogramm installiert habe, wirdMicrosoft.Net.Compilers
sie automatisch hinzugefügt.Lösung
Meine Problemumgehung bestand darin, von unserer internen Komponente zu deinstallieren (nach der Antwort von @malikKhalil)
Wählen Sie in Jenkins den C # 7-Compiler anstelle von C # 6 und erstellen Sie ihn neu, um sicherzustellen, dass alles ordnungsgemäß funktioniert und erstellt wird.
Als ich schließlich in meinem Hauptprogramm versuchte, meine interne Komponente zu aktualisieren. Und alles als wieder aufzubauen. Es hat ohne Probleme oder Probleme gebaut.
quelle
In meinem Fall musste ich nur in das Verzeichnis bin in Visual Studio Solution Explorer (Webanwendungsprojekt) wechseln 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 Erstellungsprozess auszulösen.
Der Roslyn-Ordner war standardmäßig nicht enthalten.
quelle
Ich hatte auch das gleiche Problem beim Ausführen des Projekts. Hier sind die Schritte, die ich befolgt habe.
Diesmal habe ich nicht den gleichen Fehler gesehen. Dies funktioniert wie erwartet.
quelle
Ein Upgrade
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
von 1.0.0 auf 1.0.1 hat dies für mich behoben.quelle
Öffnen Sie die Projektdatei und entfernen Sie alle Verweise mit Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....
Öffnen Sie web.config und entfernen Sie alle Compilerattribute von system.codedom
quelle
Wie bereits angemerkt /programming/32780315#34391473 , die schnelle Lösung den Paket - Manager zu verwenden ist,
Tools
>Nuget Package Manager
>Package Manager Console
, laufenEine alternative Lösung (die Ihre Pakete automatisch und unbeaufsichtigt neu erstellt, wenn sie fehlen) besteht darin, ein Attribut aus der
Web.config
Datei Ihres Projekts zu entfernen .(
Web.config
befindet sich im selben Verzeichnis wie Ihre.csproj
Datei.)Öffnen Sie die
Web.config
Datei in einem Texteditor (oder in Visual Studio).- Im Tag
configuration
>system.codedom
>compilers
>compiler language="c#;cs;csharp"
, entfernen Sie vollständig dastype
Attribut.Kurz gesagt, entfernen Sie die Zeile, die mit beginnt
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft
.(Vermutlich funktioniert das gleiche Update sowohl für Visual Basic als auch für Csharp, aber ich habe es nicht ausprobiert.)
Visual Studio kümmert sich um den Rest. Nicht mehr
Server Error in '/' Application
.In dem Beispielcode, den ich oben in der Zip-Datei angegeben habe, erhalten Sie jetzt,
HTTP Error 403
wenn Sie Ctrl+ drücken F5.Versuchen Sie,
http://localhost:64195
in Ihrem Webbrowser durch zu ersetzenhttp://localhost:64195/api/products
.Die Web-API wird jetzt wie folgt angezeigt:
Als Provokation habe ich versucht, das gesamte
package
Verzeichnis meiner Visual Studio-Lösung zu entfernen .Es wurde automatisch und stillschweigend neu erstellt, sobald ich es (neu) gebaut habe.
Zu guter Letzt gibt es hier Code, der den Fehler reproduziert: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Ursprünglich von https://github.com/aspnet/AspNetDocs/tree/master/aspnet / Web-API / Übersicht / Erweitert / Aufrufen einer Web-API von einem Netz-Client / Beispiel / Server / ProdukteApp )
quelle
In meinem Fall hat das Löschen von allem im Ordner bin und das Neukompilieren die ganze Arbeit für mich erledigt.
quelle
Wenn Sie ASPNETCOMPILER hinzugefügt haben, um Ihre Razor-Ansichten in MVC zu kompilieren, wie in dieser StackOverflow-Frage , ändern Sie PhysicalPath an die Stelle, an der sich das Roslyn-Nuget-Paket befindet (normalerweise über die Variable $ CscToolPath ):
quelle
Das Problem mit den Standard-VS2015-Vorlagen besteht darin, dass der Compiler nicht in das
{outdir}_PublishedWebsites\tfr\bin\roslyn\
Verzeichnis, sondern in das{outdir}\roslyn\
Verzeichnis kopiert wird . Dies unterscheidet sich wahrscheinlich von Ihrer lokalen Umgebung, daAppHarbor
Apps mithilfe eines Ausgabeverzeichnisses erstellt werden, anstatt die Lösung "direkt" zu erstellen.Um dies zu beheben, fügen Sie am Ende der
.csproj
Datei direkt nach dem XML-Block Folgendes hinzu<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
Referenz: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
quelle
In meinem Fall gab es ähnlich wie in Basim ein NuGet-Paket, das dem Compiler mitteilte, dass wir C # 6 brauchten, was wir nicht taten.
Wir mussten das NuGet-Paket entfernen
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
das dann entfernt wurde:<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
aus der Datei 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>
Im
system.codedom
Knoten können Sie sehen, warum Roslyn hereingebracht wurde:compilerOptions="/langversion:6
quelle
Löschen Sie den Ordner Bin in Ihrem Lösungs-Explorer und erstellen Sie die Lösung erneut. Das würde das Problem lösen
quelle
Ich hatte das gleiche Problem bei der Installation meiner Anwendung auf dem Server, als auf localhost alles einwandfrei funktionierte.
Keine dieser Lösungen hat funktioniert, ich hatte immer den gleichen Fehler:
Am Ende habe ich das gemacht:
bin/roslyn
Ordnerpackages\Microsoft.Net.Compilers.1.3.2\tools
Dies löste mein Problem.
quelle
Starten Sie Windows neu.
Dies ist die einzige Lösung, die für mich funktioniert hat, nachdem ich versucht habe,
bin
Visual Studio neu zu erstellen, Inhalte zu löschen und neu zu erstellen und neu zu starten.Dies ist ein weiteres Beispiel dafür, wie schrecklich C # /. NET-Build-Tools sind.
Ich denke (nach dem Lesen vieler Antworten) ist die allgemeine Schlussfolgerung, dass die Ursache und Lösung dieses Problems stark vom Setup und Projekt abhängt. Wenn also eine Antwort nicht funktioniert, versuchen Sie es einfach mit einer anderen. Probieren Sie zunächst nicht störende / zerstörerische Lösungen aus, z. B. einen Neustart von Visual Studio, einen Neustart, eine Neuerstellung usw., bevor Sie mit NuGet-Paketen herumspielen oder Entwicklungstools neu installieren. Viel Glück!
(HINWEIS: Die Verwendung von Visual Studio 2019 und der Projektdatei wurde ursprünglich in Visual Studio 2015 erstellt. Möglicherweise hilft dies jemandem, das Problem zu untersuchen.)
(BEARBEITEN: Kann dies daran liegen, dass nach der Installation / Änderung der Visual Studio-Installation oder der Aktualisierung von Visual Studio kein Neustart durchgeführt wird, wenn das Installationsprogramm zum Neustart auffordert?)
quelle
Ich habe ein Webprojekt ohne csproj-Datei und die hier erwähnten Lösungen haben bei mir nicht funktioniert.
Das Ändern des Ziel-.NET-Frameworks, das Neuinstallieren von Paketen (
Update-Package -reinstall
) und das anschließende Erstellen des Projekts haben bei mir funktioniert. Sie können das Ziel-Framework nach diesem Vorgang sogar wieder ändern (stellen Sie sicher, dass Sie die Nuget-Pakete danach erneut installieren).quelle
update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall