【发布时间】:2014-03-11 15:07:53
【问题描述】:
我需要从一个非常大的解决方案中排除一些错误的项目,以便使用 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)).
有什么建议吗?谢谢大家
【问题讨论】:
-
除了从解决方案中删除项目外,您还可以创建一个新的解决方案配置并从该配置中排除项目(菜单
Build -> Configuration Manager)。可能比删除它们更容易。 -
SLN 文件通常是文本文件 (XML)。所以一个坏的解决方法是将它作为文件打开,解析它,删除项目并保存它。
-
@Markus 它不起作用,.sln 文件没有改变,我的脚本继续构建所有项目(构建脚本-> stackoverflow.com/questions/22227804/…)
-
我认为 markus 的意思是维护另一个解决方案配置,其中您不想构建的项目以这种方式配置 - 不是动态创建该配置 - 将其放在 tfs 中
-
@Doc:也许我误解了什么,但据我了解您的要求,它们可以通过 tf.exe、MSBuild 和项目配置的组合来解决 - 根本不需要编码或更改解决方案.只是为了理解:您选择采用 EnvDTE 方式的原因是什么?如果您在问题中更详细地描述您的要求,也许有人可以提出一种不同的方法来解决要求并修复/绕过作为问题原因的实际问题。
标签: c# visual-studio-2012 projects-and-solutions envdte