Comment puis-je empêcher IVsBuildPropertyStorage.SetItemAttribute de s'échapper des caractères spéciaux?
-
25-09-2019 - |
Question
Je travaille sur une extension Visual Studio 2010 et je veux ajouter un attribut à un élément MSBuild, comme suit:
<EmbeddedResource Include="SomeFile.xml">
<FooAttribute>%(Filename)%(Extension)</FooAttribute>
</EmbeddedResource>
Alors, loin de la seule façon que je trouve utilise la méthode IVsBuildPropertyStorage.SetItemAttribute
. Cela fonctionne très bien pour les chaînes simples, mais lorsque je tente d'utiliser des caractères qui sont spéciaux pour MSBuild, j'obtenir ce résultat:
<EmbeddedResource Include="SomeFile.xml">
<FooAttribute>%29%25%28Filename%29%25%28Extension%29</FooAttribute>
</EmbeddedResource>
Cela signifie que SetItemAttribute
échappe automatiquement à partir des caractères msbuild et je ne veux pas.
La solution
Cette question est un peu vieux, mais a besoin d'une réponse. VS2010 semble avoir une meilleure interface qui peut définir des valeurs sans s'échapper.
IVsBuildPropertyStorage2 Interface
Mis en œuvre par le système de projet pour donner accès aux saveurs système de propriété MSBuild. Cette interface offre une plus grande souplesse la mise autour de propriétés que IVsBuildPropertyStorage. Il permet l'ajout d'un nouveau groupe de propriété conditionnelle et n'échappe pas à la valeurs.
A savoir la fonction SetPropertyValueEx : http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx