Я хочу добавить несколько проектов в решение с использованием 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 просто рекурсивно ищет папку.
Что может быть причиной этого окна сообщения? Что важно, никаких исключений не выдается.
Этот экземпляр devenv использует около 146 пользовательских объектов, а затем показывает окно сообщения. Мой экземпляр devenc -> фактическая Visual Studio использует около 315.
Событие, когда я выхожу из dteService в конце первой папки, а затем снова открываю ее - показывает окно сообщения.
То, что вы пытаетесь сделать, очень неясно, сбой достаточно шаткий, чтобы потребовать поддержки Microsoft, чтобы помочь вам разобраться с этим. Но они почти наверняка скажут вам, что вместо этого вам нужно создать надстройку VSIX. Лично я бы сначала отключил опцию «Легкая загрузка решения» VS2017. Затем я снова запустил VS и подключил отладчик к первому экземпляру, чтобы попытаться зафиксировать трассировку стека исключения. Но мы даже не знаем, какую версию VS вы используете, трудно вам помочь.
Это VS2017. Как я уже сказал, в стеке вызовов нет никаких исключений и ничего полезного.





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