12
votes

Signature d'un assemblage non signé

La récente mise à niveau de NHibernate 2.1 a apporté une situation de maux de tête Mega à la surface.

Il semble que la plupart des projets construisent par défaut comme des assemblages signés. Pour Exemple de références fluentnibernate Le fichier clé fluent.snk.

Nibernate.Search construit non signé à partir de ce que je peux rassembler et ne pas construire Signé c'est si vous faites référence à un fichier clé généré, vous obtenez l'erreur:

Assemblée référencé 'lucene.net' n'a pas de nom fort

Cela signifie que des projets comme le château.aciverecord qui ont NHibernate.Search comme une dépendance ne construira pas comme vous obtenez l'erreur horrible référencée Assembly Nhibernate.Search n'a pas de nom fort:

Si quelques projets utilisent CASLTE.ACTIVERCORD afin qu'il soit assez important que Cela construit.

Quelqu'un a-t-il une idée de quoi faire ici car je suis totalement à l'abri des idées?

C'est une folie complète.


0 commentaires

4 Réponses :


2
votes

La chose est que vous ne pouvez pas faire référence à des assemblages non solides nommés à partir d'assemblages solides nommés, mais vous pouvez faire l'inverse. C'est pourquoi chaque projet décent devrait être signé.

Lorsque je rencontre ce problème, je dépose une ligne à l'auteur du projet (ou enregistrez-vous un problème) avec l'explication dans mon commentaire ci-dessus, et pendant que j'attends un correctif, je compile et le signer moi-même.


1 commentaires

+1. Ouais, les options sont soit prenez le contrôle vous-même et sentez-vous, soit de faire tout ce genre de choses non signé (ce qui n'est généralement pas un bon choix).



17
votes
  1. Obtenez le MSIL pour l'assemblage fourni À partir d'une invite de commande vs.net, entrez les éléments suivants: C:> Ildasme fournitasembly.dll /out:Providedambly.il
  2. renommer / déplacer l'assemblage d'origine Je viens de taper sur ".orig" au nom de fichier.
  3. Créez un nouvel assemblage à partir de la sortie MSL et de votre clé de clé de montage. En supposant que vous avez déjà un fichier de paire de clés de montage, procédez comme suit à partir d'une invite de commande vs.net: C:> ILASM Sountissembly.il / DLL /key=KeyPair001.snk

    source http://www.andrewconnell.com/blog /Rarchive/2004/12/15/772.aspx


0 commentaires

0
votes

Il existe un guide détaillé publié à http : //buffered.io/postS/net-fu-signing-an-unsigned-Assembly-WithOut-Delay-Signant .

En résumé, la procédure est la suivante:

  • Démontez le binaire cible en utilisant ildasme
  • Reconstructionnez / réassemblez à l'aide de Ilasm , cette fois avec une touche

0 commentaires

1
votes

Toutes les réponses données ont une faille grave dans eux - elles ne fonctionnent pas s'il y a plus d'une assemblée non signée qui dépend de l'autre. Vous devrez éditer les fichiers IL manuellement pour modifier des références non signées à des signes signés. C'est certainement possible, mais Erreur sujette.

Il y a une bien meilleure façon. Tout d'abord, voici mes sources:

  1. https://www.nuget.org/packages/nivot.strongnage /1.0.4.2
  2. Comment Pour télécharger un package Nuget sans Nuget.exe ou Visual Studio Extension?

    Le premier est un lien vers un package Nuget appelé Strongnaming, ce qui permet de nommer fortement des assemblages et qu'il s'occupe également de références non signées pour vous! Le second explique comment télécharger des packages Nuget sans studio Visual, si nécessaire.

    I, personnellement, utilisé le studio Visual pour le télécharger à l'aide du gestionnaire de packages Nuget lui-même, cependant, vous pouvez toujours naviguer directement sur https://www.nuget.org/api/v2/package/nivot.strongnaming/1.0.4.2 et téléchargez le nivot.strongning.1.0.4.2.zip

    Il existe un dossier outils dans le zip téléchargé (ou le package si Nuget a été utilisé). Une fois que vous avez bien installé, vous pouvez facilement l'installer en tant que module PowerShell.


0 commentaires