2010-10-24 10 views
5

Ich arbeite an einem Visual Studio 2010-Erweiterung, und ich möchte ein Attribut zu einem MSBuild Artikel hinzuzufügen, wie folgt:Wie verhindere ich, dass IVsBuildPropertyStorage.SetItemAttribute Sonderzeichen löscht?

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

So weit der einzige Weg, ich ist die Methode IVsBuildPropertyStorage.SetItemAttribute Verwendung gefunden. Dies funktioniert für einfache Strings in Ordnung, aber wenn ich versuche, Zeichen zu verwenden, die zu MSBuild speziell sind, ich dieses Ergebnis:

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

Das bedeutet, dass SetItemAttribute automatisch aus MsBuild Zeichen entkommt, und ich will nicht, dass.

+0

Sind Sie sicher, dass MSBuild nicht die entkam Formen dieser Zeichen akzeptieren? –

+0

Es akzeptieren maskierte Form für diese Zeichen ... ABER ich will nicht entkommen Ich will "% (Dateiname)% (Erweiterung)" in meiner Projektdatei. Wenn ich "% 29% 25% 28Filename% 29% 25% 28Extension% 29" lassen möchte, nimmt msbuild dies als String-Konstante. –

Antwort

2

Diese Frage ist ein bisschen alt, aber braucht eine Antwort. VS2010 scheint eine bessere Schnittstelle zu haben, die Werte setzen kann, ohne zu entkommen.

IVsBuildPropertyStorage2 Schnittstelle

vom Projektsystem implementiert Aromen Zugang zum MSBuild-Eigenschaftensystem zu geben. Diese Schnittstelle bietet mehr Flexibilität zum Festlegen von Eigenschaften als IVsBuildPropertyStorage. Es ermöglicht Hinzufügen einer neuen bedingten Eigenschaft Gruppe und nicht die Werte entkommen.

nämlich die Funktion SetPropertyValueEx: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx

+1

Die Dokumentation ist nicht korrekt (nicht Ihre Schuld). Sie suchen tatsächlich nach der Schnittstelle ['IVsBuildPropertyStorage2'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.aspx), die den [' SetPropertyValueEx'] hinzugefügt hat (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx) Methode, die in Visual Studio 2010 beginnt. –

+0

Ah danke, ich wusste, dass etwas Fischiges vorging, obwohl ich festgestellt habe, dass dies SetPropertyValue ist, nicht SetItemAttribute. Nicht sicher, ob das hilft. –

+0

Um ehrlich zu sein, es ist so alt, dass ich komplett vergessen habe, was ich tat, ich bin nicht mehr in .Net Land. Aber besser später als nie :) –