Come registrare un assembly non con nome sicuro per essere caricato come se fosse nella GAC?
Domanda
Uno dei nostri partner ci ha fornito un assemblaggio abbiamo bisogno di accedere dalla nostra applicazione. Purtroppo, questo non è forte-nome per cui non possiamo installarlo al GAC. E non possiamo metterlo nello stesso luogo come il nostro eseguibile.
C'è una soluzione per questo?
EDIT:. Questa sarà una soluzione temporanea solo per il test, quando vanno RC, avremo un assembly con nome
Soluzione
Hai alcune opzioni in quel punto.
Il primo è quello di posizionare il gruppo in una directory che ha il nome del gruppo (senza l'estensione) che è una sottodirectory della directory dell'applicazione .
Il secondo è quello di specificare la directory sub si desidera che il CLR per sondare i riferimenti nel file app.config utilizzando il sondare elemento .
Infine, è possibile caricare l'assembly utilizzando dinamicamente i vari carico metodi sulla classe assembly ma direi che è un molto cattiva idea, in questo caso, dato che si dispone il gruppo, e si dispone di tipi concreti che si desidera utilizzare in esso. carico di assemblaggio tempo ritardo come questo è in genere utilizzato quando si vuole subsitute l'attuazione di certe astrazioni, che non sembra essere il caso qui.
Altri suggerimenti
Per risolvere il problema utilizzando la decompilazione e la firma (utilizzando prompt dei comandi Developer per Visual Studio):
ildasm.exe /all /typelist /out=DataSystem.il DataSystem.dll
ilasm.exe /dll /optimize /key=DataSystem.snk DataSystem.il
DataSystem.snk può essere generato da un file utilizzando Visual Studio IDE http: //www.bloggedbychris. com / 2011/09/29 / firma-a-net-assemblaggio-in-visual-studio /
allora si dovrebbe essere in grado di eseguire
gacutil.exe -i DataSystem.dll
Ancora un'altra soluzione è quella di aggiungere il seguente al file machine.config:
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
E aggiungere DEVPATH = percorso per le variabili di ambiente di sistema.
La soluzione migliore e più straight-forward a firmare e registrare un assembly che ho trovato era qui: http: // codeingaddiction. blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html
Per me arrivare a questo lavoro facilmente ho CD'd in una directory come C: \ temp - questo sembrava funzionare molto meglio per me, probabilmente a causa dei permessi dei file essere più accessibile in un posto del genere