关于Visual Studio 2010的自定义代码分析规则没有太多易于查找的信息。虽然这是我在我的问题中找到的...
在sample library on CodePlex中展示了如何部署自定义代码分析规则库,该规则库使用安装项目将库的DLL转储到程序文件文件夹 - > Microsoft Visual Studio 10.0 - >团队工具 - >静态分析工具 - > FxCop - >规则
此外,一个非常有用的操作方法blog post by Duke Kamstra还建议将库的dll复制到%Program Files%\ Microsoft Visual Studio 10.0 \ Team Tools \ Static Analysis Tools \ FxCop \ Rules
我的偏好是避免在这样一个全球位置粘贴DLL。我希望有相对于我的Visual Studio解决方案的DLL,所以当我用一些自定义代码分析规则更改更新DLL时,我不需要采取额外的步骤来保持DLL的依赖关系是最新的。
对我来说,一个完美的解决方案是让我的自定义 *。ruleset 文件知道DLL的相对路径,但我没有成功。
有什么建议吗?
答案 0 :(得分:4)
在.ruleset文件中,您应该能够添加自定义规则DLL的相对路径。 e.g:
<?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>
答案 1 :(得分:3)
我发现即使是正确的项目相对相对路径(以Nicole's answer提供)到我的自定义规则程序集也没有导致我的规则出现在规则集编辑器中,而同一程序集的绝对路径确实使得规则出现了。当我启用规则然后将路径更改回相对路径时,规则保留在编辑器中并在源分析期间运行。如果我取消选中指定相对路径的规则,规则就会消失 - 这似乎是规则编辑器中的错误。
因此,如果在指定相对路径时似乎没有出现规则,请尝试使用绝对规则,启用规则,然后切换回相对路径(相对于@Raithlin的项目位置)。
答案 2 :(得分:0)
此问题似乎也会影响VS 2013.我发现手动输入规则程序集的相对路径和来自该程序集的规则将导致在打开规则集时出现这些规则使用Visual Studio的规则集设计器UI。规则也将运行。
因此,可操作的 CustomRules.ruleset 可能如下所示,其中SR1000
是来自 SomeRules.dll 的规则,SOR1000
来自< EM> SomeOtherRules.dll 。请注意,Visual Studio 2013的工具版本 12.0 。
<?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>
请注意,您可以通过向RuleSet
添加包含这些内容来轻松添加标准Microsoft规则:
<Include Path="minimumrecommendedrules.ruleset" Action="Default" />
答案 3 :(得分:0)
我正在使用Visual Studio C#2015和Update 2.我的自定义规则没有出现在Visual Studio 2015的规则集编辑器中。但是当我运行CodeAnalysis时,如果有的话会出现违规。我的RuleHintPath看起来像这样,并且与规则集文件的位置有关:
<RuleHintPaths>
<Path>..\Rules</Path>
</RuleHintPaths>
因为发现违规,事实是规则DLL是由给定的相对路径找到的。为什么规则没有出现在规则集编辑器中是问题。这就是为什么我假设编辑器的错误。