2010-04-22 231 views
2

想象一下,包含超過200個解決方案文件的文件夾結構適用於所有屬於一個軟件的項目。它們中的大多數生成共享庫,這些共享庫在自己的解決方案中包含的其他項目中引用。插件在可用時用「打開相應的解決方案」擴展解決方案資源管理器?

如果有可能在解決方案資源管理器中右鍵單擊這樣一個引用的程序集,然後有一個上下文菜單項(如「Open solution」和「在新的Visual Studio實例中打開解決方案」 (像這樣的)?

爲此,插件應該配置某種基礎目錄。從那裏它需要創建一個所有可用解決方案文件和包含項目的集合。當右鍵單擊引用時,它應該掃描項目文件以查找相應的輸出,並且 - 如果找到 - 顯示用於直接打開相應解決方案的菜單項(也許可以預取此信息)。

那麼......有沒有人已經創建了這樣的插件?有沒有人碰巧知道一個插件已經做了這樣的事情?

如果這兩個問題都沒有回答「是」: 任何人都可以根據設置的先決條件指出如何擴展解決方案資源管理器上下文菜單的方向嗎?

+0

您是否找到解決方案? – Amzath 2011-05-06 17:54:59

+0

在過去幾個月中,項目結構已經過優化,因此不再需要這種外掛程序。但是,我想我仍然會看看下面提到的MEF映射器......聽起來很有趣。 – Mephisztoe 2011-05-19 12:12:24

回答

0

Afaik你不能用VS MEF擴展來做到這一點,但對VS加載項可能並不是那麼困難。

  1. 使用MZTools樣本/模板編寫會增加你的菜單中相應的命令欄(這是上下文菜單彈出,其中包括解決方案資源管理器的命令)的一部分。我迷上的是SolutionProject。我想象還有一個叫做Reference的命令條。在下面的代碼ApplicationObjectEnvDTE類型的下面是一些代碼來搜索您需要的命令欄:

    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。

+0

顯然有人寫了一個MEF映射器,以便您可以編寫MEF組件來擴展VS菜單(也是解決方案資源管理器):http://coolthingoftheday.blogspot.com/2010/06/managed-menu-extension-mme-makes-adding html的 – Maslow 2010-08-24 14:07:55

相關問題