Каков "правильный" способ регистрации/установки сборки в ПКК?
Кажется, существует множество способов регистрации сборок с 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.
Преимущества: кажется, всегда работает.
Недостатки:
- должен упаковать дополнительный исполняемый файл с вашим установщиком.
- Как утилита для разработки, кажется, есть дополнительные побочные эффекты (например, принудительная установка независимо от того, что).
- НЕ следует включать в любое распространяемое для клиентов распространение.
Ответ 5
У вашего установщика нет способа установить сборку в GAC? Я бы сказал, GACUTIL:
http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx
Ответ 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 не будет работать. Проводник показывает только упрощенное представление о папке, которая содержит на самом деле множество разных папок для разных видов сборок. Выполнение копии в нем из установщика не приведет к запуску всех операций, выполняемых проводником при перетаскивании. (написано здесь, потому что у меня еще недостаточно репутации, чтобы комментировать другие сообщения).