Erreur du compilateur CS0281
Mise à jour : novembre 2007
Message d'erreur
Un accès ami a été accordé à 'NomAssembly1', mais l'assembly de sortie est nommé 'NomAssembly2'. Essayez d'ajouter une référence à 'NomAssembly1' ou de changer le nom de l'assembly de sortie pour qu'il corresponde.
Friend access was granted to 'AssemblyName1', but the output assembly is named 'AssemblyName2'. Try adding a reference to 'AssemblyName1' or changing the output assembly name to match.
L'accès ami est une nouvelle fonctionnalité du Common Language Runtime (CLR) qui permet à un assembly de voir les types non publics d'un autre assembly. Cette erreur se produit lorsque l'assembly qui accorde l'accès ami spécifie un nom incorrect pour l'assembly auquel l'accès est accordé. Pour plus d'informations, consultez Assemblys friend (Guide de programmation C#).
Exemple
La séquence suivante d'exemples de code génère une erreur CS0281.
Les fichiers utilisés pour créer les assemblys à nom fort sont générés comme suit :
sn -d CS0281.snk
sn -k CS0281.snk
sn -i CS0281.snk CS0281.snk
sn -pc CS0281.snk key.publickey
sn -tp key.publickey
// CS0281.cs
// compile with: /target:library /keyfile:CS0281.snk
public class A {}
// CS0281_b.cs
// compile with: /target:library /keyfile:CS0281.snk /reference:CS0281.dll
[assembly:System.Runtime.CompilerServices.InternalsVisibleTo("CS0281 , PublicKey=00240000048000009400000006020000002400005253413100040000010001004b2d4d56af7c50be2fcbbf97cb880b9e73ad84467a587191fef63aadc118a96cecf9d508cd679c907b6e20f71684300bdc2c0a851019af0c96b29bf8f1339753276041aefd67db46139e6348b3a12f29537b4dc6c2c19829df2c9ed6803f3c63c3b84cfa2728849386aea575c543a5f70fa85793d2946f15f7fe1ccb0c5e8fe0")]
class B : A {}
L'exemple suivant génère l'erreur CS0281.
Remarquez que cet exemple crée un fichier de sortie portant le même nom que le fichier de sortie du premier exemple. Pour résoudre ce problème, ne modifiez pas les attributs d'assembly du composant et ajoutez la classe C.
// CS0281_c.cs
// compile with: /target:library /out:CS0281.dll /keyfile:CS0281.snk /reference:CS0281_b.dll
// CS0281 expected
[assembly:System.Reflection.AssemblyVersion("3")]
[assembly:System.Reflection.AssemblyCulture("en-us")]
class C : B {}
public class A {}