【问题标题】:Add an existing project to solution folder using PowerShell使用 PowerShell 将现有项目添加到解决方案文件夹
【发布时间】:2012-07-11 05:28:04
【问题描述】:

我正在使用 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,所以它看起来像这样(虚拟图像,红色箭头显示我想要 Project3 的位置):

如何使用 Powershell(以及可选的 EnvDTE)完成此任务?任何示例代码将不胜感激。谢谢!

【问题讨论】:

    标签: visual-studio powershell envdte


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多