Мне нужен бегун скрипта CSharp (.csx), такой как csi.exe, для машины агента сборки

Я пишу сценарии сборки.csx. На моей локальной машине я запускаю их с помощью CSharp в интерактивном режиме из Visual Studio или через C:\Program Files (x86)\MSBuild\14.0\bin\csi.exe, Я попытался запустить сценарии.csx на компьютере агента сборки TeamCity (машины агента выполняют реальные задачи сборки, такие как компиляция), на котором установлен Microsoft Built Tools 2015. Удивительно, но не было csi.exe в папках MSBuild.

Я ищу способ установки csi.exe или совместимый автономный.csx runner на моих машинах агента сборки. Варианты, найденные в Google, такие как https://github.com/cake-build/cake, похоже, имеют разные сценарии или множество дополнительных функций, в то время как я ищу csi.exe клонировать в идеале.

4 ответа

Решение

Решение оказалось простым: пакет Roslyn NuGet содержит csi.exe. Он будет расположен по адресу packages\microsoft.net.compilers.2.4.0\tools\csi.exe,

Стоит отметить, что скрипт установки изменений пакета .csproj файл для использования компилятора, предоставляемого пакетом. Скорее всего, это не то, что вам нужно, поэтому обязательно откатывайте такие изменения, если они были сделаны во время установки.

Вы можете скомпилировать своего собственного бегуна с любой настройкой, которая вам нравится, используя Roslyn API.

Этот код будет выполнять основную работу по запуску скрипта:

static void Main(string[] args)
{
    Task<object> result = CSharpScript.EvaluateAsync(File.ReadAllText(args[0]));
    result.Wait();
}

В документации Microsoft есть очень хорошее руководство:Генерация кроссплатформенного кода с Roslyn и.NET Core.

Это несколько эквивалентно использованию csi.exe но с дополнительными преимуществами.

В их примере у вас есть переменная const string code. Это может быть строка из вашей формы или содержимое файла сценария.

Я сам предпочитаю этот подход, потому что:

  • Он позволяет вам получать доступ к ресурсам вашего бегуна и управлять ими, правильно его запускать, измерять его производительность и т. Д. Простой запуск CSI может потенциально взорвать память, если его не трогать, и он гораздо более непрозрачен, чем управление им в коде.
  • Возвращает анализ кода в случае ошибок. Вы можете позволить пользователю легко определить источник неудачной сборки.
  • Это кроссплатформенный, в отличие от, например, csi.exe сидя на жестком диске
  • Вы можете компилировать во время выполнения или создать DLL, которая работает намного быстрее, если она предварительно построена.

TeamCity 2021.2 предоставляет новый исполнитель сценариев C#, я надеюсь, что вам нужно

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