StartseiteSoftwareentwicklungIIS Deployment: „Ein Teil des Pfades bin\roslyn\csc.exe konnte nicht gefunden werden“

IIS Deployment: „Ein Teil des Pfades bin\roslyn\csc.exe konnte nicht gefunden werden“

Empfehle diesen Artikel deinen Freunden:Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

Wer eine mit Visual Studio 2015 entwickelte ASP.NET MVC Anwendung auf den IIS deployt, sieht möglicherweise die oben gezeigte Fehlermeldung

Ein Teil des Pfades "C:\inetpub\wwwroot\bin\roslyn\csc.exe" konnte nicht gefunden werden

Beziehungsweise der äquivalente Fehler auf einer englischen Windows-Server Installation

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

Roslyn ist eine recht neue Kompiler-Platform von und für .NET. Im Rahmen Microsofts offener Strategie ist er Open Source und entgegen früheren Compilern nicht nur für Windows, sondern auch für Linux- und sogar Mac OS verfügbar. Die Fehlermeldung weist darauf hin, dass besagter Compiler nicht korrekt ins Ausgabeverzeichnis kopiert wurde. Hierzu fehlt eine Target-Direktive in der Projektdatei, die dies veranlasst. Dieser Fehler tritt insbesondere unter Visual Studio 2015 auf, und lässt sich mit folgenden Schritten beheben.

Neuinstallation der NuGet-Pakete des Compilers

In der Regel genügt es bereits, die NuGet-Pakete Microsoft.Net.Compilers und Microsoft.CodeDom.Providers.DotNetCompilerPlatform neu zu installieren. Am einfachsten geschieht dies über die Konsole mit folgendem Befehl:

Install-Package -ReInstall Microsoft.Net.Compilers
Install-Package -ReInstall Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Anschließend das Projekt neu kompilieren und deployen. In der Regel sollte das Problem damit gelöst sein.

Workaround: Manuelles kopieren über die .csproj-Datei

Sollte dies nicht funktionieren, kann man den Compiler als Workaround manuell in das Zielverzeichnis kopieren lassen. Dazu öffnet man die .csproj-Datei des jeweiligen Projektes (nicht die .sln der übergeordneten Projektmappe) und fügt folgenden Block 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>

Am besten ganz oben unter den Project-Knoten einfügen. Nach einem Neustart von Visual Studio auch hier die Projektmappe neu erstellen und anschließend auf den IIS deployen.

Über DMW007

Ein Kommentar

  1. Hallo und danke für den Beitrag!
    Die Lösung stimmt, nur der angegebene NuGet Befehl ist falsch. -ReInstall gibt es nur bei Update-Package und nicht bei Install-Package. Die befehle lauten daher:
    Update-Package -ReInstall Microsoft.Net.Compilers
    Update-Package -ReInstall Microsoft.CodeDom.Providers.DotNetCompilerPlatform

    Grüße

Schreibe einen Kommentar