Я должен зарегистрировать несколько блоков к GAC использование InstallSheild, и также мне нужны блоки, которые будут скопированы на INSTALLDIR также. Что лучший способ состоит в том, чтобы сделать это? Также я должен назвать regasm.exe для блока; я могу сделать это использование InstallShield?
Мне действительно нужен новый 'компонент' для каждого блока, который должен быть зарегистрирован в GAC?
В этом ответе предполагается, что вы используете тип проекта установщика 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 или нет.
Да. Что касается системы, это два разных файла. AFAIK, вы не можете иметь файл в GAC и одновременно иметь его в случайной папке на целевом компьютере.
Теоретически, если он находится в GAC, он вам не нужен в каталоге продукта.Если он находится в GAC, это будет загруженная версия, а не та, которая находится в каталоге продукта. Однако становится сложнее, если вам нужно, скажем, зарегистрировать его и для COM-взаимодействия. Возможно, я ошибаюсь, но когда я попытался, мне пришлось иметь оба: один в каталоге, другой в GAC.
Но на самом деле он вам, вероятно, не нужен в GAC, если он вам нужен в каталоге продукта. Если он загружается из любой программы где угодно и всегда, то GAC - подходящее место для этого. Если вы помещаете его в GAC для взаимодействия COM, в этом нет необходимости; зарегистрировав его, указав на папку, в которой вы установили, он будет работать нормально, если вы правильно настроили installshield.