2010-10-24 3 views
5

Я работаю на Визуальный расширение Studio 2010. и я хочу, чтобы добавить атрибут к MSBuild Пункт следующим образом:Как предотвратить исключение IVsBuildPropertyStorage.SetItemAttribute из экранирования специальных символов?

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

Итак, пока единственный способ, которым я нашел, используя метод IVsBuildPropertyStorage.SetItemAttribute. Это прекрасно работает для простых строк, но когда я пытаюсь использовать символы, которые являются особенными для MSBuild, я получаю этот результат:

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

Это означает, что SetItemAttribute автоматически выходит из символов MSBuild, и я не хочу этого.

+0

Вы уверены, что MSBuild не будет принимать сбежавшую форму этих персонажей? –

+0

Он принимает экранированную форму для этих символов ... НО я не хочу убежать. Я хочу «% (имя файла)% (расширение)» в файле проекта. Если я дам «% 29% 25% 28Filename% 29% 25% 28Extension% 29» msbuild примет это как строчную константу. –

ответ

2

Этот вопрос немного стар, но ему нужен ответ. Кажется, что VS2010 имеет лучший интерфейс, который может устанавливать значения без экранирования.

IVsBuildPropertyStorage2 Интерфейс

Осуществляется системой проектов, чтобы дать Ароматизаторы доступ к системе свойств MSBuild. Этот интерфейс обеспечивает большую гибкость вокруг свойств настройки, чем у IVsBuildPropertyStorage. Он позволяет использовать , добавляя новую группу условных свойств, и не избегает значений .

именно функция SetPropertyValueEx: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx

+1

Неверная документация (не ваша ошибка). Вы действительно ищете интерфейс ['IVsBuildPropertyStorage2'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.aspx), который добавил [' SetPropertyValueEx'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivsbuildpropertystorage2.setpropertyvalueex.aspx), начиная с Visual Studio 2010. –

+0

Ах спасибо, я знал, что происходит что-то подозрительное, хотя, я заметил, что это SetPropertyValue, а не SetItemAttribute. Не уверен, что это помогает. –

+0

Честно говоря, он настолько стар, что я полностью забыл, что я делаю, я больше не нахожусь на .Net земле. Но лучше позже, чем никогда :) –