Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Снова регистрация ...


Автор: Wanderer2019 19.9.2006, 11:29
бъясните плиз на пальцах... как зарегестрировать мою Dll (Framework 2.0)
Задолбался уже... пробую все, что написано в MSDN, затем проверяю в Ole Viewer, а его там нет. =(

Автор: ivashkanet 19.9.2006, 11:35
Wanderer2019, что значит зарегистировать? В GAC?

Автор: Wanderer2019 19.9.2006, 12:04
да... поместить в GAC, чтобы в дальнейшем можно было создать данный объект, не подключая библиотек... т.е. что то типа CreateObject

Автор: reloni 19.9.2006, 12:22
Что бы помещать сборку к кеш, нужно сначала присвоить ей строгое имя. В свойствах проекта выбираешь Signing и ставишь галку Sign Assembly. Далее помещаешь сборку в кеш. Далее в проекте добавляешь референс на свою сборку и пользуешься. Это в общих чертах, я этим занимался только один разsmile

Автор: ivashkanet 19.9.2006, 12:22
1) Подписываем сборку (создаем StrongName)
а) либо через VS (свойства проекта ---> Подписывание)
б) через командную строку (посмотри в MSDN)
2) Регистрируешь сборку в GAC
а) Просто в Эксплориере кидаешь файл со сборкой в папку C:\WINDOWS\assembly (p.s. физически ее на диске нет)
б) через командную строку (опять же в MSDN)

Добавлено @ 12:27 
Цитата

To create and sign an assembly with a strong name using the Assembly Linker
At the command prompt, type the following command: 

al /out:<assembly name> <module name> /keyfile:<file name>


In this command, assembly name is the name of the assembly to sign with a strong name, module name is the name of the code module used to create the assembly, and file name is the name of the container or file that contains the key pair. 
The following example signs the assembly MyAssembly.dll with a strong name using the key file sgKey.snk.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk

To sign an assembly with a strong name using attributes
In a code module, add the AssemblyKeyFileAttribute or the AssemblyKeyNameAttribute, specifying the name of the file or container that contains the key pair to use when signing the assembly with a strong name.

The following code example uses the AssemblyKeyFileAttribute with a key file called sgKey.snk, located in the directory where the assembly is compiled. This assumes that the assembly is compiled using the command-line compilers vbc.exe and csc.exe.

Visual Basic  Copy Code 
<Assembly:AssemblyKeyFileAttribute("sgKey.snk")>
 
C#  Copy Code 
[assembly:AssemblyKeyFileAttribute(@"sgKey.snk")]
 
Note  
In development environments such as Visual Studio, the assembly might not be compiled in the project directory. For example, some versions of Visual Studio compile C# projects in a bin\Debug subdirectory. In that case, the path in the code example would be "..\\..\\sgKey.snk". In Visual Studio 2005 the key file for C# can be specified in project settings.
 

You can also delay sign an assembly when compiling. For more information, see Delay Signing an Assembly.

When signing an assembly with a strong name, the Assembly Linker (Al.exe) looks for the key file relative to the current directory and to the output directory. When using command-line compilers, you can simply copy the key to the current directory containing your code modules.



Цитата

The Global Assembly Cache tool allows you to view and manipulate the contents of the global assembly cache and download cache.
 
gacutil [options] [assemblyName | assemblyPath | assemblyListFile]

Автор: Exception 19.9.2006, 12:40
Причём тут GAC? Тебе просто нужно загрузить сборку через статический метод Assembly.LoadFrom(), а затем получить нужный тип. Сборку же можно хранить и в папке приложения.

Автор: Wanderer2019 19.9.2006, 13:33
Exception, 
неее... скорей всего мне придется грузить ее из VBS. 

Автор: Wanderer2019 19.9.2006, 14:01
вот опять ничего не сработало... итак.. чтобы было понятней что именно я делаю и где может бытьо ошибка опишу все по шагам.
1. Создал проект WindowsControlLibrary2
     Итого имею Проект WindowsControlLibrary2 и в нем UserControl1
2. Настроил подписывание проекта через VS 2005
3. Чтобы быть уверенным что утилита al вся имеется в одном месте перегнал мою dll в папку с фреймворком  и туда же кинул файл ключа (snk).
4. Прописываю в командной строке:
al.exe /out:WindowsControlLibrary2.dll WindowsControlLibrary2.UserControl1 /keyfile:mykey.snk

в ответ получаю:
ALINK: error importing file
'c:\.....\WindowsControlLibrary2.UserControl1' - - The system cannot find the file specified.


Получается что этот гад зачем то ищет файл с именем WindowsControlLibrary2.UserControl1 ... естессьно его там нет... зачем он ему то нужен??? и что это за файл...

Автор: ivashkanet 19.9.2006, 14:07
Цитата(Wanderer2019 @  19.9.2006,  14:01 Найти цитируемый пост)
al.exe /out:WindowsControlLibrary2.dll WindowsControlLibrary2.UserControl1 /keyfile:mykey.snk

А что сие означает? Можно узнать?

Добавлено @ 14:08 
тебе нужно что-то типа 
gacutil /i WindowsControlLibrary2.dll

Добавлено @ 14:09 
Блин, Wanderer2019, al  делает строгое имя сборке. А оно у тебя уже есть  smile 

Автор: Wanderer2019 19.9.2006, 14:15
Цитата(ivashkanet @  19.9.2006,  14:07 Найти цитируемый пост)
Блин, Wanderer2019, al  делает строгое имя сборке. А оно у тебя уже есть  smile 

Хорошо.. в таком случае как зарегистрить эту сборку?????

Автор: ivashkanet 19.9.2006, 14:20
Цитата(Wanderer2019 @  19.9.2006,  14:15 Найти цитируемый пост)
Хорошо.. в таком случае как зарегистрить эту сборку?????

Цитата(ivashkanet @  19.9.2006,  14:07 Найти цитируемый пост)
тебе нужно что-то типа 
gacutil /i WindowsControlLibrary2.dll




Автор: Wanderer2019 19.9.2006, 14:45
Цитата(ivashkanet @  19.9.2006,  14:20 Найти цитируемый пост)
gacutil

просто копирует dll в папку GAC... на этом ее функциональность заканчивается...
она никак не регистрируется в результате этих действий...
через Ole Viewer и при помощи CreateObject её не видно и не слышно.

Автор: ivashkanet 19.9.2006, 14:50
А через проводник? 
C:\WINDOWS\assembly
 smile 

Автор: Wanderer2019 19.9.2006, 14:55
да мне честно говоря все равно, где она будет лежать... просто привык что всякие ActiveX лежат в гаке... основным критерием является способность получить инстанс через CreateObject... через gacutil не получилось... т.е. он ее в гак бросил, но исключительно как мертвый груз... в системе он ее так и не прописал... что делать не знаю =(

Автор: Exception 19.9.2006, 15:18
Ты явно что-то путаешь. ActiveX никогда не лежали и не будут лежать в GAC'е. GAC - это вообще кэш для сборок .NET, и тебе он вообще не нужен, да и сборке необязательно давать строгое имя. Для регистрации в GAC действительно нужно только скопировать файл в его директорию. А тебе нужно:
1) Сделать сборку и классы ComVisible.
2) Зарегистрировать её как COM-сервер regsvr32.exe "путь к сборке".

Автор: ivashkanet 19.9.2006, 15:24
Цитата(Exception @  19.9.2006,  15:18 Найти цитируемый пост)
да и сборке необязательно давать строгое имя. 

А это не правда 
Цитата(Exception @  19.9.2006,  15:18 Найти цитируемый пост)
Для регистрации в GAC действительно нужно только скопировать файл в его директорию.

Только, да не очень. 
В папке C:\WINDOWS\assembly физически не все все так просто как в проводнике. Там куча папок и подпапок (только GAK-ов у меня 3 штуки smile )
Просто регистратор и просмотрщик GAK встроен внутрь виндового проводника 

Автор: Exception 19.9.2006, 15:33
Я же объяснил -- ему не GAC нужен smile ! Ему нужно использовать библиотеку как COM-сервер в VB 5, а тот ни о каких дотнетах, ни о строгих именах, ни, тем более, GAC'ах, не слышал. Тут нужна регистрация ActiveX, выполняемая утилитой regsvr32.exe.

Автор: Wanderer2019 19.9.2006, 17:09
Цитата(Exception @  19.9.2006,  15:18 Найти цитируемый пост)
1) Сделать сборку и классы ComVisible.

как сие сделать?

Автор: mr.DUDA 19.9.2006, 18:24
Поставить одновременный атрибут в AssemblyInfo в true (он там по дефолту в false).

Автор: Wanderer2019 26.9.2006, 14:20
Сделал WindowsControlLibrary ... 
Откомпилил... - получил длл.

В коде поставил:
Код


[assembly: ComVisible(true)]


Говорит, то не может зарегестрить т.к. Entry Point Was Not Found =(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)