文档

Unity Engine

Unity Engine

创建规则集文件

Create a ruleset file to control how Roslyn analyzers handle warnings and errors in your project.
阅读时间4 分钟最后更新于 1 个月前

要定义如何处理项目中的分析器引发的各种警告和错误的规则,您可以创建规则集文件。有关如何创建自定义规则集的更多信息,请参阅 Microsoft 关于如何创建自定义规则集的 Visual Studio 文档。
在 Assets 根文件夹中,放置一个名为 Default.ruleset 的规则集文件。您在 Default.ruleset 中定义的规则应用于所有预定义的程序集(例如
Assembly-CSharp.dll
),以及所有使用 .asmdef 文件构建的程序集。
要覆盖用于预定义程序集的 Default.ruleset 中的规则,请在根文件夹中创建一个名为
[PredefinedAssemblyName].ruleset
的 .ruleset 文件。例如,
Assembly-CSharp.ruleset
中的规则适用于
Assembly-CSharp.dll
中的代码。根文件夹中只允许使用这些 .ruleset 文件:
  • Default.ruleset
  • Assembly-CSharp.ruleset
  • Assembly-CSharp-firstpass.ruleset
  • Assembly-CSharp-Editor.ruleset
  • Assembly-CSharp-Editor-firstpass.ruleset

工作流程:在 Unity 中测试规则集文件

要在 Unity 中测试规则集文件,请执行以下步骤:

步骤 1:设置规则集文件

  1. 在项目的 Assets 文件夹中创建一个名为“Subfolder”的子文件夹。
  2. 在 Subfolder 内:
    1. 创建一个新的 .asmdef 文件。
    2. 保存
      RethrowError.cs
      的重复副本。
  3. 在 Assets 中创建一个 Default.ruleset 文件,包含如下代码:
<?xml version="1.0" encoding="utf-8"?><RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0"> <Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers"> <Rule Id="ERP021" Action="Error" /> <Rule Id="EPC12" Action="None" /> </Rules></RuleSet>
Default.ruleset
文件定义了以下规则:
  • 将关于可疑异常处理的警告 EPC12 禁止。
  • 将关于错误异常传播的警告 ERP021 提升为错误。

步骤 2:重新加载项目

将规则集文件添加到您的项目后,重新导入程序集中需应用规则的任何脚本。这会强制 Unity 使用新的规则集文件重新编译程序集。重新编译后,Console 窗口中会显示两条消息:
Assets\Subfolder\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
请注意,Unity 将在 Default.ruleset 中定义的规则应用于
Assets/RethrowError.cs
和
Assets/Subfolder/RethrowError.cs
。

步骤 3:添加自定义规则集

在 Assets/Subfolder,创建一个 .ruleset 文件,并根据您的喜好命名(本例中为
exampleHello.ruleset
):
<?xml version="1.0" encoding="utf-8"?><RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0"> <Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers"> <Rule Id="ERP021" Action="Info" /> <Rule Id="EPC12" Action="Info" /> </Rules></RuleSet>
这个新的
Hello.ruleset
文件告诉 Unity 将 PC12 和 ERP021 打印到控制台,而不将它们视为警告或错误。
Unity 再次编译项目后,Console 窗口中会显示以下消息:
Assets\Subfolder\RethrowError.cs(14,23): info EPC12: Suspicious exception handling: only e.Message is observed in exception block.
Assets\Subfolder\RethrowError.cs(15,19): info ERP021: Incorrect exception propagation. Use throw; instead.
Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Default.ruleset
中的规则仍然适用于
Assets\RethrowError.cs
,但这些规则不再适用于
Assets\Subfolder\RethrowError.cs
,因为
Hello.ruleset
中的规则会覆盖它们。
有关所有允许的规则集操作文件的更多信息,请参阅关于使用代码分析规则集编辑器的 Visual Studio 文档。

其他资源