Добавить набор правил анализа кода через пакет 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
Вы также можете сделать это вручную, выполнив следующие шаги.
- Щелкните правой кнопкой мыши проект
- Перейти к свойствам
- Перейдите в раскрывающийся список [Запустите этот набор правил]
- Выберите опцию [Обзор..]
- Выберите набор правил вашей компании, который вы можете разместить в предопределенном месте в исходном коде.
- Нажмите "Открыть" в окне "Открыть"
- Сохраните файл проекта.
Вы можете повторить шаг для других проектов в решении.