EnvDTE SolutionFolder AddFromFile показывает сообщение об ошибке

Я хочу добавить несколько проектов в решение с использованием DTE. Это приложение WPF, а не расширение.

Мне нужно добавить несколько проектов в одну папку, затем еще один проект в другую папку и последний проект в еще одну папку.

При добавлении проектов в первую папку все в порядке. Но когда я добавляю проекты в другую папку, появляется всплывающее окно с сообщением: «Операция не может быть завершена: неверный дескриптор окна».

После нажатия кнопки «ОК» я получаю еще одно сообщение: «Операция не может быть завершена: неизвестная ошибка».

Но все проекты успешно добавляются в решение. Так что самая большая проблема — это всплывающее окно сообщения во время выполнения задания. Прочитав «недопустимый дескриптор окна», я подумал, что, возможно, мне следует попробовать сделать ВСЕ в основном потоке. Но результат тот же. Кроме того, в окне вывода Visual Studio нет сообщений. Это мой код:

(DoFunction и DoAction — это простые методы, которые переносят содержимое в try..catch, и если есть исключение RPC_E_SERVERCALL_RETRYLATER, потребуется еще одна попытка)

//Getting DTE Service
dteService = DoFunction(() =>(DTE2)Activator.CreateInstance(Type.GetTypeFromProgID("VisualStudio.DTE.15.0", true), true));

//Getting the solution
activeSolution = DoFunction(() => dteService.Solution as Solution4);
DoAction(() =>activeSolution.Open(solutionPath));

ActiveSolution — это мое личное поле.

//Adding project to solution:
DoAction(() =>
{
    SolutionFolder folder = GetExistingSolutionFolder(folderTree);
    if (folder == null)
        activeSolution.AddFromFile(projectFileName);
    else
        folder.AddFromFile(projectFileName); //<-- messagebox popups here
});           

Проект добавляется в папку внутри решения. Папки уже существуют в решении. GetExistingSolutionFolder просто рекурсивно ищет папку.

Что может быть причиной этого окна сообщения? Что важно, никаких исключений не выдается.

Это печально известное исключение, которое возникает, когда куча рабочего стола машины заканчивается или процесс пытается создать более 10 000 окон. Посмотрите в диспетчере задач, вкладка «Процессы». Добавьте столбец USER Objects.

Hans Passant 15.03.2019 11:14

Этот экземпляр devenv использует около 146 пользовательских объектов, а затем показывает окно сообщения. Мой экземпляр devenc -> фактическая Visual Studio использует около 315.

Adam Jachocki 15.03.2019 11:44

Событие, когда я выхожу из dteService в конце первой папки, а затем снова открываю ее - показывает окно сообщения.

Adam Jachocki 15.03.2019 11:57

То, что вы пытаетесь сделать, очень неясно, сбой достаточно шаткий, чтобы потребовать поддержки Microsoft, чтобы помочь вам разобраться с этим. Но они почти наверняка скажут вам, что вместо этого вам нужно создать надстройку VSIX. Лично я бы сначала отключил опцию «Легкая загрузка решения» VS2017. Затем я снова запустил VS и подключил отладчик к первому экземпляру, чтобы попытаться зафиксировать трассировку стека исключения. Но мы даже не знаем, какую версию VS вы используете, трудно вам помочь.

Hans Passant 20.03.2019 10:51

Это VS2017. Как я уже сказал, в стеке вызовов нет никаких исключений и ничего полезного.

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

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