Зарегистрируйте сборки в GAC, используя InstallShield - PullRequest
8 голосов
/ 26 марта 2010

Мне нужно зарегистрировать несколько сборок в GAC с помощью InstallSheild, а также мне нужно скопировать сборки также на INSTALLDIR. Какой лучший способ сделать это? Также мне нужно вызвать regasm.exe для сборки; я могу сделать это с помощью InstallShield?

Мне действительно нужен новый «компонент» для каждой сборки, которая должна быть зарегистрирована в GAC?

Ответы [ 2 ]

11 голосов
/ 27 марта 2010

В этом ответе предполагается, что вы используете тип проекта установщика Windows.

1) Создайте компонент для каждого DLL-файла, сделайте его ключевым файлом и установите для папки назначения значение GlobalAssemblyCache. Это дает указание установщику Windows использовать стандартное действие MsiPublishAssemblies, которое, в свою очередь, выполняет вызовы в Fusion для регистрации сборки в GAC. Это то, что GACUTIL делает для вас. Помните: GACUTIL не подлежит распространению. Если в сборке есть сопутствующие файлы, добавьте их в качестве сопутствующих файлов к тому же компоненту.

2) Если ваша сборка ComVisible, создайте компонент для каждой библиотеки DLL, отметьте его как ключевой файл и установите для .NET ComInterop значение true. Это приведет к тому, что информация COM будет извлечена во время сборки, и скажет установщику Windows использовать стандартное действие MsiPublishAssemblies для записи информации в реестр. Примечание: если у вас есть пользовательский код пользователя в разделе регистрации сборки, он не будет записан. Это для MSDN, что regasm /regfile не выполняет этот путь кода. Вам придется вручную ввести эту информацию в представление реестра InstallShield для этого компонента.

3) Да, вы можете развернуть сборку со строгим именем как глобально, так и / или приватно. Будет ли виден приватный или нет, зависит от того, имеет ли сборка со ссылкой набор UseSpecific или нет.

0 голосов
/ 26 марта 2010

Да. Что касается системы, это два разных файла. AFAIK, у вас не может быть файла в GAC, и он должен быть одновременно в случайной папке на целевом компьютере.

Теоретически, если он находится в GAC, он вам не нужен в каталоге продуктов. Если он находится в GAC, это будет загруженная версия, а не та, которая находится в каталоге продукта. Однако, это становится сложнее, если вам нужно, скажем, зарегистрировать его для COM-взаимодействия. Я могу ошибаться, но когда я пытался, мне приходилось иметь оба: один в каталоге, другой в GAC.

Но на самом деле, вам, вероятно, не нужно это в GAC, если вам это нужно в каталоге продукта. Если он загружается из любой программы в любом месте, всегда, то GAC - достойное место для этого. Если вы помещаете это в взаимодействие GAC For COM, это не нужно; если зарегистрировать его, указав на папку, которую вы установили, она будет работать нормально, если у вас правильно настроен installshield.

...