¿Cómo puedo evitar que se escape IVsBuildPropertyStorage.SetItemAttribute caracteres especiales?
-
25-09-2019 - |
Pregunta
Estoy trabajando en una extensión de Visual Studio 2010 y quiero añadir un atributo a un elemento de MSBuild, de la siguiente manera:
<EmbeddedResource Include="SomeFile.xml">
<FooAttribute>%(Filename)%(Extension)</FooAttribute>
</EmbeddedResource>
Así que, ahora, la única manera que encontré es utilizando el método IVsBuildPropertyStorage.SetItemAttribute
. Esta bien que funciona para cuerdas simples, pero cuando intento utilizar caracteres que son especiales para MSBuild, me sale el siguiente resultado:
<EmbeddedResource Include="SomeFile.xml">
<FooAttribute>%29%25%28Filename%29%25%28Extension%29</FooAttribute>
</EmbeddedResource>
Esto significa que SetItemAttribute
escapa automáticamente de caracteres MSBUILD y yo no quiero eso.
Solución
Esta pregunta es un poco viejo, pero necesita una respuesta. VS2010 parece tener una mejor interfaz que puede establecer los valores sin escapar.
IVsBuildPropertyStorage2 interfaz
Implementado por el sistema del proyecto para dar sabores acceso a la sistema de propiedad MSBuild. Esta interfaz proporciona más flexibilidad alrededor de configuración de las propiedades que IVsBuildPropertyStorage. Permite la adición de un nuevo grupo de propiedades condicional y no escapa a la valores.
Es decir, la función SetPropertyValueEx : http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx