Ho alcune librerie che uso nel mio progetto che non sono firmate. Poiché la mia applicazione è fortemente firmata, anche le librerie devono esserlo.Come posso firmare fortemente una DLL esterna mantenendo i suoi metadati di assembly?
firmo queste librerie utilizzando:
"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\ildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe" /dll /key=MyKey.snk library.il
Il problema è che tutti i metadati, come ad esempio i numeri di versione, perdersi nella DLL ormai firmato. Questo è un problema perché ora alcune dipendenze tra le librerie sono interrotte. Come posso conservare i numeri di versione senza ricorrere alla compilazione del codice sorgente di tali librerie?
UPDATE
In realtà è un particolare DLL che mostra questo problema e ho scoperto che è costruito utilizzando ILMerge. Forse questo sta causando il problema. Giusto per essere chiari: la DLL prodotta da ILMerge ha i metadati corretti, solo dopo averlo disassemblato e riassemblato, i metadati scompaiono.
UPDATE 2
ho aperto la DLL in Reflector e sembra che almeno il numero di versione è ancora lì. Stavo controllando sempre usando la finestra di dialogo delle proprietà dei file/dettagli in Windows Explorer. Quindi immagino che sia il manifest che manca invece.
L'ho provato di nuovo in un ambiente isolato e di nuovo tutti i metadati scompaiono. Nel file IL generato, posso vedere il numero di versione nella parte inferiore dello scope dell'assieme, come suggerito. Nel frattempo, ho capito che forse il fatto che questa particolare DLL sia stata creata usando ILMerge sta causando il problema. –
Avete controllato l'uscita di ILMerge? Fondamentalmente non riesco a immaginare che sia importante quello che è successo prima all'assemblaggio, se la versione dell'assembly è presente in ildasms, l'output dovrebbe gestirlo correttamente. –
Ho aperto la DLL in Reflector e sembra che almeno il numero di versione sia ancora lì. Stavo controllando sempre usando la finestra di dialogo delle proprietà dei file/dettagli in Windows Explorer. Quindi immagino che sia il manifest che manca invece. Questo non dovrebbe avere alcuna influenza sul binding dell'assemblaggio, giusto? –