Добавить набор правил анализа кода через пакет nuget

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

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

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

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

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

Ответ 1

Там нет необходимости писать это. Набор правил и словарь могут быть зарегистрированы через импортированный файл MSBuild .props, как описано здесь https://docs.microsoft.com/en-us/nuget/create-packages/creating-a-package#include-msbuild-props-and-targets-in-a-package

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

  • строить
    • 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>

Ответ 2

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

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

$dictionary = $project.ProjectItems | Where-Object {$_.Name.EndsWith("CustomDictionary.xml")}
$dictionary.Properties.Item("Buildaction").Value = [int]5;

Ответ 3

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

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

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