Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cause
L’emplacement cible déclare certaines exigences sur la valeur de type via DynamicallyAccessedMembersAttribute. Ces exigences doivent être déclarées par la valeur source également via DynamicallyAccessedMembersAttribute. La valeur source peut déclarer plus d’exigences que la cible, si nécessaire.
Exemple
Type GetCustomType() { return typeof(CustomType); }
void TestMethod()
{
// IL2075 Trim analysis: 'this' argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to 'GetMethods'. The return value of method 'GetCustomType' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to.
GetCustomType().GetMethods(); // Type.GetMethods is annotated with DynamicallyAccessedMemberTypes.PublicMethods
}
Pour résoudre ce problème, ajoutez un DynamicallyAccessedMembersAttribute
au retour de la méthode qui retourne l’objet Type sur lequel vous appelez une méthode d’instance annotée.
using System.Diagnostics.CodeAnalysis;
[return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]
Type GetCustomType() { return typeof(CustomType); }
void TestMethod()
{
// IL2075 Trim analysis: 'this' argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to 'GetMethods'. The return value of method 'GetCustomType' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to.
GetCustomType().GetMethods(); // Type.GetMethods is annotated with DynamicallyAccessedMemberTypes.PublicMethods
}
Une autre situation courante est l’appel d’API de réflexion sur un objet Type retourné par GetType().
void MyMethod(MyType argument)
{
Type t = argument.GetType();
// IL2075 Trim analysis: 'this' argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to 'GetMethods'. The return value of method 'Object.GetType' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to.
t.GetMethods();
}
Dans ce scénario, la solution consiste à annoter la définition de MyType
avec DynamicallyAccessedMembersAttribute
.
using System.Diagnostics.CodeAnalysis;
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)]
class MyType
{
...
}
void MyMethod(MyType argument)
{
Type t = argument.GetType();
// IL2075 Trim analysis: 'this' argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to 'GetMethods'. The return value of method 'Object.GetType' does not have matching annotations. The source value must declare at least the same requirements as those declared on the target location it is assigned to.
t.GetMethods();
}
Appliquer DynamicallyAccessedMembersAttribute
à une classe, une interface ou une structure indique au linker que les membres spécifiés peuvent être accédés dynamiquement sur les instances Type retournées par l’appel de GetType() sur des instances de cette classe, interface ou structure.
Remarque
Appliquer DynamicallyAccessedMembersAttribute
à une définition de type « rootera » tous les DynamicallyAccessedMemberTypes
indiqués sur le type et tous ses types dérivés (ou les types implémentants lorsqu’il est appliqué sur une interface). Cela signifie que les membres seront conservés, ainsi que toutes les métadonnées référencées par les membres. Veillez à utiliser le minimum de DynamicallyAccessedMemberTypes
requis et à l’appliquer au type le plus spécifique possible.
Plus d’informations
Veuillez consulter la section Correction des avertissements pour plus d’informations.