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 使用复杂反射扫描输入类型。 修剪器无法跟踪反射,因此由输入类型传递使用的成员可能会被修剪掉。