我有一个解决方案,希望以编程方式将现有项目添加到其中。
使用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个项目需要数百次取消引用,因此是自动化的。
答案 0 :(得分:0)
技巧是将返回的项目添加到SolutionFolder
(请注意.Object
)
var referencesFolder = (SolutionFolder) solution
.AddSolutionFolder("References")
.Object;
referencesFolder.AddFromFile(fullPathToCsProj);
这可以访问根实体上的AddFromFile
,从而正确添加了项目