Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регистрация NET компонента 
V
    Опции темы
Therion
Дата 2.4.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Есть библиотека на C++/CLI. Для использования ее в NET приложениях приходится указывать путь к dll файлу. Как зарегистрировать ее в Reference списке и автоматизировать ее перенос на другие машины.
Заранее благодарен smile
PM MAIL   Вверх
mr.DUDA
Дата 2.4.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если это C++/CLI библиотека, её можно добавлять через Add Reference обычным способом. На других машинах длл-ка просто должна быть в одной директории с программой. Или я что-то пропустил?


--------------------
user posted image
PM MAIL WWW   Вверх
Therion
Дата 2.4.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Если dll с программой находятся в одной директории то все нормально. Нужно предусмотреть вариант если они находятся в разных местах. Неплохо бы если реализовать два варианта: 1. если с прогой в одной папке, то регистрация не нужна; 2. если в разных то зарегистрировать. 
PM MAIL   Вверх
yar
Дата 2.4.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 8.9.2007
Где: Одесса, Украина

Репутация: нет
Всего: 8



Поместить эту сборку в GAC (Global Assembly Cache). 
Для этого нужно дать ей строгое имя и зарегестрировать при помощи gacutil.
Подробности тут.
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
Therion
Дата 2.4.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Это как раз то что нужно, только после того как я проделал все действия, получаю ошибку:
Код

C:\Program Files\Microsoft Visual Studio 8\VC\include\msclr/auto_gcroot.h(18) : fatal error C1189: #error :  ERROR: msclr libraries are not compatible with /clr:oldSyntax

Не использовать auto_gcroot не получится  smile 
PM MAIL   Вверх
yar
Дата 2.4.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 8.9.2007
Где: Одесса, Украина

Репутация: нет
Всего: 8



Попробуй всё таки оставить в Common Language Runtime support просто /clr, не меняя на /clr:oldSyntax.
--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
Therion
Дата 2.4.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Пробовал. При компиляции выдает предупреждение:
Код

mt.exe : general warning 810100b3: ..\..\libdebug\MyLib.dll is a strong-name signed assembly and embedding a manifest invalidates the signature. You will need to re-sign this file to make it a valid assembly.

После того как я пытаюсь зарегистрировать:
Код

E:\Projects\MyLib\libdebug>gacutil -i MyLib.dll
Microsoft (R) .NET Global Assembly Cache Utility.  Version 2.0.50727.42
Copyright (c) Microsoft Corporation.  All rights reserved.

Failure adding assembly to the cache: Strong name signature could not be verifie
d.  Was the assembly built delay-signed?

PM MAIL   Вверх
mr.DUDA
Дата 2.4.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Похоже, манифест dll сбрасывает подпись.


--------------------
user posted image
PM MAIL WWW   Вверх
Therion
Дата 3.4.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Помогло в Project->Properties->Manifest Tool->Input and Output установка параметра Embed Manifest в No. Теперь компиляция проходит без предупреждений и gacutil помещает либу в C:\windows\assemble\GAC_32. Вот только все програмы выплевывают ошибку постоянно, даже если либа в папке с ними :(.
PM MAIL   Вверх
Therion
Дата 3.4.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Есть решение:
1. вернуть параметр Project->Properties->Manifest Tool->Input and Output->Embed Manifest обратно в YES
2. убрать [assembly:AssemblyKeyFile("MyLib.snk")]; из AssemblyInfo.cpp
3. установить путь к MyLib.snk файлу в Project->Properties->Link->Advanced->Key File
Теперь все работает, но только возникла другая проблема - работают только программы скомпиленные с текущей версией либы, а все другие выплевываю:
Код

An unhandled exception of type 'System.IO.FileLoadException' occurred in System.Windows.Forms.dll

Additional information: Could not load file or assembly 'MyLib, Version=1.0.3015.18526, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Как можно избавится от такой жесткой привязки к версиям?
PM MAIL   Вверх
yar
Дата 3.4.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 8.9.2007
Где: Одесса, Украина

Репутация: нет
Всего: 8



Можно указать в файле политик издателя глобально, или в конфигурационном файле приложения локально, какую версию сборки использовать. По-умолчанию приложение, использующее сборку со строгим именем загружает ту версию, которая была указана на этапе компиляции.. Мы же можем это поведение переопределить

Пример конфигурационного файла (myapp.exe.config):
Код

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myAssembly"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>


Подробнее тут.

--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
Therion
Дата 3.4.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Отлично! Все работает smile
Спасибо за советы  smile 
PM MAIL   Вверх
Therion
Дата 15.4.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Вот описание как все делать на украинском http://progforthedamned.blogspot.com/2008/...mbly-cache.html
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.