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