Компилятор Roslyn не скопирован в папку AspnetCompileMerge с помощью msbuild

У меня есть проект .NET MVC, который я пытаюсь развернуть с помощью Jenkins.

Я позволил Дженкинсу запустить msbuild, а затем скопировать полученные файлы с помощью RoboCopy. Я хотел переключиться, чтобы просто использовать профиль публикации. Профиль публикации отлично работает на моем локальном компьютере с использованием Visual Studio, но на хосте Jenkins происходит сбой при использовании msbuild.

Ошибка это дает

ASPNETCOMPILER: ошибка ASPRUNTIME: не удалось найти часть пути 'C: \ Program Files (x86) \ Jenkins \ jobs \ myProject \ workspace \ myProject \ obj \ Debug \ AspnetCompileMerge \ Source \ bin \ roslyn \ csc.exe'. [C: \ Program Files (x86) \ Jenkins \ jobs \ myProject \ workspace \ myProject \ calendar.csproj]

Я используюMicrosoft.Net.Compilers пакет nuget для загрузки в компилятор C #, потому что некоторые соавторы проекта все еще работают в Visual Studio 2013, но мы используем в проекте возможности языка C # 6.

Дело в том, что проект, построенный с помощью MSBuild на jenkins, до того, как я добавил флаг публикации, был очень хорош. Это только после добавления/p:DeployOnBuild=true;PublishProfile=MyProfile установив, что он начал давать сбой ... но шаг публикации работает без использования Visual Studio, а компилятор roslyn даже копируется в папку obj \ Debug \ AspnetCompileMerge \ Source \ bin \ на моем локальном компьютере. Что дает?

Честно говоря, поскольку msbuild14 доступен на сервере Jenkins, он, вероятно, даже ненеобходимость файл roslyn csc.exe. Есть ли способ заставить msbuild игнорировать его?

Мой профиль публикации
<?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>
Что я уже пробовал

Я пытался обновить пакет компилятора.

Ручное копирование компилятора

Я добавил шаги в свой файл .csproj, чтобы принудительно скопировать отсутствующие файлы компилятора в каталог AspnetCompileMerge (я уже копировал их в каталог bin \ roslyn вразрешить другая проблема)

<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>
Отключение возможности обновления в профиле публикации

Основываясь на ответе Уэсли Рэтберна опохожий вопросЯ попытался создать предварительно скомпилированный сайт, чтобы его нельзя было обновить в профиле публикации:

<EnableUpdateable>False</EnableUpdateable>

Хотя это выявило некоторый мертвый код, который нужно было удалить в моих представлениях, оно не исправило ошибку во время сборки jenkins.

Запуск MsBuild локально

I Можно успешно запустите команду msbuild на моем локальном компьютере. Развертывает на сервер и все. Вот команда, которую я запускаю в powershell:

&"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /p:Configuration=Debug "/p:DeployOnBuild=true;PublishProfile=MyProfile" myproject\myproject.csproj
Удаление операторов, полностью копирующих компилятор

Мне пришло в голову, что, возможно, мне больше не нужны операторы для копирования компилятора roslyn в папку bin, так как msbuild14 был теперь доступен на Jenkins (и я не уверен, что это было, когда я впервые собрал проект). К сожалению, такая же ошибка происходит. Он ищет файл roslyn \ csc.exe, хотя в этом нет особой необходимости!

Ответы на вопрос(2)

Ваш ответ на вопрос