Добавить существующий проект в папку решения с помощью PowerShell

Я работаю над сценарием PowerShell для динамического создания и добавления проекта Visual Studio с его папками и активами в решение. Я использую Visual Studio DTE.

Моя структура каталогов в файловой системе следующая:

C:\Dir1\Dir2\Stuff
|
+--Stuff                  <-- folder
|  |
|  `Stuff.csproj          <-- existing project, included in sln
|
+--Subfolder              <-- Subfolder in which I want to include my new csproj
|  +--Project1            <-- folder
|  |  |
|  |  `Project1.csproj    <-- existing project, included in sln
|  |
|  +--Project2            <-- folder
|  |  |
|  |  `Project2.csproj    <-- existing project, included in sln
|  |
|  `--Project3            <-- this, subs below and csproj are created from my script
|     |
|     `Project3.csproj
|
 `Stuff.sln

Мой скрипт правильно создает Subfolder \ Project3 \ Project3.csproj, и я могу без проблем добавить его в решение, используя DTE.

Я хочу, однако, добавить Project3 вsolution folder 'Subfolder', так это выглядит так (фиктивное изображение, красная стрелка показывает, где я хочу иметь Project3):

image

Как я могу сделать это с помощью Powershell (и, возможно, EnvDTE)? Любой пример кода будет оценен. Спасибо!

Ответы на вопрос(2)

тите внимание, что Visual Studio 2012 не создает системную папку с тем же относительным путем.

  Теперь внутри этой «Папки решений» добавьте новый проект, но вы должны быть осторожны, когда определяете, что относительный путь в системе совпадает с относительным путем к вашей новой «папке решений». Если нужной папки не существует, VS 2012 создаст ее для нового проекта.

Если вы хотите добавить существующий файл с соответствующим относительным путем, вы должны сначала создать файл в соответствующем системном относительном пути вне VS. Затем вы можете «добавить существующий файл»; в Visual Studio.

http://msdn.microsoft.com/en-us/library/envdte80.solutionfolder.addfromfile

Project AddFromFile(
    string FileName
)

Так что вам просто нужно получить указатель на папку решения. Я не знаю, добавляете ли вы папку решения через DTE или она уже существует.

Если вы добавите его с помощью Solution2.AddSolutionFolder

http://msdn.microsoft.com/en-us/library/envdte80.solution2.addsolutionfolder%28v=vs.110%29.aspx

Project AddSolutionFolder(
    string Name
)

Он возвращает ссылку на папку решения, и вы можете просто вызвать вышеуказанный метод. Если он уже существует, я думаю, вам придется использовать Solution2.FindProjectItem.

http://msdn.microsoft.com/en-us/library/2zszfd26%28v=vs.110%29.aspx

Что-то вроде следующего должно работать. У меня нет способа опробовать его в минуту, поэтому может потребоваться настройка.

Solution solution = System.Activator.CreateInstance(Type.GetTypeFromProgID("VisualStudio.Solution")) as EnvDTE.Solution;
Solution2 sol2 = solution as Solution2;
sol2.Create(solutionPath, solutionName);

Project folder = sol2.AddSolutionFolder("Subfolder");

folder.AddFromFile(pathToProject);

Ваш ответ на вопрос