9

私は 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 をソリューション フォルダー 'Subfolder'に追加したいので、次のようになります (ダミー画像、赤い矢印は Project3 を配置する場所を示しています)。

画像

Powershell (およびオプションで EnvDTE) を使用してこれを達成するにはどうすればよいですか? サンプルコードをいただければ幸いです。ありがとう!

4

2 に答える 2

6

SolutionFolderインターフェースには、「ファイルから追加」メソッドがあります。

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);
于 2012-07-11T19:30:14.093 に答える