O compilador roslyn não foi copiado para a pasta AspnetCompileMerge usando o msbuild

Eu tenho um projeto .NET MVC que estou tentando implantar usando o Jenkins.

Eu estava deixando Jenkins executar o msbuild e depois copiar os arquivos resultantes usando o RoboCopy. Eu queria mudar para usar apenas um perfil de publicação. O perfil de publicação funciona bem na minha máquina local usando o Visual Studio, mas no host Jenkins, ele falha ao usar o msbuild.

O erro que dá é

ASPNETCOMPILER: erro ASPRUNTIME: Não foi possível encontrar parte do caminho 'C: \ Arquivos de Programas (x86) \ Jenkins \ jobs \ meuProject \ espaço de trabalho \ meuProject \ obj \ Debug \ AspnetCompileMerge \ Source \ bin \ roslyn \ csc.exe'. [C: \ Arquivos de programas (x86) \ Jenkins \ jobs \ myProject \ workspace \ myProject \ calendar.csproj]

Estou usando oMicrosoft.Net.Compilers pacote nuget para atrair o compilador C #, porque alguns dos colaboradores do projeto ainda estão no Visual Studio 2013, mas estamos usando os recursos da linguagem C # 6 no projeto.

O problema é que o projeto foi desenvolvido usando o MSBuild no jenkins antes de adicionar o sinalizador de publicação. É só desde a adição do/p:DeployOnBuild=true;PublishProfile=MyProfile definindo que começou a falhar ... mas a etapa de publicação funciona bem no Visual Studio, e o compilador roslyn é copiado para a pasta obj \ Debug \ AspnetCompileMerge \ Source \ bin \ na minha máquina local. O que da?

Honestamente, como o msbuild14 está disponível no servidor Jenkins, provavelmente nem sequernecessidade o arquivo roslyn csc.exe. Existe uma maneira que eu possa fazer msbuild ignorá-lo?

Meu perfil de publicação
<?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>
O que eu tentei até agora

Eu tentei atualizar o pacote do compilador.

Copiando manualmente o compilador

Adicionei etapas ao meu arquivo .csproj para copiar os arquivos do compilador ausentes no diretório AspnetCompileMerge (eu já os estava copiando no diretório bin \ roslyn pararesolver outro problema)

<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>
Desativando a capacidade de atualização no perfil de publicação

Com base na resposta de Wesley Rathburn emuma pergunta semelhante, Tentei criar o site pré-compilado para que não pudesse ser atualizado no perfil de publicação:

<EnableUpdateable>False</EnableUpdateable>

Embora isso tenha revelado algum código morto que precisava ser removido em minhas visualizações, ele não corrigiu o erro durante a compilação do jenkins.

Executando o MsBuild localmente

I pode execute com êxito o comando msbuild na minha máquina local. Ele implanta no servidor e tudo mais. Aqui está o comando que eu corro no PowerShell:

&"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Debug "/p:DeployOnBuild=true;PublishProfile=MyProfile" myproject\myproject.csproj
Removendo as Instruções que Copiam o Compilador Inteiramente

Ocorreu-me que talvez eu não precisasse mais das instruções para copiar o compilador roslyn para a pasta bin, pois o msbuild14 já estava disponível no Jenkins (e não tenho certeza se foi quando construí o projeto). Infelizmente, o mesmo erro ocorre. Ele está procurando o arquivo roslyn \ csc.exe, mesmo que não haja aparente necessidade de fazer isso!

questionAnswers(2)

yourAnswerToTheQuestion