EnvDTE SolutionFolder AddFromFile показывает сообщение об ошибке - PullRequest
2 голосов
/ 15 марта 2019

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

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

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

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

Но все проекты успешно добавлены в решение. Таким образом, самая большая проблема - это окно сообщения, которое появляется во время выполнения работы. Прочитав «недопустимый дескриптор окна», я подумал, что, возможно, мне следует попробовать ВСЕ в главном потоке. Но результат тот же. Кроме того, в окне вывода 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 просто ищет recurseviley для папки.

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

...