2010-10-24 6 views
5

Sto lavorando su uno Studio 2010 estensione visiva e voglio aggiungere un attributo a un elemento MSBuild, come segue:Come impedire a IVsBuildPropertyStorage.SetItemAttribute di eseguire l'escape di caratteri speciali?

<EmbeddedResource Include="SomeFile.xml"> 
     <FooAttribute>%(Filename)%(Extension)</FooAttribute> 
</EmbeddedResource> 

Quindi, di gran lunga l'unico modo che ho trovato è con il metodo IVsBuildPropertyStorage.SetItemAttribute. Questo funziona bene per semplici stringhe, ma quando provo a utilizzare i caratteri che sono speciali per MSBuild, ottengo questo risultato:

<EmbeddedResource Include="SomeFile.xml"> 
     <FooAttribute>%29%25%28Filename%29%25%28Extension%29</FooAttribute> 
</EmbeddedResource> 

Ciò significa che SetItemAttribute sfugge automaticamente da personaggi MSBuild e non voglio questo.

+0

Sei certo che MSBuild non accetterà le forme sfuggiti di questi personaggi? –

+0

Accetta caratteri di escape per quei caratteri ... MA non voglio uscire voglio "% (Nome file)% (Estensione)" nel mio file di progetto. Se lascio "% 29% 25% 28Filename% 29% 25% 28Extension% 29" msbuild prenderà questo come costante di stringa. –

risposta

2

Questa domanda è un po 'vecchia, ma ha bisogno di una risposta. VS2010 sembra avere un'interfaccia migliore che può impostare valori senza fuggire.

IVsBuildPropertyStorage2 interfaccia

Implementato dal sistema del progetto di dare sapori accesso al sistema di proprietà MSBuild. Questa interfaccia offre una maggiore flessibilità per l'impostazione delle proprietà rispetto a IVsBuildPropertyStorage. Consente di aggiungere a un nuovo gruppo di proprietà condizionali e non sfugge ai valori .

Vale a dire la funzione SetPropertyValueEx: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx

+1

La documentazione non è corretta (non è colpa tua). Stai effettivamente cercando l'interfaccia ['IVsBuildPropertyStorage2'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.aspx), che ha aggiunto [' SetPropertyValueEx'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx) metodo che inizia in Visual Studio 2010. –

+0

Ah grazie, sapevo che stava succedendo qualcosa di strano, tuttavia, ho notato che questo è SetPropertyValue, non SetItemAttribute. Non sono sicuro che questo aiuti. –

+0

Per essere onesti, è così vecchio che ho completamente dimenticato quello che stavo facendo, non sono più in. Net land. Ma meglio dopo che mai :) –