Msbuild вопрос - PullRequest
       1

Msbuild вопрос

1 голос
/ 21 июля 2011

У меня есть несколько долго выполняющихся пользовательских задач сборки. Похоже, Visual Studio выполняет задачи msbuild в потоке пользовательского интерфейса, что приводило к зависанию среды IDE.

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

http://connect.microsoft.com/VisualStudio/feedback/details/670873/visual-studio-ui-freezes-during-long-msbuild-task

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/3289eb7d-7989-4350-8c43-02bf9913edbd/.

Итак, я решил исправить это для своих пользовательских задач:

  1. Обнаружение, когда они работают внутри Visual Studio.
  2. Запуск задач в фоновом потоке, если они
  3. Добавление «потока сообщений MsgWaitForMultipleHandles / Custom» в поток пользовательского интерфейса, чтобы пользовательский интерфейс реагировал во время работы.

Кажется, это работает. Теперь я могу запускать свои сборки без зависания IDE.

В любом случае, это подняло несколько вопросов:

  1. Это безопасно сделать? Визуальная студия - это масштабная вещь. Буду ли я сталкиваться с проблемами повторного входа, если я сделаю это? Приведут ли эти проблемы с повторным входом к миру, или я смогу игнорировать их?

  2. Я обнаружил Visual Studio, используя технику, описанную в этого поста . По сути, я назначаю значение свойства «BuildingInsideVisualStudio» свойству задачи, которое я проверяю в своем методе Execute (). Если это правда, то я использую многопоточное поведение, в противном случае я просто использую последовательное поведение. Это, однако, требует, чтобы каждая цель, использующая задачу, добавляла лишний goo в файл msbuild, чтобы избежать неудач. В идеале я хотел бы, чтобы «не сосание» было нормальным поведением, без специальной настройки. Есть ли какой-нибудь способ определить визуальную студию в методе Execute () моей задачи? Можно ли прочитать свойство проекта в реализации задачи, не требуя пользовательских изменений в XML? Можно ли как-нибудь опросить объект Host?

Спасибо.

1 Ответ

1 голос
/ 21 июля 2011

Попробуйте установить для переменной среды MSBuildNoInProcNode значение 1, а затем запустите IDE. Это заставит IDE строить запросы на дочерние узлы. Обратите внимание, что это не полностью протестированный сценарий, поэтому может возникнуть непредвиденное поведение, но это может быть альтернативой для получения желаемого результата без изменения файлов проекта или всех пользовательских задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...