Как убить VBCSCompiler.exe на агенте Ubuntu?

Я создал конвейер Azure Devops Build и пытаюсь создать проект гибридного сайта ASP.NET MVC и Angular на битбакете (git).

Сначала проект проверяется, и nuget восстанавливает необходимые пакеты, а затем выполняется сборка .NET. Я использовал Windows 2019 в качестве агента лазурного конвейера для успешной сборки. однако это занимает около 7 минут, в то время как выполнение задач (помимо .Net) на агенте ubuntu происходит намного быстрее! вместо этого занимает около 2 минут!

Поэтому я хотел бы использовать ubuntu, но у меня возникла проблема с задачей MSBuild...

"/home/vsts/work/1/s/Bobby.ProjectA/Bobby.ProjectA.csproj" (default target) (1) ->
(KillVBCSCompilerAndRetryCopy target) -> 
/home/vsts/work/1/s/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props(23,5): 
error MSB4044: The "KillProcess" task was not given a value for the required parameter "ImagePath". [/home/vsts/work/1/s/Bobby.ProjectA/Bobby.ProjectA.csproj]

Согласно этому сообщению, VBCSCompiler.exe продолжает работать из пакета Compiler Nuget (задача восстановления nuget?), поэтому он блокирует папки src и предотвращает запуск будущих сборок, например. вызывает такую ​​ошибку:

/home/vsts/work/1/s/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8/build/net45/Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props(17,5): 
warning MSB3021: Unable to copy file "/home/vsts/work/1/s/packages/Microsoft.Net.Compilers.2.4.0/build/../tools/csc.exe" to "/bin/roslyn/csc.exe". Access to the path '/bin/roslyn' is denied. [/home/vsts/work/1/s/Bobby.ProjectA/Bobby.ProjectA.csproj]

Таким образом, решением было бы убить VBCSCompiler.exe, но, поскольку я не могу получить доступ к размещенной машине во время сборки, я не знаю, как это сделать.

скриншот моего конвейера:

С таким подходом я сталкиваюсь с тупиковым путем? Сборка отлично работает на Windows 2019, но это занимает слишком много времени, поэтому, если я смогу успешно запустить ее на Ubuntu, это будет здорово!

Привет. У вас была возможность проверить ответ ниже? Как прошло?

Levi Lu-MSFT 16.12.2020 08:30

@LeviLu-MSFT ни один из вариантов не сработал

Cataster 16.12.2020 16:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
330
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать следующие обходные пути:

1, Установите аргументы MSBUILD /p:UseSharedCompilation=false.

Вы можете добавить приведенный выше аргумент в поле аргументов msbuild задачи msbuild. Смотрите здесь.

2. Обновите nupkg Microsoft.CodeDom.Providers.DotNetCompilerPlatform до последней версии и удалите nupkg Microsoft.Net.Compilers из своего проекта. Смотрите здесь для получения дополнительной информации.

3. Попробуйте указать TTL сервера компилятора Roslyn.

Вы можете определить переменную конвейера VBCSCOMPILER_TTL на вкладке Переменная, чтобы указать более короткое время простоя для VBCSCompiler.exe

Или вы можете добавить <providerOption name = "CompilerServerTimeToLive" value = "[num of seconds]" /> под system.codedom/compilers/compiler в файле конфигурации. Смотрите здесь для получения дополнительной информации.

4. Используйте цель CheckIfShouldKillVBCSCompiler:

Вы можете попробовать добавить ниже в свой файл csproj:

<Target Name = "CheckIfShouldKillVBCSCompiler">
  <PropertyGroup>
    <ShouldKillVBCSCompiler>true</ShouldKillVBCSCompiler>
  </PropertyGroup>
</Target>

Смотрите здесь.

Леви, как мне вложить цель (вариант 4) в цель до сборки? пожалуйста, найдите мой пост об этом здесь: stackoverflow.com/questions/65308692/…

Cataster 16.12.2020 16:44

@Cataster Вы можете попробовать использовать атрибут BeforeTargets . например. <Target Name = "CheckIfShouldKillVBCSCompiler" BeforeTargets = "BeforeBuild">. или установить InitialTargets например.<Project InitialTargets = "CheckIfShouldKillVBCSCompiler">.

Levi Lu-MSFT 17.12.2020 03:07

Цели BeforeBuild не работали. Я тоже пробовал BeforeTargets = "Build" и это тоже не сработало. Я также попытался поместить группу свойств в саму цель BeforeBuid, но это тоже не сработало. Я хочу попробовать начальные цели, которые вы предложили, но где я могу это добавить? Существует только 1 элемент проекта, и у него уже есть цель по умолчанию... можно ли его переопределить? или мне просто нужно включить его вместе с ним вот так: <Project ToolsVersion = "15.0" InitialTargets = "CheckIfShouldKillVBCSCompiler" DefaultTargets = "Build" xmlns = "http://schemas.microsoft.com/developer/msbuild/2003">

Cataster 17.12.2020 05:11

он не работает в любом случае. у меня есть последний вариант: перезапустить агент сборки перед задачей MSBuild, но не знаю, какую задачу добавить/как перезапустить агент ubuntu в конвейере...

Cataster 17.12.2020 05:33

@Cataster Вы не можете перезапустить агент во время выполнения конвейера. Вы можете попробовать добавить задачу bash перед задачей MSbuild, чтобы убить процесс VBCSCompiler.exe. killall VBCSCompiler. смотрите здесь

Levi Lu-MSFT 17.12.2020 06:43

я получил эту ошибку: VBCSCompiler: no process found

Cataster 17.12.2020 06:48

Я застрял прямо сейчас. Если процесс VBCSCompiler на самом деле не запущен, то почему Access to the path '/bin/roslyn' is denied.? этот пост здесь звучит так, будто это определенно проблема VBCSCompiler, поэтому я так долго пытался использовать все эти варианты. но если все это время проблема не в том, что доступ запрещен, то в чем может быть проблема? developercommunity.visualstudio.com/content/problem/71302/…

Cataster 17.12.2020 07:07
Ответ принят как подходящий

Сборка на Ubuntu 20 наконец-то заработала! Я не знаю, почему удаление этих строк решило проблему VBCSCompiler, но благодаря этому msbuild успешно завершился на агенте Ubunutu 20!!

Удалите следующие строки из файла .csproj:

<Import Project = "..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition = "Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" />

<Error Condition = "!Exists('..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" Text = "$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition = "!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text = "$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />

Чтобы дать некоторый контекст ответу, в этом сообщении здесь указано, что преобразование из встроенного в MSBuild восстановления пакета в автоматическое восстановление пакета (задача восстановления nuget) подразумевает, что фрагменты Microsoft.Net.Compilers<Import> и <Error Condition> больше не актуальны / не нужны в файле .csproj .

@LeviLu-MSFT Сборка Ubuntu 20 наконец-то заработала! Пожалуйста, проверьте мой ответ

Cataster 25.12.2020 08:05

Другие вопросы по теме