2013-11-28 2 views
8

Я пытаюсь создать пакет NuGet, который автоматически добавляет словарь анализа кода нашей компании и обновляется.Добавить набор правил анализа кода через пакет nuget

Набор правил добавлен в папку содержимого, и теперь я хочу использовать скрипт install.ps1 для добавления набора правил в файл проекта.
Я понял, как было бы полезно использовать envDTE, но я не могу найти много полезной документации об этом, кроме этого, этого огромного графа объектов, в котором я не могу найти узел CodeAnalysisRuleset.
http://msdn.microsoft.com/en-us/library/za2b25t3(v=vs.100).aspx

Я преследую правильный путь?
Есть ли соответствующий учебник/документация о том, как использовать envDTE в NuGet powershell?
Как я могу запустить/отладить мой установочный скрипт без фактического добавления его в пакет и установить его против проекта?

Sidenote
Хотя @Nicole Calinoiu показал лучший способ, это кусочек информации может пригодиться в дальнейшем:

foreach ($config in $project.ConfigurationManager){ 
    $config.Properties.Item("CodeAnalysisRuleSet").Value = "myruleset.ruleset" 
} 

ответ

15

Там нет необходимости в сценарий этого. Как набор правил, так и словарь могут быть зарегистрированы через импортированный файл MSBuild .props, как описано в http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Import_MSBuild_targets_and_props_files_into_project_(Requires_NuGet_2.5_or_above).

Например, ваша структура исходной папки NuGet может выглядеть следующим образом (предполагается, что "CodeAnalysisSettings" ваш ID пакета):

  • сборки
    • CodeAnalysisSettings.props
  • содержание
    • MyCustomDictionary.xml
    • MyRules.ruleset

где содержание CodeAnalysisSettings.props являются чем-то вроде следующего:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <RunCodeAnalysis>true</RunCodeAnalysis> 
     <CodeAnalysisRuleSet>MyRules.ruleset</CodeAnalysisRuleSet> 
    </PropertyGroup> 
    <ItemGroup> 
     <CodeAnalysisDictionary Include="MyCustomDictionary.xml" /> 
    </ItemGroup> 
</Project> 
+0

Проклятье! Я только что нашел его вчера вечером! И я закончил пакет, чтобы импортировать словарь. Спасибо, хотя :) –

+0

Есть что-то, чего я здесь не хватает? Я создал файл реквизита, но NuGet добавляет CodeAnalysisDictionary как тип 'Content', когда он должен быть типом' CodeAnalysisDictionary'. Я не знаю, почему. Он отлично работает, когда я использую 'Compile' для моих файлов cs. –

+0

Это потому, что пользовательский интерфейс VS использует разные правила для выбора типа контента, чем файлы MSBuild. Несмотря на аномалию дисплея пользовательского интерфейса, вы должны обнаружить, что ваш словарь используется Code Analysis. –

-2

Вы также можете сделать это вручную, выполнив следующие действия.

  • правой кнопкой мыши проект
  • Перейти к свойствам
  • Перейти к выпадающего меню [Выполнить это набор правил]
  • Выберите [Обзор ..] вариант
  • Выберите компанию, которая набора правил вы можете разместить в предопределенном месте исходного кода.
  • Нажмите «Открыть» в открывшемся окне
  • Сохраните файл проекта.

Вы можете повторить шаг для других проектов в решении.

+0

Это то, что мы делаем сегодня. Но с сотнями проектов у нас есть общая сумма потраченного впустую времени в сочетании с человеческими ошибками, которые происходят время от времени. Более интересным будет пакет nuget. –

1

У меня была та же проблема, о которой сообщалось в комментариях: словарь был добавлен как контент, а не как CodeAnalysisDictionary.

Я добавил этот кусок кода в install.ps1 пакета NuGet, чтобы решить эту проблему:

$dictionary = $project.ProjectItems | Where-Object {$_.Name.EndsWith("CustomDictionary.xml")} 
$dictionary.Properties.Item("Buildaction").Value = [int]5; 
Смежные вопросы