2008-10-28 5 views
3

Un peu de temps j'ai posé la question suivante ici sur Stack   Overflow, Assembly Names and Versions.Assemblées et quand une dénomination forte n'est pas une option?

Maintenant, je me suis rendu compte que je ne peux pas signer mon assembly avec un nom fort car l'une des dépendances tierces n'est pas un assemblage fortement nommé et donc le mien n'est pas signable.

J'ai essayé de changer simplement le nom de fichier d'assemblage MyAssembly.dll en MyAssembly.v.1.1.dll mais quand je fais cela et référence l'assembly renommé - il n'est pas copié comme le reste des références. Il semble y avoir parce qu'il y a une discordance entre le nom de fichier et l'attribut Identity de l'assembly.

J'ai le projet A et B qui sont des dépendances du projet C. Le projet A doit faire référence à MyAssembly.dll v.1.0 et le projet B doit faire référence à MyAssembly.dll v.2.0, donc les deux doivent pouvoir être situés dans Dossier bin/Release du projet C.

Que faire? Comment puis-je réparer cela?

Répondre

5

Une option est peut-être d'utiliser ILMerge pour signer l'assembly tiers, mais ce serait un peu difficile à mettre à jour si le tiers a déployé des mises à jour de leur assembly très régulièrement.

1

Vous pouvez désassembler la bibliothèque tierce et la recompiler en la signant vous-même. Bien sûr, vous ne devriez pas le faire si cela viole des licences ou si vous n'êtes pas au courant de la licence pour la bibliothèque de tiers (ce que je suppose que vous faites étant comme vous l'utilisez). Cela dit, si vous êtes en contact avec la tierce partie, demandez-leur de vous donner une version signée.

8

Idéalement, tout développeur d'assembleur tiers qui se respecte devrait signer ses assemblages. Je voudrais essayer ce qui suit:

  1. Voyez si vous pouvez contacter le fournisseur d'assembly tiers et demandez-lui de le signer pour vous.
  2. Si le fournisseur d'assembly tiers est open source, téléchargez et compilez vous-même la source avec une clé de nom forte. (Envisager de contribuer à ce projet).

Sinon, (tant que la licence permet):

  1. Essayez ildasm.exe et ilasm.exe comme ceci:

    ildasm.exe /out:TheAssembly.il TheAssembly.dll

    Ilasm.exe TheAssembly.il /key=MyKey.snk/dll /output=TheAssembly.dll

  2. Essayez ILMerge comme mentionné par les autres.

Sinon, vous devrez peut-être rechercher une autre option pour les fonctionnalités que vous avez actuellement dans l'assembly tiers.

Bonne chance!

0

Si vous ne pouvez pas demander à un tiers d'effectuer un assemblage signé (ou dans de nombreux cas, le projet a été abandonné), vous devrez signer l'assemblage vous-même.La plupart des exemples en ligne, y compris la réponse de Lloyd, causent parfois des problèmes lors d'un aller-retour. ILMerge est livré avec ses propres risques et peut ne pas être possible et difficile à maintenir dans certains projets.

J'ai écrit une application pour effectuer automatiquement la signature de n'importe quel assembly géré .NET pour surmonter toutes ces limitations et effectuer cette tâche apparemment simple de manière fiable. Cela peut être fait à partir d'une interface utilisateur, de la ligne de commande ou d'une API programmatique en fonction de vos besoins. Vous pouvez en lire plus sur l'application et la télécharger ici: http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer

Questions connexes