我有一个解决方案,我想以编程方式添加现有项目。
使用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);
但是将现有项目添加到解决方案文件夹却不是。
请注意,这不是使用大多数谷歌搜索结果给出的模板
运用
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
,从而正确添加项目