Расширяемость Visual Studio 2010 — переопределение действия сборки без влияния на файл cproj

#visual-studio-2010 #xamarin.ios #vs-extensibility

#visual-studio-2010 #xamarin.ios #vs-расширяемость

Вопрос:

Я работаю над способом создания проектов MonoTouch в Visual Studio 2010, не требуя изменения файла cproj. Я почти на месте, но последним шагом являются файлы *.xib, у которых есть «Страница» действия сборки в проектах MonoTouch.

В Visual Studio 2010 страница действия bild вызовет компилятор XAML, поэтому для сборки проекта в VS2010 мне нужно установить для действия сборки значение None. Проблема при этом заключается в том, что файл .cproj изменен, и мне нужно вернуть его на страницу перед сборкой в MonoTouch.

Итак, мой вопрос примерно такой. Используя модель расширяемости Visual Studio, возможно ли «перехватывать» определенные типы файлов и «игнорировать» их или изменять их тип сборки? Или Visual Studio все создает с использованием msbuild и, следовательно, заботится только о том, что на самом деле написано в файле .cproj?

Ответ №1:

В итоге я решил эту проблему, используя несколько иную стратегию. Вы можете прослушивать различные события сборки для объекта DTE и запускать код в вашем расширении Visual Studio 2010 до и после сборки.

 _dte.Events.BuildEvents.OnBuildBegin  = MakeXibsNone;
_dte.Events.BuildEvents.OnBuildDone  = MakeXibsPage;
  

Используя эту стратегию, я могу изменить действие сборки на None до сборки, а затем вернуться к странице после сборки. Код для изменения типа сборки просто перечисляет все проекты в решении и все элементы проекта в проекте. Он находит все файлы с расширением .xib и изменяет действие сборки, используя следующий код:

 xib.Properties.Item("ItemType").Value = "Page";
xib.Properties.Item("ItemType").Value = "None";
  

Полную реализацию можно найти по адресу https://github.com/follesoe/VSMonoTouch/blob/master/VSMonoTouch/VSMonoTouchPackage.cs .