2010-03-26 3 views
8

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

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

ответ

10

Этот ответ предполагает, что вы используете тип проекта установщика 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

Ницца, чтобы пробежать мою память Крис! –

0

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

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

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

+0

Я разработал панель инструментов Windows на C#. В этом случае dll должны быть в GAC, правильно? – Cornel

+0

Не обязательно. Если пользователи вашей панели инструментов используют его в своем приложении, тогда они нужны только в папке вашего приложения. –

Смежные вопросы