Visual Studio 2010 插件:如何定位项目引用?

4
如何在Visual Studio 2010解决方案中以编程方式查找并迭代所有项目和dll引用?我可以遍历所有项目并找到Project.ProjectItems属性和Project.Properties,但没有找到任何引用引用的方法。这是在插件中发生的,因此建议使用DTE解决方案来遍历文件。根据下面的答案提出的解决方案:您需要找到并包含对VSLangProj.dll的引用(例如在Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies中),然后可以像这样迭代所有选定的项目的项目和DLL引用:
foreach (Project project in (object[])_applicationObject.ActiveSolutionProjects)
{
    VSProject vsProject = project.Object as VSProject;
    if (vsProject != null)
    {
        foreach (Reference reference in vsProject.References)
        {
              // Do cool stuff here
        }
    }
}

针对Tomas Lycken的信息:

_applicationObject是我的插件中的一个私有成员,例如:

private DTE2 _applicationObject;

我在连接中进行了如下设置:

...

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;

我正在尝试重现这个。如何实例化“_applicationObject”,它是什么类型? - Tomas Aschan
谢谢!我试图在一个简单的宏中做一个简化版本。结果发现静态属性DTE.ActiveSolutionProjects让我达到了想要的效果,所以我不需要实例化_applicationObject。如果没有DTE提示,我就找不到它了。非常感谢! - Tomas Aschan
2个回答

3
C#和VB项目都有一个“Object”属性,您可以将其转换为VSProject,从中可以访问引用。这些页面上有示例VB代码。

3
您可以通过 Project 对象的 Object 属性访问 VB/C# 特定的 VSProject 对象。VSProject 有一个 References 属性,通过它您可以深入到各个引用。考虑到并非所有在 Visual Studio 中加载的项目都支持对 .NET 程序集的引用,因此必须使用针对 C#/VB(和其他 .NET 语言)的专门对象,而不是核心 Project 对象。请保留 HTML 标签。

两个答案都是正确的,且同时到达,但我把它给你们是因为额外有用的评论。非常感谢。 - iCollect.it Ltd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接