IL2026:具有 RequiresUnreferencedCode 属性的成员在剪裁时可能会中断

原因

调用(或通过反射访问)使用 RequiresUnreferencedCodeAttribute 进行批注的成员。

例如:

[RequiresUnreferencedCode("Use 'MethodFriendlyToTrimming' instead", Url="http://help/unreferencedcode")]
void MethodWithUnreferencedCodeUsage()
{
}

void TestMethod()
{
    // IL2026: Using method 'MethodWithUnreferencedCodeUsage' which has 'RequiresUnreferencedCodeAttribute'
    // can break functionality when trimming application code. Use 'MethodFriendlyToTrimming' instead. http://help/unreferencedcode
    MethodWithUnreferencedCodeUsage();
}

规则说明

RequiresUnreferencedCodeAttribute 表示成员引用了可被剪裁器删除的代码。

常见示例包括:

  • Load(String) 被标记为 RequiresUnreferencedCode,因为被加载的程序集可以访问已被剪裁掉的成员。 剪裁器从框架中删除除应用程序直接使用的成员之外的所有成员,因此在运行时加载新程序集很可能会尝试访问丢失的成员。

  • XmlSerializer 被标记为 RequiresUnreferencedCode,因为 XmlSerializer 使用复杂反射来扫描输入类型。 剪裁器无法跟踪反射,因此输入类型以可传递的方式使用的成员可能会被剪裁掉。