2010-10-24 19 views
5

estoy trabajando en un proyecto de Visual Studio 2010 y la extensión Quiero añadir un atributo a un elemento de MSBuild, de la siguiente manera:¿Cómo evito que IVsBuildPropertyStorage.SetItemAttribute escape caracteres especiales?

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

Así que, ahora, la única manera que encontré es utilizando el método IVsBuildPropertyStorage.SetItemAttribute. Esto funciona bien para las cadenas 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 no quiero eso.

+0

¿Estás seguro de que MSBuild no aceptará las formas escapado de esos personajes? –

+0

Acepta formulario de escape para esos caracteres ... PERO no quiero escapar, quiero "% (Filename)% (Extension)" en mi archivo de proyecto. Si dejo que "% 29% 25% 28Filename% 29% 25% 28Extension% 29" msbuild tomará esto como una constante de cadena. –

Respuesta

2

Esta pregunta es un poco antigua, pero necesita una respuesta. VS2010 parece tener una mejor interfaz que puede establecer valores sin escaparse.

IVsBuildPropertyStorage2 interfaz

Implementado por el sistema del proyecto para dar sabores acceso al sistema de propiedad MSBuild. Esta interfaz proporciona más flexibilidad alrededor de las propiedades de configuración que IVsBuildPropertyStorage. Permite agregar un nuevo grupo de propiedades condicional y no escapa a los valores .

Es decir, la función de SetPropertyValueEx: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx

+1

La documentación no es correcta (no es su culpa). En realidad está buscando la interfaz ['IVsBuildPropertyStorage2'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.aspx), que agregó el [' SetPropertyValueEx'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx) método que se inicia en Visual Studio 2010. –

+0

Ah gracias, sabía que algo sospechoso estaba sucediendo, sin embargo, noté que esto es SetPropertyValue, no SetItemAttribute. No estoy seguro si eso ayuda. –

+0

Para ser sincero, es tan viejo que olvidé completamente lo que estaba haciendo, ya no estoy en .Net land. Pero mejor después que nunca :) –

Cuestiones relacionadas