Como faço para impedir que o IVSbuildPropertyStorage.SetItemattribute escape de caracteres especiais?
-
25-09-2019 - |
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.
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