使用PowerShell将现有项目添加到解决方案文件夹

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)实现这一点?任何示例代码都将不胜感激。谢谢!
2个回答

6
解决方案文件夹接口有一个“从文件添加”的方法:

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);

0

首先创建一个带有所需相对路径的“解决方案文件夹”。请注意,Visual Studio 2012不会创建具有相同相对路径的系统文件夹。

现在,在该“解决方案文件夹”中添加一个新项目,但在定义它时必须小心,以使系统中的相对路径与您的新“解决方案文件夹”的相对路径匹配。如果您想要的文件夹不存在,则VS 2012现在将为新项目创建它。

如果您想添加具有匹配相对路径的现有文件,则必须先从VS外部创建具有匹配系统相对路径的文件。然后您可以在Visual Studio中“添加现有文件”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接