2013-07-01 13 views
14

Sto cercando di creare un sistema di progetto personalizzato per Visual Studio. Ma alcuni dei materiali online mi hanno un po 'confuso. Si riferiscono tutti a VSPackages e, per quanto posso dire, sono cose molto diverse da VSIX. La mia funzionalità di estensione esistente è offerta tramite VSIX. È impossibile offrire un nuovo tipo di progetto tramite VSIX?Creazione del sistema di progetto Visual Studio con MEF e VSIX

Ho anche guardato il loro codice di esempio ed è qualcosa di orribile COM. Non ci sono nuove cose di MEF brillanti per progetti come quello di estendere l'editor con evidenziazione della sintassi e cose del genere?

+0

Si sta provando a 1) aggiungere un modello di progetto che un utente può utilizzare per creare automaticamente un file '.csproj' e associato (o progetto per un'altra lingua inclusa in Visual Studio), oppure 2) aggiungere il supporto per un intero nuovo sistema di progetto basato su file chiamati '* .myproj' (per esempio). –

+0

Ho davvero bisogno della risposta al mio commento precedente per procedere. Ho creato più estensioni che rientrano in entrambe queste categorie e che saranno in grado di aiutarti, ma non voglio passare un po 'di tempo solo per scoprire che ho risposto alla domanda sbagliata. –

+0

Decisamente il secondo. Sto cercando di integrare una nuova lingua. – Puppy

risposta

11

Non c'è supporto/API MEF per l'implementazione del supporto per un nuovo sistema di progetto. Esistono due modi per implementare il supporto.

  1. Implementare direttamente l'API di Visual Studio. Questa opzione è estremamente complicata, ma non ti limita a un particolare sistema di build o formato di file. Se scegli questo, sei praticamente da solo.
  2. Utilizzare la libreria Managed Package Framework (MPF) come punto di partenza. Questa opzione è molto più semplice, a patto che ti limiti a utilizzare MSBuild per il formato del tuo progetto e il sistema di creazione.

Suppongo che tu stia andando con l'opzione # 2.

La libreria MPF era una volta parte di Visual Studio SDK, ma alla fine è stata spostata in CodePlex nel periodo in cui è stato rilasciato Visual Studio 2010. Piuttosto che usare quello, questo post si concentrerà su una versione di questa libreria che ho modificato e rilasciato su GitHub. Questa versione della libreria presenta molti vantaggi rispetto ad altre versioni precedenti, alcune delle quali sono documentate nel readme che mostra quando si segue questo link.

Managed Package Framework for Visual Studio 2010

per implementare il supporto per la lingua, è necessario effettuare le seguenti operazioni.

  1. Implementare la riga di comando Supporto MSBuild per la tua lingua.

    • Creare un file di progetto.
    • Creare uno o più MSBuild *.targets necessari per la creazione di progetti nella propria lingua.
    • Ciò probabilmente implicherà la creazione di un assieme per contenere anche attività di compilazione personalizzate.
  2. Creare un VSPackage per implementare il supporto per il progetto MSBuild all'interno dell'IDE. Ciò consentirà a Visual Studio di aprire/salvare/chiudere i file di progetto con l'estensione scelta.

  3. Creare uno o più "Modelli di progetto" per consentire agli utenti di creare un nuovo progetto per la propria lingua all'interno dell'IDE.

  4. Creare uno o più "modelli di elementi di progetto" per consentire agli utenti di aggiungere facilmente file al progetto.

Questa risposta sfiora solo la superficie in questo momento, ma hai fatto una domanda molto ampia e purtroppo non ho tempo ora per entrare nel dettaglio su tutti gli aspetti di questo.

Modifica: Per quanto riguarda la distribuzione, è possibile e deve includere il VSPackage all'interno di un VSIX. Tuttavia, poiché la tua estensione dovrà installare le estensioni MSBuild in una posizione in cui i progetti utente hanno accesso standard a (C:\Program Files\MSBuild o C:\Program Files (x86)\MSBuild), dovrai completare l'intero processo in un programma di installazione per fornire un'installazione personalizzata. Raccomando di usare WiX per questo; non è banale ma è gratuito, funziona in modo eccezionalmente e in modo affidabile, e non è troppo impegnativo da usare una volta capito.

+0

Questo sembra un buon inizio, ma ho un paio di domande. Ad esempio, come parte della mia estensione esistente, carico e lavoro sui file, dove semplicemente rieseguire il compilatore per quel file sprecherebbe molto lavoro. Se MSBuild è un accordo per la sola riga di comando, significa che non posso riutilizzare il lavoro che ho già fatto? In secondo luogo, preferirei averlo insieme con il mio attuale materiale VSIX basato su MEF, quindi mi piacerebbe chiedere come VSPackages gioca con VSIX (se in effetti lo fanno). – Puppy

+0

@DeadMG Ho modificato la mia risposta per rispondere alla domanda sull'imballaggio/distribuzione. Non ho abbastanza informazioni per rispondere alla domanda sul riutilizzo del codice. –

2

Sfortunatamente, l'API di Visual Studio è davvero brutta. Se farai una profonda integrazione con i meccanismi interni di Visual Studio, dovrai utilizzare "orribile COM". Direttamente o tramite wrapper gestiti (Interop Assembly). Per evitare confusione, cerco di spiegare i concetti di estensibilità di Visual Studio e di pubblicare link utili alla documentazione. Spero ti possa aiutare.

È possibile estendere Visual Studio utilizzando macro, aggiunte, VSPackages ed estensioni MEF (Managed Extensibility Framework). A partire da Visual Studio 2012, Estensioni di Visual Studio no supporta più macro! Tuttavia, utilizzare VSPackages fornire più opportunità. Per maggiori dettagli si veda

A partire da Visual Studio 2010, è possibile utilizzare MEF per personalizzare Visual Studio solo editore Tuttavia, è possibile combinare un'estensione MEF con un VSPackage. Come farlo puoi leggere i seguenti link.

A mio parere l'uso di MEF ha vantaggi minori.

Per creare un tipo di progetto personalizzato per Visual Studio è necessario utilizzare Modelli di Visual Studio. Questa è tecnologia separata da VSPackage e altri metodi estesi. Permette a Visual Studio di supportare nuovi tipi di progetti e di aggiungere un nuovo wizard di progetto.

per distribuire il pacchetto è possibile utilizzare VSIX o MSI file. Ognuno di essi può contenere VSPackage, Visual Studio Templates, librerie dipendenti, icone, file di configurazione, ecc. I programmi di installazione VSIX e MSI supportano il portale visualstudiogallery. Tuttavia, Visual Studio può aggiornare automaticamente solo il file VSIX dalla visualstudiogallery.

Per impostazione predefinita, VSIX (come pacchetto di distribuzione) e VSPackage (come punto iniziale del plugin) sono nello stesso progetto, ma puoi dividerlo in diversi progetti o usare msi invece vsix.

+3

Questo in realtà non risponde alla domanda. A parte il fatto che essenzialmente le risposte solo per link non sono risposte, ho visitato molti di questi link e non è niente che non abbia già letto. Non rispondono alla domanda principale. Mi sembra che tu abbia appena collegato ogni articolo che potresti trovare sulle estensioni VS. – Puppy

+0

D'accordo con Puppy. Da nessuna parte nella tua risposta ti riferisci a un 'Project System' (PS). PS non sono ** solo 'Visual Studio Templates'. Anche il tuo post verosimilmente ** viola ** le linee guida contenute in _ [La tua risposta è in un altro castello: quando una risposta non è una risposta?] (Http://meta.stackexchange.com/questions/225370/your-answer -is-in-un-altro-castello-quando-è-una-risposta-non-una-risposta) _ – MickyD

Problemi correlati