如何以编程方式将现有项目添加到 Visual Studio 中的解决方案文件夹

How to programatically add an existing project to a solution folder in Visual Studio

我有一个解决方案,我想以编程方式将现有项目添加到其中。

使用 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 个项目需要数百次取消引用,因此需要自动化。

诀窍是将返回的项目添加到 SolutionFolder(注意 .Object

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

referencesFolder.AddFromFile(fullPathToCsProj);

这样可以访问正确添加项目的根实体上的 AddFromFile