2010-01-14 5 views
4

Ceci est probablement très facile, mais je suis perplexe (et je suis un noob avec C#). J'ai 3 assemblées qui se réfèrent mutuellement (par exemple, en enregistrant pour la notification d'une méthode de délégué, ou en appelant une méthode publique), qui se compilent bien jusqu'à ce que j'essaye de les signer avec un nom fort. Ensuite, je ne peux pas en compiler, puisque les deux autres n'ont pas de nom fort. Qu'est-ce que je rate? J'ai créé un fichier de nom fort pour les trois, mais je ne peux pas inclure le snk et les compiler.Nommez trois assemblées qui se réfèrent mutuellement

+0

Toute dépendance cyclique? – affan

+0

Aucun que je sache. – Shawn

Répondre

4

Si vous avez créé un fichier snk que vous souhaitez utiliser sur chacun d'eux, choisissez: Ajouter un élément existant dans le menu contextuel des projets.

Naviguez jusqu'au fichier snk, puis choisissez "Ajouter comme lien" en cliquant sur la flèche à côté du bouton Ajouter.

Ensuite, dans les propriétés de votre projet, assurez-vous que dans l'onglet Signature, cochez la case «Signez l'assemblage», puis sélectionnez le fichier de clés que vous venez d'ajouter à votre projet.

Cela devrait faire l'affaire.

+0

+1. Puisque vous semblez connaître ce genre de choses et que je suis curieux, y a-t-il des inconvénients à utiliser la même clé pour chacun d'entre eux? – Skurmedel

+2

Pas que je sache pour le moment. En fait, les charges des assemblys Microsoft associés ont le même PublicKeyToken (vous pouvez vérifier cela dans votre Global Assembly Cache) indiquant qu'ils ont été signés avec le même fichier clé, iirc. – Anton

+0

C'est bon à savoir, un peu fastidieux si vous avez 5 assemblages et que vous générez 5 clés en vain :) – Skurmedel

2

Un assembly fortement nommé ne peut faire référence qu'à d'autres assemblys fortement nommés.

Lorsque vous faites référence à un ensemble nom fort, vous vous attendez à obtenir certains avantages , tels que la protection versioning et nommant. Si l'ensemble nom fort alors fait référence à un ensemble avec un nom simple, qui ne ont ces avantages, vous perdez les avantages que vous dériverait d'utiliser un assemblage nom fort et revenir à conflits de DLL. Par conséquent, les assemblys à forte dénomination ne peuvent faire référence qu'à d'autres assemblages à nom fort .

Cité à partir de MSDN.

Questions connexes