以编程方式从解决方案中删除项目

时间:2014-03-11 15:07:53

标签: c# visual-studio-2012 projects-and-solutions envdte

我需要从一个非常大的解决方案中排除一些有问题的项目,以便使用this script进行自动构建。

我尝试编辑构建配置以排除这些项目,我也尝试从解决方案中卸载它们,但我发现使用我的脚本成功构建的唯一方法是从解决方案中删除这些项目

我需要以编程方式进行。

所以我用谷歌搜索了this answer但是现在这个特定的图书馆被分成了4个部分:

  • EnvDTE
  • EnvDTE80
  • EnvDTE90
  • EnvDTE100

我甚至无法弄清楚如何使用新的DTE,msdn上没有有用的文档(像往常一样)

我的代码是

System.Type type = System.Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
Object obj = System.Activator.CreateInstance(type, true);
EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)obj;

dte.Solution.Open(SlnPath);

但它永远停留在.Open上(我使用EnvDTE80,因为EnvDTE100没有.DTE2)

我也试过

Type latestSolution = Type.GetTypeFromProgID("VisualStudio.DTE.11.0", true);
EnvDTE100.Solution4 sln = (EnvDTE100.Solution4)Activator.CreateInstance(latestSolution, true);
sln.Open(SlnPath);

但在第二行我得到了

Unable to cast COM object of type 'System.__ComObject' to interface type 'EnvDTE100.Solution4'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{CDA7305C-78B6-4D9D-90AD-93EBE71F9341}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

任何建议?谢谢所有

1 个答案:

答案 0 :(得分:3)

调查这个项目: https://slntools.codeplex.com/

var sln = SolutionFile.FromFile(solutionFullPath);
var projList = sln.Projects;
var proj = sln.Projects.FindByFullName("ProjNameToRemove");
sln.Projects.Remove(proj);
sln.Save(); // or .SaveAs("NewName.sln");