开发Visaul Studio 插件,实现功能:把现有的项目添加到指定的解决方案中。本来想直接操作sln文件。但是一查发现Visaul Studio SDK中是有专门对应的方法 AddFromFile ,可参考这里:https://docs.microsoft.com/zh-cn/dotnet/api/envdte._solution.addfromfile?view=visualstudiosdk-2019
现在的场景是利用插件右键项目弹出菜单来选择相关的功能,在VS2019中验证是可行的,代码如下:
var dte = package.GetServiceAsync(typeof(DTE)).ConfigureAwait(false).GetAwaiter().GetResult() as DTE2;
string projectName = "vkt.demo.vsix";
UIHierarchy uih = (UIHierarchy)dte.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Object;
Array selectedItems = (Array)uih.SelectedItems;
foreach (UIHierarchyItem selItem in selectedItems){
Solution sln = selItem.Object as Solution;
if (sln != null)
{
string slnDir = Path.GetDirectoryName(solution.FullName);
string projectPath = Path.Combine(slnDir,projectName,$"{projectName}.csproj");
sln.AddFromFile(projectPath);
break;
}
}