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
では複雑なリフレクションを使用し、入力の種類がスキャンされるためです。 リフレクションはトリマーで追跡できません。そのため入力の種類によって推移的に使用されるメンバーはトリミングされることがあります。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET