roslyn-Compiler nicht mit msbuild @ in den AspnetCompileMerge-Ordner kopie

Ich habe ein .NET MVC-Projekt, das ich mithilfe von Jenkins bereitstellen möchte.

Ich hatte Jenkins msbuild ausführen lassen und dann die resultierenden Dateien mit RoboCopy kopiert. Ich wollte wechseln, um nur ein Veröffentlichungsprofil zu verwenden. Das Veröffentlichungsprofil funktioniert auf meinem lokalen Computer mit Visual Studio einwandfrei, auf dem Jenkins-Host schlägt die Verwendung von msbuild jedoch fehl.

Der Fehler, den es gibt, ist

ASPNETCOMPILER: Fehler ASPRUNTIME: Kein Teil des Pfads 'C: \ Programme (x86) \ Jenkins \ jobs \ myProject \ workspace \ myProject \ obj \ Debug \ AspnetCompileMerge \ Source \ bin \ roslyn \ csc.exe' gefunden . [C: \ Programme (x86) \ Jenkins \ jobs \ myProject \ workspace \ myProject \ calendar.csproj]

Ich benutze das Microsoft.Net.Compilers nuget-Paket zum Abrufen des C # -Compilers, da einige der Projektmitarbeiter noch Visual Studio 2013 verwenden, wir jedoch C # 6-Sprachfunktionen im Projekt verwenden.

Thing ist, das Projekt wurde einwandfrei mit MSBuild auf Jenkins erstellt, bevor ich das Veröffentlichungsflag hinzufügte. Erst seit dem Hinzufügen des/p:DeployOnBuild=true;PublishProfile=MyProfile Einstellung, dass es fehlgeschlagen ist ... Der Veröffentlichungsschritt funktioniert jedoch einwandfrei mit Visual Studio, und der Roslyn-Compiler wird sogar in den Ordner obj \ Debug \ AspnetCompileMerge \ Source \ bin \ auf meinem lokalen Computer kopiert. Was gibt

Ehrlich gesagt, da msbuild14 auf dem Jenkins-Server verfügbar ist, wird es wahrscheinlich nicht einmalbrauche Die roslyn csc.exe-Datei. Gibt es eine Möglichkeit, msbuild dazu zu bringen, es zu ignorieren?

Mein Profil veröffentlichen
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>\\myserver\someshare\mysite</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <EnableUpdateable>True</EnableUpdateable>
    <DebugSymbols>False</DebugSymbols>
    <WDPMergeOption>DonotMerge</WDPMergeOption>
  </PropertyGroup>
</Project>
Was ich bisher ausprobiert habe

Ich habe versucht, das Compiler-Paket zu aktualisieren.

Compiler manuell kopieren

Ich habe meiner .csproj-Datei Schritte hinzugefügt, um das Kopieren der fehlenden Compiler-Dateien in das AspnetCompileMerge-Verzeichnis zu erzwingen (ich habe sie bereits in das Verzeichnis bin \ roslyn in @ kopiertEntschlossenhei ein weiteres Proble)

<Target Name="CopyRoslynFiles" AfterTargets="BeforeBuild">
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" Exclude="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*.sys" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <MakeDir Directories="$(WebProjectOutputDir)\obj\$(Configuration)\AspnetCompileMerge\Source\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\obj\$(Configuration)\AspnetCompileMerge\Source\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
Ausschalten der Aktualisierbarkeit im Veröffentlichungsprofil

Basiert auf Wesley Rathburns Antwort auf eine ähnliche Frage, Ich habe versucht, die vorkompilierte Site so zu erstellen, dass sie im Veröffentlichungsprofil nicht aktualisiert werden konnte:

<EnableUpdateable>False</EnableUpdateable>

Obwohl dies einen toten Code enthüllte, der in meinen Ansichten entfernt werden musste, konnte der Fehler während des Jenkins-Builds nicht behoben werden.

MsBuild lokal ausführen

I könne Führen Sie den Befehl msbuild erfolgreich auf meinem lokalen Computer aus. Es wird auf dem Server bereitgestellt und alles. Hier ist der Befehl, den ich in Powershell ausführe:

&"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Debug "/p:DeployOnBuild=true;PublishProfile=MyProfile" myproject\myproject.csproj
Entfernen der Anweisungen, die den Compiler vollständig kopieren

Es kam mir der Gedanke, dass ich die Anweisungen möglicherweise nicht mehr benötigte, um den Roslyn-Compiler in den Ordner bin zu kopieren, da msbuild14 jetzt auf Jenkins verfügbar war (und ich bin nicht sicher, ob es der Zeitpunkt war, an dem ich das Projekt zum ersten Mal erstellte). Leider tritt derselbe Fehler auf. Es sucht nach der Datei roslyn \ csc.exe, obwohl dies offensichtlich nicht erforderlich ist!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage