Динамическая проверка зависимостей visual studio

Обновлено: 05.07.2024

Если в решении есть проекты, которые зависят друг от друга, т. е. один проект зависит от типов другого проекта и использует их, то Visual Studio должна знать порядок сборки про­ектов. Для примера рассмотрим проект приложения Windows, который использует типы, предоставляемые проектом библиотеки классов. Если в последовательности сборки сначала не будет собрана библиотека классов, то процесс сборки закончится неудачно.

В большинстве случаев Visual Studio способна сама определить правильную последователь­ность сборки. Однако иногда вам может понадобиться вручную указать, что некий проект зависит от других проектов. Для предоставления такой информации используйте страницу свойств Project Dependencies (рис. 4.7). Выберите проект в раскрывающемся списке, а за­тем укажите, от каких решений он зависит (для этого нужно отметить проекты в окне списка Depends on).

Местоположение файлов исходных кодов для отладки

В определенных ситуациях вам может понадобиться явно указать отладчику Visual Studio файлы исходных кодов для использования в процессе работы отладчика.

Настройка зависимостей проекта
Описание: image63

Настройка зависимостей проекта

Одна из таких ситуаций — это когда вы пытаетесь отлаживать решение, которое ссылается на объект на удаленном компьютере. Если файл исходного кода для этого удаленного объ­екта на локальном компьютере отсутствует, то вы можете явно указать для Visual Studio файлы исходных кодов.

Для того чтобы добавить элемент в любое из полей, сначала поместите ваш курсор в поле, а затем щелкните кнопку New Line (вверху справа в диалоговом окне). Это позволит вам вве­сти полностью квалифицированный путь к нужному каталогу. Удаляется элемент путем его выделения и последующего щелчка по кнопке Cut Line. Кнопка Check Entries позволяет вам еще раз перепроверить, что все элементы указывают на правильные и доступные пути к каталогам.

Если вы загрузили решение с проектами на языке Visual C++, то, вероятно, сразу же увидите несколько элементов в списке Directories containing source code.

Чтобы убедиться в том, что код не конфликтует с его конструкцией, выполните проверку кода с помощью схем зависимостей в Visual Studio. Это может помочь:

Поиск конфликтов между зависимостями в коде и зависимостями на схеме зависимостей.

Найти зависимости, на которые могут повлиять предложенные изменения.

Например, можно изменить схему зависимостей, чтобы показать потенциальные изменения архитектуры, а затем проверить код, чтобы увидеть затронутые зависимости.

Выполнить рефакторинг или миграцию кода в другую структуру.

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

Требования

Чтобы узнать, какие выпуски Visual Studio поддерживают эту функцию, см. раздел Поддержка инструментов моделирования и архитектуры в различных выпусках.

код можно проверить вручную из открытой схемы зависимостей в Visual Studio или из командной строки. вы также можете проверить код автоматически при выполнении локальных сборок или сборок Azure Pipelines. См. видео Channel 9: проектирование и проверка архитектуры с помощью схем зависимостей.

если вы хотите выполнить проверку слоев с помощью Team Foundation Server (TFS), необходимо также установить на сервере сборки ту же версию Visual Studio.

Динамическая проверка зависимостей

Проверка зависимостей происходит в режиме реального времени, и ошибки отображаются сразу в Список ошибок.

Чтобы включить полный анализ решения при использовании динамической проверки зависимостей, откройте параметры в строке Gold, которая отображается в Список ошибок.

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

При обновлении проектов для включения динамической проверки в диалоговом окне отображается ход выполнения преобразования.

при обновлении проекта для динамической проверки зависимостей версия пакета NuGet обновляется так же, как и для всех проектов, и является самой высокой используемой версией.

Добавление нового проекта проверки зависимостей активирует обновление проекта.

Определение, поддерживает ли элемент проверку

слои можно связывать с веб-сайтами, Office документами, обычными текстовыми файлами и файлами в проектах, которые являются общими для нескольких приложений, но в процессе проверки их не включаются. Ошибки проверки для ссылок на проекты или сборки, связанные с отдельными слоями, отображаются только в том случае, если между этими слоями отображаются зависимости. Эти ссылки считаются зависимостями, только если используются в коде.

На схеме зависимостей выберите один или несколько слоев, щелкните правой кнопкой мыши выделенный фрагмент и выберите пункт Просмотреть ссылки.

В обозревателе слоев просмотрите столбец поддерживает проверку . Если значение равно false, элемент не поддерживает проверку.

В Обозреватель решений щелкните правой кнопкой мыши проект моделирования или папку ссылки на слой , а затем выберите команду Добавить ссылку.

В диалоговом окне Добавление ссылки выберите сборки или проекты, а затем нажмите кнопку ОК.

Проверка кода вручную

При наличии открытой схемы зависимостей, связанной с элементами решения, можно выполнить команду проверить ярлык на схеме. Можно также использовать командную строку для выполнения команды MSBuild с настраиваемым свойством /p: validatearchitectureonbuild , установленным в значение true. Например, при внесении изменений в код регулярно выполняйте проверку слоев, чтобы заранее обнаруживать конфликты зависимостей.

Проверка кода на основе открытой схемы зависимостей

Щелкните правой кнопкой мыши поверхность схемы и выберите пункт Проверить архитектуру.

По умолчанию свойству действие сборки в файле схемы зависимостей (. LAYERDIAGRAM) присваивается значение Проверка , чтобы схема включалась в процесс проверки.

Окно Список ошибок сообщает о любых произошедших ошибках. Дополнительные сведения об ошибках проверки см. в разделе Устранение неполадок при проверке слоев.

Чтобы просмотреть источник каждой ошибки, дважды щелкните ошибку в окне Список ошибок .

Visual Studio может показывать карту кода вместо источника ошибки. Это происходит, когда либо код имеет зависимость от сборки, которая не указана схемой зависимостей, либо в коде отсутствует зависимость, указанная схемой зависимостей. Просмотрите карту кода или код, чтобы определить, должна ли существовать зависимость. Дополнительные сведения о картах кода см. в статье сопоставление зависимостей в решениях.

Сведения об управлении ошибками см. в разделе разрешение ошибок проверки слоев.

Проверка кода в командной строке

откройте командную строку Visual Studio.

Выберите один из следующих вариантов.

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

перейдите в папку, содержащую файл проекта моделирования (modelproj) и схему зависимостей, а затем запустите MSBuild со следующим пользовательским свойством:

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

перейдите к папке решения, которая должна содержать проект моделирования, содержащий схему зависимостей, а затем запустите MSBuild со следующим пользовательским свойством:

Отобразятся любые возникающие ошибки. дополнительные сведения о MSBuild см. в разделе задача MSBuild и MSBuild.

Дополнительные сведения об ошибках проверки см. в разделе Устранение неполадок при проверке слоев.

Управление ошибками проверки

В процессе разработки может понадобиться подавить некоторые конфликты, выявленные в ходе проверки. Например, можно подавлять ошибки, над которыми уже ведется работа, а также ошибки, не имеющие отношения к конкретному сценарию. При подавлении ошибки рекомендуется вести журнал рабочего элемента в Team Foundation.

Вы должны быть уже подключены к управлению исходным кодом (SCC) TFS для создания рабочего элемента или связи с ним. При попытке открыть соединение с другим SCC TFS Visual Studio автоматически закрывает текущее решение. Убедитесь, что вы уже подключены соответствующему SCC, перед попыткой создания рабочего элемента или связи с ним. В последних выпусках Visual Studio команды меню недоступны, если вы не подключены к SCC.

Создание рабочего элемента для ошибки проверки

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

Используйте эти задачи для управления ошибками проверки в окне Список ошибок :

Отобразятся подавленные ошибки с форматированием в виде зачеркивания. При выполнении проверки в следующий раз эти ошибки отображаться не будут.

Автоматическая проверка кода

Проверку слоев можно выполнять при каждом выполнении локальной сборки. если ваша команда использует Azure DevOps, можно выполнить проверку слоев с помощью условных возвратов, которые можно указать, создав пользовательскую задачу MSBuild, и использовать отчеты построения для получения ошибок проверки. Сведения о создании сборок с условным возвратом см. в разделе TFVC с проверкой изменений.

Автоматическая проверка кода во время локальной сборки

Откройте файл проекта моделирования (.modelproj) в текстовом редакторе и включите следующее свойство.

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

В окне Свойства задайте для свойства Проверить архитектуру проекта моделирования значение true.

Это позволяет включить проект моделирования в процесс проверки.

В Обозреватель решений щелкните файл схемы зависимостей (. LAYERDIAGRAM), который вы хотите использовать для проверки.

В окне Свойства убедитесь, что для свойства действие построения схемы задано значение Проверка.

Сюда входит схема зависимостей в процессе проверки.

Сведения об управлении ошибками в окне список ошибок см. в разделе разрешение ошибок проверки слоев.

Устранение неполадок проверки слоев

Следующая таблица описывает проблемы проверки слоев и способы их устранения. Эти проблемы отличаются от ошибок, возникающих из-за несоответствия между кодом и структурой. Дополнительные сведения об этих ошибках см. в разделе Устранение неполадок при проверке слоев.

Разрешение ошибок проверки слоев

При проверке кода на соответствие схеме зависимостей ошибки проверки возникают, когда код конфликтует с конструкцией. Например, ошибки проверки могут происходить по следующим причинам:

Артефакт назначен неправильному слою. В этом случае следует переместить артефакт.

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

Для устранения этих ошибок следует обновлять код до тех пор, пока в процессе проверки не перестанут происходить ошибки. Эту процедуру можно выполнить методом итераций.

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

Артифакттипен — это тип Артифактн, например класс или метод, например:

Проверка кода по схемам зависимостей

Зачем использовать схемы зависимостей?

Чтобы убедиться в том, что код не конфликтует с его конструкцией, выполните проверку кода с помощью схем зависимостей в Visual Studio. Это может помочь:

Поиск конфликтов между зависимостями в коде и зависимостями на схеме зависимостей.

Найти зависимости, на которые могут повлиять предложенные изменения.

Например, можно изменить схему зависимостей, чтобы показать потенциальные изменения архитектуры, а затем проверить код, чтобы увидеть затронутые зависимости.

Выполнить рефакторинг или миграцию кода в другую структуру.

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

Требования

Чтобы узнать, какие выпуски Visual Studio поддерживают эту функцию, см. раздел Поддержка инструментов моделирования и архитектуры в различных выпусках.

код можно проверить вручную из открытой схемы зависимостей в Visual Studio или из командной строки. вы также можете проверить код автоматически при выполнении локальных сборок или сборок Azure Pipelines. См. видео Channel 9: проектирование и проверка архитектуры с помощью схем зависимостей.

[!IMPORTANT] если вы хотите выполнить проверку слоев с помощью Team Foundation Server (TFS), необходимо также установить на сервере сборки ту же версию Visual Studio.

Динамическая проверка зависимостей

Проверка зависимостей происходит в режиме реального времени, и ошибки отображаются сразу в Список ошибок.

Чтобы включить полный анализ решения при использовании динамической проверки зависимостей, откройте параметры в строке Gold, которая отображается в Список ошибок.

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

При обновлении проектов для включения динамической проверки в диалоговом окне отображается ход выполнения преобразования.

при обновлении проекта для динамической проверки зависимостей версия пакета NuGet обновляется так же, как и для всех проектов, и является самой высокой используемой версией.

Добавление нового проекта проверки зависимостей активирует обновление проекта.

Определение, поддерживает ли элемент проверку

слои можно связывать с веб-сайтами, Office документами, обычными текстовыми файлами и файлами в проектах, которые являются общими для нескольких приложений, но в процессе проверки их не включаются. Ошибки проверки для ссылок на проекты или сборки, связанные с отдельными слоями, отображаются только в том случае, если между этими слоями отображаются зависимости. Эти ссылки считаются зависимостями, только если используются в коде.

На схеме зависимостей выберите один или несколько слоев, щелкните правой кнопкой мыши выделенный фрагмент и выберите пункт Просмотреть ссылки.

В обозревателе слоев просмотрите столбец поддерживает проверку . Если значение равно false, элемент не поддерживает проверку.

В Обозреватель решений щелкните правой кнопкой мыши проект моделирования или папку ссылки на слой , а затем выберите команду Добавить ссылку.

В диалоговом окне Добавление ссылки выберите сборки или проекты, а затем нажмите кнопку ОК.

Проверка кода вручную

При наличии открытой схемы зависимостей, связанной с элементами решения, можно выполнить команду проверить ярлык на схеме. Можно также использовать командную строку для выполнения команды MSBuild с настраиваемым свойством /p: validatearchitectureonbuild , установленным в значение true. Например, при внесении изменений в код регулярно выполняйте проверку слоев, чтобы заранее обнаруживать конфликты зависимостей.

Проверка кода на основе открытой схемы зависимостей

Щелкните правой кнопкой мыши поверхность схемы и выберите пункт Проверить архитектуру.

[!NOTE] По умолчанию свойству действие сборки в файле схемы зависимостей (. LAYERDIAGRAM) присваивается значение Проверка , чтобы схема включалась в процесс проверки.

Окно Список ошибок сообщает о любых произошедших ошибках. Дополнительные сведения об ошибках проверки см. в разделе Устранение неполадок при проверке слоев.

Чтобы просмотреть источник каждой ошибки, дважды щелкните ошибку в окне Список ошибок .

[!NOTE] Visual Studio может показывать карту кода вместо источника ошибки. Это происходит, когда либо код имеет зависимость от сборки, которая не указана схемой зависимостей, либо в коде отсутствует зависимость, указанная схемой зависимостей. Просмотрите карту кода или код, чтобы определить, должна ли существовать зависимость. Дополнительные сведения о картах кода см. в статье сопоставление зависимостей в решениях.

Сведения об управлении ошибками см. в разделе разрешение ошибок проверки слоев.

Проверка кода в командной строке

откройте командную строку Visual Studio.

Выберите один из следующих вариантов.

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

перейдите в папку, содержащую файл проекта моделирования (modelproj) и схему зависимостей, а затем запустите MSBuild со следующим пользовательским свойством:

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

перейдите к папке решения, которая должна содержать проект моделирования, содержащий схему зависимостей, а затем запустите MSBuild со следующим пользовательским свойством:

Отобразятся любые возникающие ошибки. дополнительные сведения о MSBuild см. в разделе задача MSBuild и MSBuild.

Дополнительные сведения об ошибках проверки см. в разделе Устранение неполадок при проверке слоев.

Управление ошибками проверки

В процессе разработки может понадобиться подавить некоторые конфликты, выявленные в ходе проверки. Например, можно подавлять ошибки, над которыми уже ведется работа, а также ошибки, не имеющие отношения к конкретному сценарию. При подавлении ошибки рекомендуется вести журнал рабочего элемента в Team Foundation.

[!WARNING] Вы должны быть уже подключены к управлению исходным кодом (SCC) TFS для создания рабочего элемента или связи с ним. При попытке открыть соединение с другим SCC TFS Visual Studio автоматически закрывает текущее решение. Убедитесь, что вы уже подключены соответствующему SCC, перед попыткой создания рабочего элемента или связи с ним. В последних выпусках Visual Studio команды меню недоступны, если вы не подключены к SCC.

Создание рабочего элемента для ошибки проверки

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

Используйте эти задачи для управления ошибками проверки в окне Список ошибок :

Отобразятся подавленные ошибки с форматированием в виде зачеркивания. При выполнении проверки в следующий раз эти ошибки отображаться не будут.

Автоматическая проверка кода

Проверку слоев можно выполнять при каждом выполнении локальной сборки. если ваша команда использует Azure DevOps, можно выполнить проверку слоев с помощью условных возвратов, которые можно указать, создав пользовательскую задачу MSBuild, и использовать отчеты построения для получения ошибок проверки. Сведения о создании сборок с условным возвратом см. в разделе TFVC с проверкой изменений.

Автоматическая проверка кода во время локальной сборки

Откройте файл проекта моделирования (.modelproj) в текстовом редакторе и включите следующее свойство.

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

В окне Свойства задайте для свойства Проверить архитектуру проекта моделирования значение true.

Это позволяет включить проект моделирования в процесс проверки.

В Обозреватель решений щелкните файл схемы зависимостей (. LAYERDIAGRAM), который вы хотите использовать для проверки.

В окне Свойства убедитесь, что для свойства действие построения схемы задано значение Проверка.

Сюда входит схема зависимостей в процессе проверки.

Сведения об управлении ошибками в окне список ошибок см. в разделе разрешение ошибок проверки слоев.

Устранение неполадок проверки слоев

Следующая таблица описывает проблемы проверки слоев и способы их устранения. Эти проблемы отличаются от ошибок, возникающих из-за несоответствия между кодом и структурой. Дополнительные сведения об этих ошибках см. в разделе Устранение неполадок при проверке слоев.

Разрешение ошибок проверки слоев

При проверке кода на соответствие схеме зависимостей ошибки проверки возникают, когда код конфликтует с конструкцией. Например, ошибки проверки могут происходить по следующим причинам:

Артефакт назначен неправильному слою. В этом случае следует переместить артефакт.

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

Для устранения этих ошибок следует обновлять код до тех пор, пока в процессе проверки не перестанут происходить ошибки. Эту процедуру можно выполнить методом итераций.

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

Артифакттипен — это тип Артифактн, например класс или метод, например:



Как вы не знаю, но я себя на этой картинке узнал. Ведь, согласитесь, когда проектируется архитектура приложения, все красиво, логично и соответствует лучшим мировым практикам. Но в процессе работы, сталкиваясь с ограничениями предъявляемыми архитектурой, мы зачастую думаем: «Вот здесь немножко нарушу, это ведь сэкономит мне час времени разработки. Ну а потом, как будет время, поправлю». Но, почему-то, это время так никогда и не наступает. На мой взгляд, единственным способом заставить себя, как программиста, следовать разработанной архитектуре, это научить среду разработки все отклонения и костыли показывать как ошибки компиляции. В этом случае, если код плох, он сразу будет исправлен, ну а если архитектура устарела, то будет исправлена она. Т.е. в хранилище кода всегда будет код соответствующей запланированной архитектуре.
Пара слов, о том, что будет подкатом:
1. Небольшая преамбула.
2. Восстановление архитектуры по имеющемуся проекту.
3. Настройка Visual Studio и TFS для автоматического контроля архитектуры.
Под катом много картинок и желание все описанное попробовать.

Итак, обещанная преамбула. Почти год назад, Дмитрий Андреев (dmandreev) уже публиковал статью на эту тему. Я эту статью с огромным удовольствием прочитал, и, собственно, именно она меня подвигла заняться вопросом применения Layer Diagram в процессе разработки приложений. Кстати, дочитав до этого места, вы уже сходили по приведенной ссылке и прочитали то, что написал Дмитрий? Нет, ну тогда давайте, я вас подожду, а потом пойдем дальше. Жду.
Ок, теперь когда у нас с вами есть общее понимание Layer Diagram можно заканчивать с преамбулой и переходить к практической работе.
Подготовка демонстрационного проекта

Для демонстрации работы с Layer Diagram, я возьму проект, чуть более близкий к реальности, чем рассмотрел Дмитрий. Пусть у нас будет слой доступа к данным (я буду использовать Entity Framework) и, собственно, слой клиентских приложений в котором также будет слоистая структура (MVVM). В клиентском уровне модель будет браться из первого слоя, а вот слои View и ViewModel будут размазаны по нескольким сборкам.
Вот так, эти четыре проекта выглядят после создания:

Я думаю все, изменяют Namespace по умолчанию для создаваемых сборок? Ну вот, и в этом примере, для 3-х клиентских сборок я заменю Default Namespace:

Добавляем в проект DAL базу данных и Entity Model. В клиентских проектах создаем папки View и ViewModel. Добавляем в них тестовые компоненты и классы:

Добавив ссылки между проектами, обращения между созданными компонентами и классами, можно получить граф зависимостей примерно такого вида:

Если разбиение на слои, идет на уровне сборок, то в связи с запретом на циклические ссылки между сборками (иначе нельзя определить порядок построения), возможна только проблема «обращения через слой» (которая как раз и рассматривается в статье Дмитрия). Если же в проекте, как в данном случае, слои размазаны по нескольким сборкам, причем в рамках одной сборки есть представители разных слоев, перетаскивание проектов/файлов из Solution Explorer-а в Layer Diagram оказывается не эффективным. И тут на помощь приходит Architecture Explorer, который вызывается из главного меню: Architecture -> Windows -> Architecture Explorer. Сразу после открытия он будет иметь вид:

Скажу честно, когда я прочитал про этот инструмент первый раз, я сразу же в него влюбился. Такие возможности для анализа зависимостей, что просто дух захватывает. И хотя про него можно писать очень много и восторженно, так как автоматически контролировать архитектуру он не позволяет, о нем подробнее в другой раз.
Восстановление диаграммы слоев из артефактов решения

Раз сцена готова, выпускаем актеров. Добавляем в решение модельный проект, уже в него добавляем Layer Diagram:

Да, здесь мы можем перетяуть из Toolbox-а слои, нарисовать зависимости, потом долго и упорно в эти слои переносить классы из клиентских проектов. И все это только для того, чтобы уже на следующий день, когда разработчик добавит новый класс, про который мы не знаем, и к слоям он не привязан, а следовательно проверка перестанет работать. Чтобы этого избежать, нам и пригодится Architecture Explorer.

Обратите внимание, что все классы ViewModel оказались в одном пространстве имен (ну пусть в реальном проекте они будут в 3-5), и нам теперь можно в диаграмму слоев добавлять не классы, а целиком пространства имен. Выделяем их и, не создавая никаких слоев, перетягиваем на нашу Layer Diagram:

Кстати, можем воспользоваться и функционалом перетаскивания проектов из Solution Explorer-а. С Shift-ом выделяем в нем ClientApp1, ClientApp2 и Base.Library, хватаем левой кнопкой мыши и перетягиваем на свободное место в Layer Diagram:

Переименовываем новый слой в Presentation, выделяем два слоя (View и View Model) и перетаскиваем их в слой Presentation:

Практически все готово, не хватает только связей. Для того, чтобы их сгенерировать, достаточно вызвать контекстное меню на Layer Diagram-е и выбрать пункт Generate Dependencies:

Теперь, наша диаграмма слоев приняла законченный вид:

Если у вас возникает вопрос, по поводу стрелки от ViewModel к View, то посмотреть мнения на эту тему, а может и принять участие в обсуждении, можно на форуме MSDN.
Автоматический контроль архитектуры

Ну и последний момент, как заставить диаграмму слоев автоматически, при каждом построении проверять, что код соответствует архитектуре? На самом деле достаточно просто. Для демонстрации, я в ClientApp1, в папку View добавлю компонент, который будет напрямую обращаться к слою доступа к данным:

Запускам построение и видим: Build succeeded. Для того, чтобы билды при ошибках архитектуры падали, необходимо открыть свойства модели из Solution Explorer-а (через контестное меню или выбрать и нажать F4) и включить проверку архитектуры:

Еще раз запускам построение и видим, что у нас появились ошибки архитектуры:

Двойной клик на ошибке, сразу привод к месту, в которое забит костыль.
Конечно, проверка зависимостей приводит к увеличению времени компиляции, поэтому можно собрать два решения, одно с которым работают разработчики (в него не включать Modeling Project), а второе, с тем же набором проектов и Modeling Project, для автоматических построений в Team Foundation Server. В этом случае на рабочих местах построение идет быстрее, а контроль архитектуры выполняется на сервере, причем по ошибкам построения, могут сразу генерироваться баги.
Перед тем, как перейти к выводам, небольшая ремарка. Все описанное в данной статье работает и в Visual Studio 2010 и в Visual Studio 2012. Единственно, требуется версия Ultimate или Premium. Если у вас нет лицензии на соответствующие версии Visual Studio 2010, то Release Candidate версию Visual Studio 2012 Ultimate можно скачать здесь.

Не только на C++. Новые технологии, процессы и Agile.

среда, 20 мая 2015 г.

Анализ зависимостей в проекте своими руками

Ранее я уже писал про скрипт, который позволяет построить граф зависимостей между проектами Visual Studio.


Microsoft в момент перехода на Vistual Studio 2010 поменяла формат проектных файлов. Но хорошо то, что файлы солюшенов и в VS2008 и в VS2010 имеют XML формат. Это позволяет использовать язык запросов XPath, чтобы легко получить нужное поле. В PowerShell это делается командой Select-Xml. С ее помощью из файла проекта несложно вытащить зависимости. Также, хочется, чтобы разные типы проектов в конечном графе отображались разными цветами. Для этого надо выяснить какие типы бывают. Это можно сделать, натравив следующую команду на каталог с кучей проектов:
Можно заметить, что в PowerShell поток с результатами выполнения команд удобно перенаправлять в следующую команду с помощью символа «|». Команда Get-ChildItem помогает найти все файлы типа vcxproj, а Select-Xml выбирает из них тип конфигурации. Для каждого файла выводим тип проекта на экран. При большом количестве файлов вывод получается не очень информативен, но в PowerShell есть команда Group-Object, которая спасает положение группируя результаты. Итого получаем что-то вроде этого:
Аналогично можно сделать для файлов типов vcproj, csproj и других. В vcproj файлов типы конфигураций кодируются числами, но, что за ними стоит, выяснить не сложно открыв проект в Visual Studio.

На данном этапе у нас есть проекты, их типы и связи между ними. Можно формировать GraphViz файл. Делается это очень просто — сразу записываем заголовок следующего вида:
А далее все проекты и связи между ними:
Цвет связи привязан к проекту, чтобы было легче читать граф. Т.е. у каждого проекта все исходящие связи одного цвета. Сделать это можно использовав HSL (от англ. Hue, Saturation, Lightness) представление цвета. Фиксируем S и L компоненты, а H меняем при обработке очередного файла проекта. Потом HSL преобразуем в RGB и записываем в выходной файл.

Исходный код функции выбора цвета, а также всего остального скрипта можно найти на GitHub.

Читайте также: