Расширяемость Visual Studio 2010 - переопределить действие сборки, не затрагивая файл cproj - PullRequest
2 голосов
/ 15 мая 2011

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

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

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

1 Ответ

2 голосов
/ 15 мая 2011

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

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

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

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

Полная реализация может быть найдена в https://github.com/follesoe/VSMonoTouch/blob/master/VSMonoTouch/VSMonoTouchPackage.cs.

...