Использование привязки сборки в 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 может вызвать эти методы. Эта статья выглядит как довольно хорошее резюме того, как это сделать.