Ich muss mehrere Assemblys mit InstallShield auf GAC registrieren, und ich brauche auch die Assemblys auf dem INSTALLDIR kopiert werden. Was ist der beste Weg, es zu tun? Außerdem muss ich regasm.exe für eine Assembly aufrufen; kann ich dies mit InstallShield tun?
Ich brauche wirklich eine neue 'Komponente' für jede Assembly, die in GAC registriert werden muss?
Diese Antwort setzt voraus, dass Sie einen Windows Installer-Projekttyp verwenden.
1) Erstellen Sie für jede DLL-Datei eine Komponente, machen Sie sie als Schlüsseldatei und setzen Sie den Zielordner auf GlobalAssemblyCache. Das weist Windows Installer an, die MsiPublishAssemblies-Standardaktion zu verwenden, die Aufrufe in Fusion aufruft, um die Assembly in dem GAC zu registrieren. Dies ist effektiv, was GACUTIL für Sie tut. Denken Sie daran: GACUTIL ist nicht weiter verteilbar. Wenn die Assembly Companion-Dateien enthält, fügen Sie sie als Companion-Dateien derselben Komponente hinzu.
2) Wenn Ihre Assembly ComVisible ist, erstellen Sie für jede DLL eine Komponente, markieren Sie sie als Schlüsseldatei, und setzen Sie .NET ComInterop auf true. Dies führt dazu, dass die COM-Informationen zum Zeitpunkt der Erstellung extrahiert werden und Windows Installer angewiesen wird, die Standardaktion MsiPublishAssemblies zum Schreiben der Informationen in die Registrierung zu verwenden. Hinweis: Wenn Sie im Registrierungsabschnitt der Baugruppe einen benutzerdefinierten Benutzercode haben, wird dieser nicht erfasst. Dies ist pro MSDN, dass regasm /regfile
diesen Codepfad nicht ausführt. Sie müssen diese Informationen manuell in die Registrierungsansicht von InstallShield für diese Komponente eingeben.
3) Ja, Sie können eine Assembly mit starkem Namen global und / oder privat bereitstellen. Ob der private gesehen wird oder nicht, hängt davon ab, ob die Assembly mit der Referenz UseSpecific gesetzt hat oder nicht.
Ja. Soweit das System kümmert, sind das zwei verschiedene Dateien. AFAIK, Sie können keine Datei im GAC haben und sie gleichzeitig in einem zufälligen Ordner auf dem Zielcomputer haben.
Theoretisch, wenn es in der GAC ist, brauchen Sie es nicht im Produktverzeichnis. Wenn es in der GAC ist, wird dies die geladene Version sein, nicht die im Produktverzeichnis. Es wird jedoch schwieriger, wenn Sie es beispielsweise für COM-Interop registrieren müssen. Ich könnte mich irren, aber als ich es versuchte, musste ich beides haben: eins im Verzeichnis, eins im GAC.
Aber wirklich, Sie brauchen es wahrscheinlich nicht im GAC, wenn Sie es im Produktverzeichnis brauchen. Wenn es von irgendeinem Programm überall und immer geladen wird, dann ist das GAC ein anständiger Ort dafür. Wenn Sie es in die GAC für COM-Interop setzen, ist das unnötig; Wenn Sie es registrieren, indem Sie es auf den Ordner richten, den Sie installiert haben, funktioniert es einwandfrei, wenn Sie installshield korrekt konfiguriert haben.
Tags und Links .net gac installshield