Как программно добавить существующий проект в папку решения в Visual Studio - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть решение, которое я хочу программно добавить в существующий проект.

Открыть решение с помощью автоматизации envdte относительно просто

        var envDteType = Type.GetTypeFromProgID("VisualStudio.DTE.15.0");

        var envDte = Activator.CreateInstance(envDteType, true);
        var dte2 = (DTE2)envDte;

        var solution = (Solution4)dte2.Solution;
        solution.Open(filename);

Но добавить существующий проект в решениепапка не.

Обратите внимание, что это не использует шаблон, который дает большинство результатов Google

Использование

var referencesFolder = solution.AddSolutionFolder("References");
referencesFolder.ProjectItems.AddFromFile(fullPathToCsProj);

Добавляет файл проекта как старый файл, а не проект CSharp.

Вариант использования: мы находимся в адском обновлении nuget с нашим управлением библиотекой и разыменовываем nuget и вместо этого добавляем прямую ссылку на проект.Существует около 55 проектов, которые требуют сотен разыменований, следовательно, автоматизации.

1 Ответ

0 голосов
/ 21 февраля 2019

Хитрость заключается в добавлении приведенного возвращенного проекта к SolutionFolder (обратите внимание на .Object)

var referencesFolder = (SolutionFolder) solution
                                  .AddSolutionFolder("References")
                                  .Object;

referencesFolder.AddFromFile(fullPathToCsProj);

. Это дает доступ к AddFromFile в корневой сущности, которая правильно добавляет проект

...