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