Компилятор 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, хотя в этом нет особой необходимости!