2010-03-26 2 views
8

Je dois enregistrer plusieurs assemblages dans GAC à l'aide de InstallSheild et j'ai également besoin que les assemblages soient copiés dans INSTALLDIR. Quelle est la meilleure façon de le faire? Aussi j'ai besoin d'appeler regasm.exe pour un assemblage; puis-je faire cela en utilisant InstallShield?Enregistrement des assemblages au GAC à l'aide d'InstallShield

J'ai vraiment besoin d'un nouveau 'composant' pour chaque assembly qui doit être enregistré dans GAC?

Répondre

10

Cette réponse suppose que vous utilisez un type de projet Windows Installer.

1) Créez un composant pour chaque fichier DLL, définissez-le comme fichier de clés et définissez le dossier de destination sur GlobalAssemblyCache. Cela indique à Windows Installer d'utiliser l'action standard MsiPublishAssemblies qui, à son tour, appelle Fusion pour enregistrer l'assembly dans le GAC. C'est effectivement ce que GACUTIL fait pour vous. Rappelez-vous: GACUTIL n'est pas redistribuable. Si l'assembly possède des fichiers compagnons, ajoutez-les en tant que fichiers compagnons au même composant.

2) Si votre assembly est ComVisible, créez un composant pour chaque DLL, marquez-le en tant que fichier de clés et définissez le .NET ComInterop sur true. Cela provoquera l'extraction des informations COM lors de la génération et indiquera à Windows Installer d'utiliser l'action standard MsiPublishAssemblies pour écrire les informations dans le registre. Remarque: Si vous avez un code d'utilisateur personnalisé dans la section d'enregistrement de l'assemblage, il ne sera pas capturé. C'est par MSDN que regasm /regfile n'exécute pas ce chemin de code. Vous devrez entrer manuellement ces informations dans la vue de registre de InstallShield pour ce composant.

3) Oui, vous pouvez déployer un assembly à nom fort globalement et/ou privé. Que le privé soit vu ou non dépend de si l'assembly avec la référence a défini UseSpecific ou non.

+0

Nice pour faire du jogging ma mémoire Chris! –

0

Oui. En ce qui concerne le système, ce sont deux fichiers différents. AFAIK, vous ne pouvez pas avoir un fichier dans le GAC et il doit être dans un dossier aléatoire sur l'ordinateur cible en même temps. En théorie, si c'est dans le GAC, vous n'en avez pas besoin dans le répertoire du produit. Si c'est dans le GAC, ce sera la version chargée, pas celle du répertoire du produit. Cependant, cela devient plus difficile si vous devez, par exemple, l'enregistrer pour COM interop aussi. Je peux me tromper, mais quand j'ai essayé, j'ai dû avoir les deux: un dans le répertoire, un dans le GAC. Mais en réalité, vous n'en avez probablement pas besoin dans le GAC si vous en avez besoin dans le répertoire du produit. Si c'est chargé de n'importe quel programme n'importe où, toujours, alors le GAC est un endroit décent pour cela. Si vous le mettez dans le GAC Pour COM interop, ce n'est pas nécessaire; l'enregistrer en le pointant vers le dossier que vous avez installé fonctionnera correctement si vous avez installé installshield correctement.

+0

J'ai développé une barre d'outils Windows en C#. Dans ce cas, les DLL devraient être dans GAC, non? – Cornel

+0

Pas nécessairement. Si les consommateurs de votre barre d'outils l'utilisent dans leur application, ils en ont seulement besoin dans le dossier de votre application. –

Questions connexes