2013-06-04 6 views
5

Come posso passare una proprietà personalizzata MsBuild al motore di compilazione di Visual Studio dall'estensione di Visual Studio (desidero scrivere un componente aggiuntivo personalizzato)? Proprio come Visual Studio stesso sta passando proprietà come $(Configuration) e $(Platform), vorrei collegarmi a un processo di generazione e passare la mia proprietà (ad esempio $(MyCustomProperty) = "foobar"). So che può essere realizzato utilizzando la riga di comando MsBuild (/p:Property), ma voglio farlo da un'estensione.Passare le proprietà del progetto personalizzato dall'estensione di Visual Studio durante la compilazione

Ecco un esempio di ciò che vorrei compilarsh: una casella di testo sulla barra degli strumenti di Visual Studio, in cui l'utente può digitare del testo, un valore che vorrei passare per compilare il motore.

Poi nel Csproj:

<PropertyGroup> 
    <MyCustomProperty Condition=" '$(MyCustomProperty)' == '' ">DefaultValue</MyCustomProperty> 
</PropertyGroup> 

<Target Name="AfterBuild" Condition=" '$(MyCustomProperty)' = 'DoAfterBuild' "> 
    ... 
</Target> 

Quindi indirizzare AfterBuild sarebbe su stuttura solo se l'utente digita DoAfterBuild nella casella di testo della mia estensione

+0

Come Visual Studio Extension invocato MSBUILD? – Nicodemeus

+0

@NickCarlson - Non voglio richiamare MsBuild, ma i file .csproj SONO script MsBuild e Visual Studio sta passando i valori effettivi delle variabili $ (Platform) e $ (Configuration) durante la compilazione. Voglio avere il valore $ (MyOwnProperty) passato a questo script, quindi posso usarlo (ad esempio ) –

+0

Nel tuo post originale hai detto vuoi essere in grado di definire la tua proprietà tramite un'estensione di Visual Studio, ma ora stai dicendo che non vuoi invocare MSBUILD. Stai scrivendo la tua estensione e vuoi definire le tue proprietà personalizzate? Forse un esempio di codice potrebbe aiutare a illustrare il problema. – Nicodemeus

risposta

3

È possibile richiedere il servizio IVsBuildPropertyStorage, ha seguente metodo:

SetPropertyValue Used by a project subtype to set an MSBuild property value. 

Qualcosa del genere:

EnvDTE.Project proj = ...; 
var sol = Package.GetGlobalService(typeof(VsSolution)) as IVsSolution; 
IVsHierarchy hier; 
sol.GetProjectOfUniqueName(p.UniqueName, out hier); 
var storage = hier as IVsBuildPropertyStorage; 
storage.SetPropertyValue(..); 

Maggiori informazioni: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage.aspx

Problemi correlati