Ссылка на пользовательскую библиотеку правил анализа кода с использованием файла набора правил - PullRequest
6 голосов
/ 21 июня 2011

Существует не так много легко найти информацию о пользовательских правилах анализа кода для Visual Studio 2010. Хотя это то, что я нашел в отношении моего вопроса ...

В примере в библиотеке CodePlex показано, как развернуть пользовательскую библиотеку правил анализа кода, которая использует проект установки для выгрузки библиотеки DLL в папку Program Files -> Microsoft Visual Studio 10.0 -> Team Tools -> Static Analysis.Сервис -> FxCop -> Правила .

Более того, очень полезное сообщение в блоге от Duke Kamstra также предлагает скопировать dll библиотеки в % программных файлов.% \ Microsoft Visual Studio 10.0 \ Team Tools \ Инструменты статического анализа \ FxCop \ Rules .

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

Одним из идеальных решений для меня было бы, чтобы мой пользовательский файл *. Ruleset знал об относительном пути к DLL, но мне не удалось это сделать.

Есть предложения?

Ответы [ 4 ]

4 голосов
/ 22 июня 2011

В вашем файле .ruleset вы сможете добавить относительные пути к библиотекам пользовательских правил.например:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Sample" Description="Sample ruleset" ToolsVersion="10.0">
  <RuleHintPaths>
    <Path>..\Tools\FxCop\SomeRules.dll</Path>
    <Path>..\Tools\FxCop\SomeOtherRules.dll</Path>
  </RuleHintPaths>
  ...
</RuleSet>
3 голосов
/ 29 апреля 2014

Я нашел даже правильный относительный относительный путь проекта (предоставленный как ответ Николь ) на мою сборку пользовательских правил, не приводившую к тому, что мои правила появлялись в редакторе наборов правил, в то время как абсолютный путь к той же сборке действительно сделал правила обнаружиться. Когда я включил правила, а затем изменил путь обратно на относительный путь, правила остаются в редакторе и запускаются во время анализа источника. Если снять флажок с указанным относительным путем, правила исчезнут - это похоже на ошибку в редакторе правил.

Итак, если ваши правила не отображаются при указании относительного пути, попробуйте использовать абсолютный, включив правила, а затем переключиться обратно на относительный путь (относительно местоположения проекта на @Raithlin).

0 голосов
/ 11 мая 2016

Я использую Visual Studio C # 2015 с обновлением 2. Мои пользовательские правила не отображаются в редакторе наборов правил Visual Studio 2015. Однако при запуске CodeAnalysis появляются нарушения, если они есть. Мой RuleHintPath выглядит следующим образом и зависит от расположения файла набора правил:

<RuleHintPaths>
  <Path>..\Rules</Path>
</RuleHintPaths>

Таким образом, поскольку нарушения обнаруживаются, фактом является то, что библиотеки DLL правил находятся по заданному относительному пути. Почему правила не отображаются в редакторе наборов правил? Вот почему я предполагаю ошибку редактора.

0 голосов
/ 13 сентября 2014

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

Таким образом, рабочий CustomRules.ruleset может выглядеть следующим образом, где SR1000 - это правило из SomeRules.dll и SOR1000 от SomeOtherRules.dll .Обратите внимание, что версия средства 12.0 для Visual Studio 2013.

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Sample" Description="Sample ruleset" ToolsVersion="12.0">
  <RuleHintPaths>
    <Path>..\Tools\FxCop\SomeRules.dll</Path>
    <Path>..\Tools\FxCop\SomeOtherRules.dll</Path>
  </RuleHintPaths>
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="SR1000" Action="Error" />
    <Rule Id="SOR1000" Action="Warning" />
    <!-- etc. -->
  </Rules>
</RuleSet>

Обратите внимание, что вы можете легко включить стандартные правила Microsoft, добавив такие включения в RuleSet:

<Include Path="minimumrecommendedrules.ruleset" Action="Default" />
...