Использование привязки сборки в DLL app.config

Я довольно новичок в работе с библиотеками классов и надеялся, что кто-нибудь скажет мне, если я что-то упустил или что то, что я пытаюсь сделать, того стоит:

У меня есть DLL, которая запускается из приложения VB6. Мы назовем это test.dll. Test.dll использует другой.dll, который мы назовем Dep.dll.

Сначала я просто добавил ссылку на Dep.dll в Test.dll и установил Copy Local = 'False'. Затем я установил привязку сборки в файле конфигурации приложения VB6:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
        <assemblyIdentity name="Dep Name"
                          publicKeyToken="xxxxxxxxxxx"
                          culture="neutral" />
        <codeBase version="1.0.0.2"
                  href="file:\\dir_name\dep.dll"/>
    <bindingRedirect oldVersion="1.0.0.0" newVersion="1.0.0.2"/>
      </dependentAssembly>
    </assemblyBinding>
</runtime>

Но я слышал, что мог создать файл app.config для Test.dll и иметь вышеупомянутую запись вместо файла конфигурации приложения для VB6.exe.

По какой-то причине я не мог получить ссылку для работы таким образом. Вот сообщение об ошибке:

Не удалось загрузить файл или сборку 'Dep.dll, версия =1.0.0.2, культура = нейтральная,PublicKeyToken=xxxxxxxxxxx' или одна из ее зависимостей. Система не может найти указанный файл.

Я изменил свойство Build Action на файл app.config на "Content", а свойство "Copy Output" на "Copy Always". Я также ничего не делал с исходной ссылкой на Dep.dll в файле проекта Test.dll. Я удалил запись привязки сборки для Dep.dll из файла app.config файла VB6.exe.

У нас есть один рабочий пример библиотеки DLL, использующей файл app.config, однако он не связывает сборки, а просто имеет набор настроек приложения.

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

1 ответ

Концепция сборок является чуждой VB6, и библиотеки DLL VB6 совершенно не похожи на библиотеки.Net DLL (VB6 компилируется в собственный код, .Net компилируется в IDL). Кроме того, EXE-файл VB6 не использует app.config для чтения информации о конфигурации (если только вы не "свернули свою собственную" программу чтения XML). Он использует файлы.ini или реестр.

Теперь вы не указали, к какому типу относятся DLL Test.Dll и Dep.Dll, и без этой информации любой ответ требует догадок. Однако, если вы пытаетесь найти информацию о сборке для DLL в файле app.config с помощью VB6, это не сработает. DLL-библиотеки VB6 понятия не имеют, что такое привязка сборки.

Ваш VB6 EXE использует архитектуру COM для доступа к функциональности DLL. Если вы хотите представить архитектуру.Net для VB6, вы используете сервисы.Net Interop. [Эта статья]) http://support.microsoft.com/kb/817248) объясняет, как вызывать сборки.Net из VB6. Если вы хотите использовать материал app.config, то создайте класс.Net, который предоставляет интерфейс через Interop и имеет методы, которые получают информацию о конфигурации из app.config. Затем VB6 exe может вызвать эти методы. Эта статья выглядит как довольно хорошее резюме того, как это сделать.

Другие вопросы по тегам