次の方法で共有


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 としてマークされます。読み込まれているアセンブリは、トリミングされたメンバーにアクセスする可能性があるためです。 このトリマーでは、アプリケーションによって直接使用されるものを除き、あらゆるメンバーがフレームワークから削除されます。そのため、実行時に新しいアセンブリを読み込むと、不足しているメンバーにアクセスしようとします。

  • XmlSerializerRequiresUnreferencedCode としてマークされます。XmlSerializer では複雑なリフレクションを使用し、入力の種類がスキャンされるためです。 リフレクションはトリマーで追跡できません。そのため入力の種類によって推移的に使用されるメンバーはトリミングされることがあります。