Сбой сборки VSTS / Публикация не может найти roslyn \ csc.exe в папке bin - PullRequest
0 голосов
/ 29 августа 2018

У нас есть проект веб-сайта, на котором установлены следующие пакеты nuget

Microsoft.CodeDom.Providers.DotNetCompilerPlatform - 1.0.8

Microsoft.Net.Compilers - 2.4.0

web.config имеет следующее

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

Сборки работают локально. Когда DotNetCompilerPlatform установлен, install.ps1 сценарий создает папку Roslyn в корзине и копирует csc.exe и т. Д. В эту папку.

Код написан третьей стороной и передан в наш репозиторий VSTS. Я хочу использовать VSTS для создания и развертывания веб-сайта в наших средах тестирования / этапа и среды разработки.

Конвейер сборки VSTS получает исходный код, затем восстанавливает пакеты и запускает задачу сборки Visual Studio для решения. Это проект веб-сайта, поэтому он не предназначен для сайта. Сборка завершается с ошибкой

ASPNETCOMPILER (0,0): ошибка ASPRUNTIME: не удалось найти часть путь 'xxxxxxxxxx \ bin \ roslyn \ csc.exe'.

Поскольку сборка только восстанавливает пакет, двоичные файлы R oslyn не копируются в корзину .

Я также пытаюсь удалить пакеты из проекта и удалить компиляторы из web.config, но затем получаю сообщение об ошибке.

Ошибка CS1056: неожиданный символ '$'

где я использую некоторые новые языковые функции.

Я действительно хочу автоматизировать PreCompile и Publish, так как на данный момент слишком много ручных шагов, которые открыты для ошибок или злоупотреблений.

Одна мысль, которая у меня возникла, заключалась в добавлении шага в конвейер сборки после восстановления пакета, чтобы запустить install.ps1 из папки пакета DotNetCompilerPlatform, которая, будем надеяться, скопирует инструменты компилятора в корзину. то есть имитировать то, что делается при установке пакета. Но прежде чем идти по этому пути, я хотел посмотреть, есть ли лучшее решение.

1 Ответ

0 голосов
/ 30 августа 2018

Одним из предложений является обновление '. Csproj' , чтобы изменить определение вашей сборки ( в самом коде ), как показано ниже, на copy the roslyn непосредственно в папку bin, а не default output directory.

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

См. Это

Таким образом, вы не можете изменить определение VSTS Build

...