Правила анализа кода

Подробнее о назначении механизма см. в разделе Анализ проекта.

Начало работы

  1. Запустите Visual Studio.

  2. Выберите Create a new project с типом Class Library (.NET Framework) либо Class Library (поддерживаются .NET Framework 4.6.1 и .NET Standard 2.0).

  3. Введите имя проекта. Имя проекта и библиотеки dll должны начинаться с префикса Primo.

  4. Найдите в папке Primo Studio сборку Primo.ProjectAnalyzer.Dto.dll и добавьте ее в Dependencies проекта:

5. Создайте класс (Add ➝ Class...), который будет содержать правило. Для этого надо унаследовать интерфейс Primo.ProjectAnalyzer.IAnalysisRule.

Создание правила

Пример правила ST-PR-003, проверяющего вложенность диаграмм:

using Primo.ProjectAnalyzer.Model;
using Primo.ProjectAnalyzer.Model.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Primo.ProjectAnalyzer.Dto.Rules
{
    /// <summary>
    /// ST-PR-003: Несколько уровней диаграмм
    /// </summary>
    public class StPr003 : IAnalysisRule
    {
        #region Константы
        /// <summary>
        /// Кол-во
        /// </summary>
        private const string ARG_COUNT_KEY = "Count";
        /// <summary>
        /// Кол-во
        /// </summary>
        private const int ARG_COUNT = 2;
        #endregion

        #region Свойства контракта IAnalysisRule
        /// <summary>
        /// Код
        /// </summary>
        public string Code
        {
            get { return Properties.StPr003.Code; }
        }

        /// <summary>
        /// Наименование
        /// </summary>
        public string Name
        {
            get { return Properties.StPr003.Name; }
        }

        /// <summary>
        /// Описание
        /// </summary>
        public string Description
        {
            get { return Properties.StPr003.Recomendation; }
        }

        /// <summary>
        /// URL помощи
        /// </summary>
        public string HelpUrl
        {
            get { return null; }
        }

        /// <summary>
        /// Области
        /// </summary>
        public RuleAreas[] Areas
        {
            get { return new RuleAreas[] { RuleAreas.Process }; }
        }

        private RuleActions defaultAction = RuleActions.Error;
        /// <summary>
        /// Действие по умолчанию
        /// </summary>
        public RuleActions DefaultAction
        {
            get { return defaultAction; }
            set { this.defaultAction = value; }
        }

        /// <summary>
        /// Аргументы
        /// </summary>
        public AnalysisRuleArg[] Arguments
        {
            get;
            set;
        }
        #endregion