Wie verhindere ich IVsBuildPropertyStorage.SetItemAttribute von Sonderzeichen zu entkommen?
-
25-09-2019 - |
Frage
Ich arbeite an einem Visual Studio 2010-Erweiterung, und ich möchte ein Attribut zu einem MSBuild Artikel hinzuzufügen, wie folgt:
<EmbeddedResource Include="SomeFile.xml">
<FooAttribute>%(Filename)%(Extension)</FooAttribute>
</EmbeddedResource>
So weit der einzige Weg, ich fand, ist die Methode mit IVsBuildPropertyStorage.SetItemAttribute
. Dies funktioniert gut für einfache Strings, aber wenn ich versuche, Zeichen zu verwenden, die zu MSBuild speziell sind, ich dieses Ergebnis erhalten:
<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 das nicht.
Lösung
Diese Frage ist ein bisschen alt, aber braucht eine Antwort. VS2010 scheint bessere Schnittstelle zu haben, die Werte ohne Flucht einstellen können.
IVsBuildPropertyStorage2 Schnittstelle
vom Projektsystem implementiert Aromen um den Zugang zu dem MSBuild-Eigenschaftensystem. Diese Schnittstelle bietet mehr Flexibilität um das Festlegen von Eigenschaften als IVsBuildPropertyStorage. Es ermöglicht eine neue bedingte Eigenschaft Gruppe hinzufügen und nicht entkommt der Werte.
Das heißt, die Funktion SetPropertyValueEx : http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx