Website ohne Roslyn veröffentlichen

90

Ich versuche, eine Webanwendung mit Visual Studio 2015 und .NET 4.5.1 zu erstellen. Wenn ich die Website veröffentliche, erstellt Visual Studio einen Ordner mit dem Namen roslyn.

Geben Sie hier die Bildbeschreibung ein

Ich weiß, dass es verwendet wird, um Code im laufenden Betrieb zu kompilieren, aber leider erlaubt mir mein Hosting-Anbieter nicht, den Compiler auf seinem Server auszuführen.

Wie kann ich die Website ohne roslynvorherige Version von Visual Studio veröffentlichen?

BEARBEITEN: Ich habe diesen Fehler beim Zugriff auf meine Website erhalten.

Geben Sie hier die Bildbeschreibung ein

Es scheint, dass IIS versucht, etwas auszuführen, roslyn\csc.exeaber mein Benutzerkonto hat keine Berechtigung dazu. In früheren Versionen von Visual Studio wird dieser Fehler nicht angezeigt.

Niyoko Yuliawan
quelle
Außerdem ist Roslyn nur eine Reihe von DLLs. Der Gastgeber kann nicht wissen oder sich darum kümmern, was er tut.
SLaks
3
@Slaks IIS versucht, csc.exe auszuführen. Siehe Bearbeiten.
Niyoko Yuliawan
Wenn Sie Plesk verwenden, können Sie den "dedizierten IIS-Anwendungspool für Ihre Websites" deaktivieren, ohne diese Pakete entfernen zu müssen!
Vahid Amiri

Antworten:

182

Ich habe gerade das gleiche Problem konfrontiert. Wenn Sie ein neues Webprojekt erstellen, werden Ihrem Projekt automatisch zwei Nuget-Pakete hinzugefügt. Wenn Sie sie entfernen, sollte Ihr Problem gelöst sein. Paketnamen sind: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " und " Microsoft.Net.Compilers ".

Kemal Kefeli
quelle
Dies hat funktioniert und ist für Webhosting-Anbieter von Drittanbietern geeignet. Haben Sie zwei Fragen dazu: 1) Kann das Entfernen dieser Nuget-Pakete das Produkt in irgendeiner Weise beeinflussen? 2) Können diese Pakete aus der Projektvorlage selbst entfernt werden, um diese Übung jedes Mal zu vermeiden?
Nura
1) Es gibt keine Auswirkungen auf den Workflow oder die Logik des Produkts. Die von @ Ajay2707 bereitgestellte URL ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ) besagt jedoch, dass dieses Paket die Ladezeit der Seite beeinflusst. 2) Ich weiß nicht, wie du das machen kannst, aber wenn du kannst, sollte es kein Problem geben.
Kemal Kefeli
3
Beide NuGet-Pakete wurden entfernt. Konfigurationsdeklaration entfernt. Dieser Ordner wird noch beim Kompilieren oder Veröffentlichen erstellt. Das einzige NuGet-Paket, das meine Anwendung verwendet, ist "Newtonsoft.Json". Muss ich es auch deinstallieren?
Ranjan Kumar
8
Beachten Sie, dass das Entfernen dieser Pakete die Verwendung von C # 6-Funktionen beeinträchtigt. Dies könnte gelöst werden, indem das Kontrollkästchen "Zulassen, dass vorkompilierte Site aktualisiert werden kann"
deaktiviert wird,
9
@RanjanKumar: Öffnen Sie Ihre csproj-Datei in einem Texteditor und entfernen Sie die Knoten, die den in Kemals Antwort beschriebenen NuGet-Paketen entsprechen. Dies kann ImportKnoten, TargetKnoten (EnsureNugetPackageBuildImports) und ReferenceKnoten umfassen. Entfernen Sie auch den <system.codedom>Knoten Ihrer web.config.
Brian
16

Ich hatte das gleiche Problem. Folgen Sie den Schritten von hier . Grundsätzlich:

  1. Deinstallieren Sie das Paket

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. Deaktivieren Sie in Ihren Veröffentlichungsprofileinstellungen das Kontrollkästchen "Vorkompilierte Site aktualisieren lassen". Sie finden dies unter Einstellungen> Beim Veröffentlichen vorkompilieren> konfigurieren

Midas
quelle
7
Auf diese Weise können Sie C # 6-Funktionen nicht in Ansichten verwenden.
RokX
2

Nachdem ich das gleiche ausgestellte Gesicht gesucht hatte, kam ich gerade hierher. Ich habe die obige Antwort gelesen, die richtig ist.

Ich gebe die Antwort, denn hier ist der gute Artikel zu erklären:

  1. Warum hat der Veröffentlichungscode diese Exe- und Entwicklungsumgebung?
  2. Was ist der Vorteil und wie zu entfernen?

Dies ist auch der sehr gute Artikel über die Geschichte dieser Exe

Ajay2707
quelle
2

Nach unzähligen Anstrengungen .... und laut dieser Website . Ich finde, dass Sie /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falsein MSBuild verwenden können, um web.config zu transformieren, dies schließt auch den Roslyn-Compiler in den Build ein. Die Ausgabe entspricht der Ausgabe, die Sie durch Veröffentlichen in Visual Studio im Dateisystem erhalten

code4j
quelle
Ich kann den Artikel auf dem Website-Link nicht verstehen, aber wenn Sie Ihren Rat befolgen, um die Build-Parameter in MSBuild hinzuzufügen, funktioniert dies. Wie Sie sagten, ist die Ausgabe dieselbe wie beim Veröffentlichen im Dateisystem. Vielen Dank
Bruce
2

Es gibt einen offenen Fehler im Roslyn-Repository zu diesem Problem.

In meinem Fall musste ich nur die DLL Microsoft.CodeDom.Providers.DotNetCompilerPlatformvon Version 1.0.6auf downgraden 1.0.5.

Felipe Miosso
quelle
0

Ich hatte das gleiche Problem im September 2016, als ich ein vorhandenes ASP.NET-Programm übernahm. Ich fand heraus, dass mehrere Versionen der beiden von Kemal erwähnten Compiler-Pakete in verschiedenen Projekten der Lösung installiert waren.

Also habe ich zuerst aktualisiert, um sie gleich zu bekommen. VS sagt Ihnen nicht, dass Updates in diesem Szenario verfügbar sind (oder habe ich sie verpasst?)

Ich musste dann VS2015 neu starten, damit die Pakete ordnungsgemäß bereinigt wurden.

Rob Von Nesselrode
quelle