2009-11-22 48 views
3

我正在試驗一個Visual Studio 2010擴展,我需要使用IMouseProcessor公開的事件。VS 2010鼠標處理器擴展 - 不工作

據我可以告訴從文檔,我應該創建一個IMouseProcessorProvider和導出使用MEF,以便它可以由Visual Studio自動拾取。

我創建了這個類:

[Export(typeof(IMouseProcessorProvider))] 
[ContentType("code")] 
internal sealed class MouseProcessorFactory : IMouseProcessorProvider 
{   
    public IMouseProcessor GetAssociatedProcessor(IWpfTextView wpfTextView) 
    { 
     return new MouseProcessor(); 
    } 
} 

當我運行Visual Studio的實驗實例中,我的分機是在擴展管理器中可見。但我的定製鼠標處理器供應商從未被調用。我錯過了什麼/我做錯了什麼?

回答

5

直接從本(不是我)的網站摘自:

Extending Visual Studio 2010 UML Designers – Part 1: Getting Started

VSSDK Beta 2中的Bug變通辦法

不幸的是在當前的VSSDK Beta 2的一對夫婦的bug,我們必須解決。有人告訴我,他們將被固定在一個更新版本,但在那之前,讓我帶你通過,使這項工作所需的項目清理:

第1步 - 調整中的.csproj文件

  1. 右鍵單擊您的項目並選擇「卸載項目」。
  2. 再次右鍵單擊您的項目並選擇「編輯您的項目名稱.sproj」
  3. 在最上面的屬性組中,查找XML標記<IncludeAssemblyInVSIXContainer>。它將被設置爲false。將其更改爲true。
  4. 保存.csproj文件並將其重新加載到Visual Studio中。

第2步 - 調整的.vsixmanifest文件

  1. 上的文件右鍵單擊 「source.extension.vsixmanifest」,並選擇查看代碼
  2. 在文件的底部部分稱爲添加以下行。 (是的,這些豎線是很重要的。)

    <MefComponent>|Yourprojectname|</MefComponent>

  3. 保存並關閉文件。

+0

這幫了很大忙。問題部分在於IncludeAssemblyInVSIXContainer設置爲false。 – driis 2009-11-24 15:37:30

2

我相信你還需要添加一個TextViewRole屬性。

[TextViewRole(PredefinedTextViewRoles.Editable)] 
+0

我也想你的建議,但具有相同的結果,很遺憾。 – driis 2009-11-22 14:39:02

3

我花了一段時間才能找到解決這個問題的完整的解決方案,所以我將張貼在這裏的完整解決方案:

  1. 作爲建議的280Z28,有在SDK的Beta版中的錯誤2.您需要手動編輯.csproj以確保您的程序集包含在生成的VSIX文件中。
  2. 正如JaredPar回答的那樣,TextViewRole attribtute應該被添加到IMouseProcessorProvider實現中。
  3. 最後,IMouseProcessorProvider也應該用Name屬性裝飾。

總而言之,此代碼的工作:

[Export(typeof(IMouseProcessorProvider))] 
[ContentType("code")] 
[TextViewRole(PredefinedTextViewRoles.Editable)] 
[Name("mouseproc")] 
internal sealed class MouseProcessorFactory : IMouseProcessorProvider 
{   
    public IMouseProcessor GetAssociatedProcessor(IWpfTextView wpfTextView) 
    {    
     return new MouseProcessor(); 
    } 
}