#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 .