Deutsch
Germany.ru → Форумы → Архив Досок→ Программирование

MS Build инсталировать, запустить из-под IIS и выполнить специфический target.​

2048  
Murr
патриот23.04.26 16:38
Murr
23.04.26 16:38 

MS Build инсталировать, запустить из-под IIS и выполнить специфический target.


Голая система с включенным ИИС.


Требуется куда-то разместить МС Билд со всеми нужными библиотеками, не дублируя имеющиеся, но так чтобы МС Билд их юзал. Обычно после перемещения он их не видит. По ощущениям там захардкожены относительные пути. Размещение МС Билд - вне структуры каталогов ИИС.


Требуется из-под ИИС запустить указанный МС Билд и чтобы он выполнил написанное в определенном Таргетсе. Таргетс лежит в произвольном месте файловой системы, но полный или относительный путь известен. Чтобы не было глупых вопросов - компилировать ничего не надо - надо работать с довольно объемным ХМЛ - резать, склеивать, добавлять - инструменты для этого будут. Но это не в этой части задачи.


Вопрос - как это делать?


Все то же самое, но в системе проинсталлена МС ВСтудия... Как тогда?

#1 
alex445
патриот23.04.26 19:06
NEW 23.04.26 19:06 
в ответ Murr 23.04.26 16:38

А нейросблёв чё говорит?

#2 
Murr
патриот23.04.26 20:17
Murr
NEW 23.04.26 20:17 
в ответ alex445 23.04.26 19:06

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

#3 
AlexNek
патриот23.04.26 21:40
AlexNek
NEW 23.04.26 21:40 
в ответ Murr 23.04.26 20:17

Мне больше рассказал, но думаю самое интересное это:


Архитектурная рекомендация (почему так делать не стоит)

Запуск MSBuild из IIS-воркера считается антипаттерном:

  • w3wp.exe оптимизирован под HTTP, а не под длительные процессы.
  • Пул приложений может быть переразвернут, убит IIS-ом из-за таймаута или потребления памяти.
  • Масштабирование и отказоустойчивость отсутствуют.


Правильная архитектура:

  1. Веб-приложение принимает запрос и кладёт задачу в очередь (RabbitMQ, Azure Queue, Hangfire, BackgroundService).
  2. Отдельный фоновый воркер (Windows Service, консольное приложение, Docker-контейнер) вычитывает очередь, настраивает окружение, запускает MSBuild и возвращает статус.
  3. Веб-приложение опрашивает статус или получает callback/webhook.
#4 
Murr
патриот24.04.26 03:22
Murr
NEW 24.04.26 03:22 
в ответ AlexNek 23.04.26 21:40
  • Пул приложений может быть переразвернут, убит IIS-ом из-за таймаута или потребления памяти.
  • Масштабирование и отказоустойчивость отсутствуют.

-----

Вот это создает проблему. Правда Я не понимаю почему ИИС прибивает внешний процесс.

Масштабирование не критично - там все одно очередь.


А фоновый воркер мне не нравится - может отвалиться...

#5 
AlexNek
патриот24.04.26 20:32
AlexNek
NEW 24.04.26 20:32 
в ответ Murr 24.04.26 03:22
Я не понимаю почему ИИС прибивает внешний процесс.

не извращаюсь я с IIS, но выглядит логично особенно если processModel.createWorkerProcessJobObject="true"


Спросим подробности, всю простынь с решением приводить не буду, только выводы


IIS не прибивает процесс, он теряет с ним связь из-за таймаутов и рециклов пула.Запускать можно прямо из IIS, если:
  • Ограничить время выполнения (WaitForExit с таймаутом)
  • Писать логи в файлы (/fileLogger)
  • Фиксировать статус отдельно
  • Корректно убивать процесс при превышении лимита
Настройте пул (отключите Idle Timeout и Regular Time Interval на время отладки/выполнения).Добавьте очистку зомби-процессов при старте.


#6 
alex445
патриот27.04.26 13:09
NEW 27.04.26 13:09 
в ответ AlexNek 24.04.26 20:32
не извращаюсь я с IIS

А как нынче вайбкодеры деплоят? Одним промпт-аркестратором сразу на всю распределённую поляну пачку мультисервисных контейнеров накрывают?

#7 
AlexNek
патриот27.04.26 19:12
AlexNek
NEW 27.04.26 19:12 
в ответ alex445 27.04.26 13:09

Как обычно, фантазии лезут изо всех дыр, вместо того чтобы спросить, что имелось в виду?

#8