Domanda

Abbiamo una serie di componenti COM sviluppati in VC ++. Quando si aggiunge un riferimento a tale componente di un progetto di Visual Studio .NET genera un assembly di interoperabilità. Abbiamo una serie di tali assemblee ora.

Durante l'esecuzione del nostro build giornaliera Firmiamo tutti i file binari prodotti con una firma digitale. assembly di interoperabilità non sono firmati dal momento che non sentiamo gli autori -. chiunque può utilizzare Visual Studio e produrre le stesse assemblee

Dovremmo firmare gli assembly di interoperabilità come bene? Dovremmo anche loro firmare con un nome sicuro (Sn.exe utility)? Quali sono le ragioni per farlo?

È stato utile?

Soluzione

Questo è stato un equilibrio difficile per un certo tempo. Il problema deriva dal fatto che è necessario distribuire gli assembly di interoperabilità con il codice di e si può essere firmando le proprie assemblee. Se si firma l'assembly poi tutte le assemblee a cui fa riferimento deve essere firmato - tra gli assembly di interoperabilità. Quindi devi firmare loro.

Se si distribuisce un applicazione stand-alone quindi non c'è alcun rischio e si dovrebbe solo andare avanti e firmare le assemblee per rendere la vita più facile.

Se si distribuisce librerie di componenti, le cose possono essere un po 'più complicato dal momento che un altro sviluppatore che utilizza le librerie potrebbero generare i propri assembly di interoperabilità, ma loro firmare con le proprie chiavi. Questo fa sì che ogni tipo di problema di denominazione e di dipendenza.

A seconda di come complesso gli assembly di interoperabilità sono - è possibile generare il codice proxy in un file separato .CS / .VB e compilarlo direttamente nella vostra assemblea. Allora non dovrete preoccuparvi di problemi di nome sicuro.

Altri suggerimenti

Usiamo Sn.exe a nome sicuro i nostri assembly di interoperabilità prodotti dagli strumenti come wrapper per gli oggetti COM. Abbiamo bisogno di fare questo, come le assemblee di caricarli sono firmate, di conseguenza, essi devono essere firmati.

Per generare gli assembly di interoperabilità che usiamo:

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll"

Ovviamente rimuovere / DelaySign se si è completamente firmando.

Come per non authoring le assmeblies, questo potrebbe essere il caso, ma si sono responsabili per loro. Si vuole garantire che essi non vengono sostituiti (accidentalmente o meno) da nessun altro, quindi probabilmente dovrebbe applicare lo stesso livello di firma nomi / strong come si applica al tuo altro codice.

Sostituire "publickey" con "file di chiavi":

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top