Каков "правильный" способ регистрации/установки сборки в ПКК?

Кажется, существует множество способов регистрации сборок с GAC, так как они работают. Однако, какой "правильный" способ сделать это?

В ответ на Лу Франко (и gacutil):

Я использую Gacutil для разработки, но мне кажется, что это не правильный способ его установить, поскольку gacutil не включен в основные .NET-утилиты .NET.NET - это только инструмент разработчика.

Дополнительно: Gacutil (как видно из ответов ниже) не распространяется и поэтому не должен использоваться в любом приложении, которое вы намереваетесь предоставлять людям, которые не являются разработчиками. AKA, клиенты. См. Это сообщение в блоге (и комментарии) Аарона Стебнера.

В ответ на использование WIX:

WIX может быть отличным и все, но как он работает под капотом? Какие детали делает способ, которым WIX устанавливает сборку правильно, чтобы установить ее? Как это выглядит? Это вызов системы /.NET? Есть ли какой-нибудь вызов в dll, который похоронен где-то в System32, который нужно сделать?

(Edit: похоже, что WIX использует MSI под капотом. См. мои комментарии в принятом ответе.)

Окончательное редактирование: похоже, что правильный способ установки сборки в GAC - это использовать установщик Windows, и ничего больше. Я собираюсь попробовать Wix. Спасибо всем!

Ответы

Ответ 1

С Wix я бы сделал что-то вроде этого:

<DirectoryRef Id="MyDirectory" >
    <Component Id="MyComponent" Guid="PUT-GUID-HERE" DiskId="1">
        <File Id="MyAssembly" Name="MyAssembly.dll" Assembly=".net" KeyPath="yes" Source="MyAssembly.dll" />
    </Component>
</DirectoryRef>

Когда вы используете атрибут Assembly = ". net" для файла в WiX, он будет создавать записи в таблице MsiAssembly и MsiAssemblyName для этого компонента и пометить его как компонент GAC.

Ответ 2

Использовать метод System.EnterpriseServices.Internal.Publish GacInstall.

Преимущества: Кажется, это внутренний инструмент. Наверное, делает все правильно.

Недостатки. Как часть установщика, вам все равно нужно создать и запустить приложение, которое вызывает это (если только установщик, который вы создаете, не является обычным приложением, которое делает это в любом случае).

Ответ 3

http://blogs.msdn.com/astebner/archive/2006/11/04/why-to-not-use-gacutil-exe-in-an-application-setup.aspx

Похоже, что гакутил следует избегать; это не распространяемое приложение. Вместо этого "правильный" способ их установки, похоже, использует MSI, один из которых является WIX, как опубликован CheGueVerra или другим script.

Ответ 4

использовать gacutil.

Преимущества: кажется, всегда работает. Недостатки:

  • должен упаковать дополнительный исполняемый файл с вашим установщиком.
  • Как утилита для разработки, кажется, есть дополнительные побочные эффекты (например, принудительная установка независимо от того, что).
  • НЕ следует включать в любое распространяемое для клиентов распространение.

Ответ 6

Если вы не хотите самостоятельно обрабатывать материал gacutil, вы всегда можете создать проект установки в visual studio.

Но я бы сам придерживался гакузи.

Ответ 7

Лучший способ - использовать gacutil -i Library.dll.

Единственная проблема с gacutil заключается в том, что она не находится в PATH по умолчанию системы. Однако он находится в фиксированном местоположении относительно каталога Windows для данной версии .Net Framework. Таким образом, вы можете использовать следующую командную строку для ее выполнения из любого места:

%SystemRoot%\Microsoft.Net\Framework\v1.1.4322\gacutil -i

PS: просто копирование сборки в c:\windows\assembly не будет работать. Проводник показывает только упрощенное представление о папке, которая содержит на самом деле множество разных папок для разных видов сборок. Выполнение копии в нем из установщика не приведет к запуску всех операций, выполняемых проводником при перетаскивании. (написано здесь, потому что у меня еще недостаточно репутации, чтобы комментировать другие сообщения).

Ответ 8

скопируйте непосредственно в% WINDIR%\Assembly.

Преимущество: прямо.

Недостаток: AFAIK,% WINDIR%\Сборка просто происходит там, где она находится прямо сейчас, и ее местоположение может быть изменено. Это может привести к его разрыву в будущих версиях окон или в случае поведения этой папки. Возможно, это неправильный способ.

Крайнее Недостаток: Как сказал madmath:

просто копирование вашей сборки в c:\windows\assembly не будет работать. Проводник показывает только упрощенное представление о папке, которая содержит на самом деле множество разных папок для разных видов сборок. Выполнение копии в нем из установщика не приведет к запуску всех операций, выполняемых проводником при перетаскивании. (написано здесь, потому что у меня еще недостаточно репутации, чтобы комментировать другие сообщения).