2010-03-26 3 views
8

Devo registrare più assembly in GAC utilizzando InstallSheild e inoltre ho bisogno che gli assembly vengano copiati anche su INSTALLDIR. Qual è il modo migliore per farlo? Devo anche chiamare regasm.exe per un assembly; posso farlo usando InstallShield?Registrare gli assembly in GAC utilizzando InstallShield

Ho davvero bisogno di un nuovo "componente" per ogni assembly che deve essere registrato in GAC?

risposta

10

Questa risposta presuppone che si stia utilizzando un tipo di progetto di Windows Installer.

1) Creare un componente per ogni file DLL, impostarlo come file di chiavi e impostare la cartella di destinazione su GlobalAssemblyCache. Ciò indica a Windows Installer di utilizzare l'azione standard MsiPublishAssemblies che a sua volta effettua chiamate in Fusion per registrare l'assembly nel GAC. Questo è effettivamente ciò che GACUTIL fa per te. Ricorda: GACUTIL non è ridistribuibile. Se l'assembly ha file companion, aggiungili come file companion allo stesso componente.

2) Se l'assembly è ComVisible, creare un componente per ogni DLL, contrassegnarlo come keyfile e impostare .NET ComInterop su true. Ciò causerà l'estrazione delle informazioni COM al momento della compilazione e indica a Windows Installer di utilizzare l'azione standard MsiPublishAssemblies per scrivere le informazioni nel registro. Nota: se nella sezione di registrazione dell'assembly è presente un codice utente personalizzato, questo non verrà catturato. Questo è per MSDN che regasm /regfile non esegue questo percorso di codice. Dovrai inserire manualmente queste informazioni nella vista del registro di InstallShield per quel componente.

3) Sì, è possibile distribuire un assembly con nome sicuro sia globalmente che/o privatamente. Se il privato verrà visto o meno dipende dal fatto che l'assieme con il riferimento abbia impostato l'opzione Specifica o meno.

+0

Bello per farmi saltare la memoria Chris! –

0

Sì. Per quanto riguarda il sistema, questi sono due file diversi. AFAIK, non è possibile avere un file nel GAC e averlo in una cartella casuale sul computer di destinazione allo stesso tempo.

In teoria, se è nel GAC, non è necessario nella directory del prodotto. Se è nel GAC, quella sarà la versione caricata, non quella nella directory del prodotto. Tuttavia, diventa più difficile se è necessario, ad esempio, registrarlo anche per l'interoperabilità COM. Potrei sbagliarmi, ma quando ho provato, dovevo avere entrambi: uno nella directory, uno nel GAC.

In realtà, probabilmente non è necessario nel GAC se necessario nella directory del prodotto. Se viene caricato da qualsiasi programma ovunque, sempre, allora il GAC è un posto decente per questo. Se lo stai inserendo nell'interfaccia di GAC per COM, non è necessario; registrandolo puntandolo alla cartella che hai installato funzionerà bene se hai installato installshield correttamente.

+0

Ho sviluppato una barra degli strumenti di Windows in C#. In questo caso le DLL dovrebbero essere in GAC, giusto? – Cornel

+0

Non necessariamente. Se i consumatori della tua barra degli strumenti lo usano nella loro applicazione, ne hanno solo bisogno nella cartella della tua applicazione. –