2

想象一个文件夹结构,其中包含 200 多个解决方案文件,这些文件都属于一个软件。他们中的大多数生成共享库,这些库在包含在自己的解决方案中的其他项目中被引用。

如果有可能在解决方案资源管理器中右键单击此类引用的程序集,然后有一个上下文菜单项,例如“打开解决方案”和“在新的 Visual Studio 实例中打开解决方案”(类似这样)?

为此,应为插件配置某种基本目录。从那里它需要创建所有可用解决方案文件和包含的项目的集合。当引用被右键单击时,它应该扫描项目文件以获取相应的输出,并且 - 如果找到 - 显示用于直接打开相应解决方案的菜单项(也许也可以预取此信息)。

嗯...你们中有人已经创建了这样的插件吗?有没有人碰巧知道一个已经做了这样的事情的插件?

如果这些问题都没有得到“是”的回答:任何人都可以指出如何根据设置的先决条件扩展解决方案资源管理器上下文菜单的方向吗?

4

1 回答 1

0

Afaik 你不能使用 VS MEF 扩展来做到这一点,但使用 VS 插件可能并不难。

  1. 使用MZTools示例/模板编写将您的菜单添加到适当命令栏的部分(这是包含解决方案资源管理器命令的上下文菜单弹出窗口)。我迷上的是SolutionProject。我想还有一个 commandBar 叫做Reference. 在下面的代码ApplicationObject是类型EnvDTE这里有一些代码来搜索你需要的命令栏:

        private void IterateAllCommandBars( )
    {
        var commandBars =(CommandBars)ApplicationObject.CommandBars;
        Debug.Indent( );
        foreach (CommandBar commandBar in commandBars)
        {
            Debug.WriteLine(commandBar.Name);
        }
        Debug.Unindent( );
    }
    
  2. 当您的扩展加载(通常在 中OnStartupComplete)时,您可以查找您的先决条件并设置一个字典,将引用映射到解决方案路径。

  3. 使用在您的加载项上调用的 QueryStatus 调用来启用/禁用基于选择的引用(如果有)的菜单。例如,如果有的话,我会得到选定的项目:

    private static Project GetProject(DTE applicationObject)
    {
        if (applicationObject.Solution==null||applicationObject.Solution.Projects==null||applicationObject.Solution.Projects.Count<1)
            return null;
        if (applicationObject.SelectedItems.Count==1&&applicationObject.SelectedItems.Item(1).Project!=null)
            return applicationObject.SelectedItems.Item(1).Project;
        return null;
    }
    
  4. 当用户单击有效选项时,执行您要调用的命令。我不确定如何或是否可以让它在现有的 VS 实例中打开解决方案,但在新的 VS 中打开会很容易。Process.Start(ProjectFullPath);或者可能是 SolutionFullPath。

于 2010-08-24T14:05:36.427 回答