通过nuget包添加代码分析规则集

时间:2013-11-28 13:17:17

标签: c# powershell nuget code-analysis envdte

我正在尝试构建一个NuGet包,自动添加我们公司的代码分析字典并可以更新。

规则集已添加到内容文件夹中,现在我想使用install.ps1脚本在项目文件中添加规则集。
我想出去的方法是使用envDTE,但是除了这个压倒性的对象图之外我找不到很多有用的文档,其中我找不到CodeAnalysisRuleset节点。
http://msdn.microsoft.com/en-us/library/za2b25t3(v=vs.100).aspx

我是在追求正确的道路吗? 是否有关于如何在NuGet powershell中使用envDTE的相关教程/文档?
如何运行/调试我的安装脚本而不必将其实际添加到包中并针对项目安装它?

旁注
虽然@Nicole Calinoiu表现出更好的方式,但这些信息可能会在以后派上用场:

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

3 个答案:

答案 0 :(得分:16)

没有必要编写脚本。规则集和字典都可以通过导入的MSBuild .props文件进行注册,如https://docs.microsoft.com/en-us/nuget/create-packages/creating-a-package#including-msbuild-props-and-targets-in-a-package所述。

例如,您的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>

答案 1 :(得分:1)

我遇到与评论中报告的问题相同的问题:字典已添加为内容,而不是CodeAnalysisDictionary

我在nuget包的install.ps1中添加了这段代码来解决这个问题:

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

答案 2 :(得分:-2)

您也可以使用以下步骤手动执行此操作。

  • 右键单击项目
  • 转到属性
  • 转到下拉列表[运行此规则集]
  • 选择[浏览..]选项
  • 选择您可以放置​​在源代码中预定义位置的公司规则集。
  • 在“打开”窗口中单击“打开”
  • 保存项目文件。

您可以为解决方案中的其他项目重复此步骤。