Проверьте свойство CopyLocal всех ссылок пост / во время сборки в многопроектном решении (Multi Xap) - PullRequest
0 голосов
/ 02 марта 2012

У меня есть решение Silverlight, в котором есть несколько проектов Silverlight (Views), которые все компилируются в свой собственный файл .Xap.

Существует один «главный» проект, который обрабатывает динамическую загрузку файлов Xap, который работает довольно хорошо.

Но теперь мне нужно убедиться, что для всех ссылок установлено CopyLocal = false во всех проектах просмотра. Только «главный» проект может иметь CopyLocal = true.

Это означает, что файлы Xap, сгенерированные представлениями, остаются довольно маленькими.

То, что я хотел бы сделать, это проверить сообщение или в процессе сборки, чтобы увидеть, есть ли у какого-либо из проектов View ссылка с CopyLocal = true.

Что было бы разумным способом сделать это? Использование внешнего инструмента в событии Post Build? Или, возможно, дополнение для Visual Studio? Или для этого создаем макрос в Visual Studio?

Я рассмотрел использование .extmap с кэшированием сборок, но, поскольку в нем необходимо указать сборки, это не решает мою проблему. Мне просто нужно знать, если есть ссылка с неправильной настройкой и сообщить об этом. Исправить это не вопрос, это все равно будет сделано вручную. Это просто уведомление, которое мне нужно.

Решение имеет 35 проектов, поэтому не нужно каждый раз проверять их все вручную.

Я нашел вопрос, похожий на этот, но он перечисляет msbuild как возможное решение. Я хотел бы знать, есть ли способ сделать это, используя «код» (будь то встроенный в инструмент / надстройка или иным образом)

Ответы [ 2 ]

0 голосов
/ 24 января 2013

Я сейчас использую другой путь для этого. У меня есть базовый класс, который я могу использовать для написания модульных тестов, имеющих доступ к объекту DTE2. Таким образом, мне не нужно дополнение. Это также работает для проектов Silverlight, поскольку тестовому классу на самом деле не требуется доступ к проектам Silverlight, достаточно просто быть в решении, чтобы иметь возможность перебирать проекты и проверять ссылки.

0 голосов
/ 04 марта 2012

Я выбрал путь Аддина. Я создал надстройку, которая слушает: BuildEvents.OnBuildBegin

Всякий раз, когда происходит это событие, я создаю список всех проектов в текущем решении. Выполните небольшой рекурсивный поиск, поскольку есть также папки Solution, которые немного усложняют жизнь в мире DTE.

Затем я перебираю все проекты и преобразую их в VSProject, чтобы я мог перебрать все ссылки.

Каждый раз, когда я сталкиваюсь с неверной ссылкой, я создаю ErrorTask, в котором для свойства Document устанавливается полный путь решения этой ссылки. Для этого я строю путь к проекту, в котором находится эта ссылка, вплоть до корня решения.

ErrorTask затем отправляется в созданный мной класс ErrorListHelper, который обрабатывает ErrorTasks, а также выполняет навигацию.

Если я закончил со всеми проектами и обнаружил какие-либо ошибки, я отменяю текущую сборку и показываю окно Список ошибок, где мой ErrorListHelper содержит все созданные мной ссылочные ошибки.

Всякий раз, когда я хочу перейти к рассматриваемой ссылке, я активирую окно обозревателя решений и получаю его корень с помощью UIHierarchy.

Затем я иду по корню вниз, шаг за шагом, используя UIHierarchy, чтобы добраться до UIHierarchyItems и развернуть их. Пока я не достигну самого глубокого уровня (ссылки) и не выберу это.

Так как он мне нужен только для определенного решения и в рамках этого решения для определенных проектов (.Views. * И .ViewModels. *), У меня также есть некоторые проверки для тех, которые существуют во время создания списка ошибок.

Работает как шарм, уже нашли 12 "неправильных" ссылок в 35 проектах, где я считал, что все хорошо.

...