Como faço para impedir que o IVSbuildPropertyStorage.SetItemattribute escape de caracteres especiais?

StackOverflow https://stackoverflow.com/questions/4008227

Pergunta

Estou trabalhando em uma extensão do Visual Studio 2010 e quero adicionar um atributo a um item MSBuild, como segue:

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

Então, longe a única maneira que encontrei é usar o método IVsBuildPropertyStorage.SetItemAttribute . Isso funciona bem para seqüências simples, mas quando tento usar caracteres especiais para o msbuild, recebo este resultado:

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

Isso significa que SetItemAttribute escapa automaticamente dos caracteres msbuild e eu não quero isso.

Foi útil?

Solução

Esta pergunta é um pouco antiga, mas precisa de uma resposta. O VS2010 parece ter uma interface melhor que pode definir valores sem escapar.

Interface IVSbuildPropertyStorage2

Implementado pelo sistema de projeto para dar aos sabores acesso ao sistema de propriedades MSBuild. Essa interface fornece mais flexibilidade em torno das propriedades de definição do que o IVSBuildPropertyStorage. Permite adicionar um novo grupo de propriedades condicionais e não escapa dos valores.

Ou seja, a função SetPropertyValueEx: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertyStorage2.SetPropertyValueEx.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top