Как предотвратить экранирование специальных символов IVsBuildPropertyStorage.SetItemAttribute? - PullRequest
6 голосов
/ 24 октября 2010

Я работаю над расширением Visual Studio 2010 и хочу добавить атрибут к элементу MSBuild следующим образом:

 <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, и я не хочу этого.

1 Ответ

2 голосов
/ 14 августа 2014

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

Интерфейс IVsBuildPropertyStorage2

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

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

...