Domanda

sto sperimentando con Visual Studio 2010 estensione, in cui ho bisogno di lavorare con gli eventi esposti da IMouseProcessor.

Per quanto posso dire dalla documentazione, dovrei creare un IMouseProcessorProvider ed esportazione sta usando MEF, in modo che possa essere automaticamente raccolto da Visual Studio.

Ho creato questa classe:

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

Quando eseguo l'istanza sperimentale di Visual Studio, la mia estensione è visibile in Extension Manager. Ma il mio fornitore del processore del mouse personalizzato non viene mai chiamato. Mi sto perdendo qualcosa / Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Preso direttamente da questo sito (non mia):

L'estensione Visual Studio 2010 UML Designers - Parte 1: Informazioni preliminari

Soluzioni alternative

VSSDK Beta 2 Bug

Purtroppo ci sono un paio di bug nella corrente VSSDK Beta 2 che dobbiamo risolvere. Mi è stato detto che saranno fissati in una release di aggiornamento ma fino ad allora, lasciate che vi porterà attraverso la pulizia del progetto necessario per fare questo lavoro:

Fase 1 - Tweak il file Csproj

  1. Fare clic destro sul progetto e scegliere "Progetto Scaricare".
  2. Fare clic destro di nuovo sul vostro progetto e scegliere "Modifica Yourprojectname.csproj"
  3. Nel gruppo di proprietà più in alto, cercare il tag XML <IncludeAssemblyInVSIXContainer>. Sarà impostata su false. Modificarlo a true.
  4. Salvare il file .csproj e ricaricarlo in Visual Studio.

Fase 2 - Tweak il file .vsixmanifest

  1. Fare clic destro sul file "source.extension.vsixmanifest" e scegliere Visualizza codice
  2. Nella parte inferiore del file nella sezione chiamata aggiungere la seguente riga. (Sì, quelle barre verticali sono importanti.)

    <MefComponent>|Yourprojectname|</MefComponent>

  3. Salvare e chiudere il file.

Altri suggerimenti

Mi c'è voluto un po 'per trovare la soluzione completa a questo problema, così ho pubblicheremo la soluzione completa qui:

  1. Come suggerito da 280Z28, c'è un bug nel SDK per Beta 2. È necessario modificare il .csproj manualmente per garantire che il montaggio è incluso nel file VSIX generato.
  2. Come rispose JaredPar, l'attribtute TextViewRole deve essere aggiunto alla realizzazione IMouseProcessorProvider.
  3. Infine, l'IMouseProcessorProvider dovrebbe anche essere decorato con un attributo name.

Tutto sommato, questo codice funziona:

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

Credo che hai bisogno di aggiungere un attributo TextViewRole pure.

[TextViewRole(PredefinedTextViewRoles.Editable)]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top