我很擅长与班级图书馆合作,希望有人能告诉我,如果我错过了什么,或者我想做的事情是否值得:
我有一个从VB6应用程序运行的DLL。我们称之为test.dll。 Test.dll使用另一个.dll,我们将调用Dep.dll。
首先,我刚刚在Test.dll中添加了对Dep.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>
但我听说我本可以为Test.dll创建一个app.config文件,并在那里有上述条目,而不是在VB6.exe的应用程序配置文件中。
出于某种原因,我无法通过这种方式获得参考。以下是错误消息:
无法加载文件或程序集&#39; Dep.dll,Version = 1.0.0.2,Culture = neutral,PublicKeyToken = xxxxxxxxxxx&#39;或其中一个依赖项。该系统找不到指定的文件。
我将Build Action属性更改为app.config文件到&#39; Content&#39;和复制输出属性为&#39;始终复制&#39;。我也没有对Test.dll项目文件中对Dep.dll的原始引用做任何事情。我从VB6.exe的app.config文件中删除了Dep.dll的程序集绑定条目。
我们在这里有一个使用app.config文件的dll工作示例,但它没有绑定程序集,只有一堆应用程序设置。
我正在进行的研究表明,我所做的事情可能是不可能的,甚至是最佳实践,但现在我只想知道我是否做了什么。尝试是可能的。如果是这样,我错过了什么?
答案 0 :(得分:0)
程序集的概念对VB6来说是陌生的,VB6 DLL与.Net DLL完全不同(VB6编译为本机代码,.Net编译为IDL)。另外,VB6 EXE不使用app.config来读取配置信息(除非你“自己动手”xml阅读器)。它使用.ini文件或注册表。
现在,您尚未指定哪种类型的DLL Test.Dll和Dep.Dll,如果没有此信息,任何答案都会涉及一些猜测。但是,如果您尝试使用VB6在app.config文件中查找有关DLL的程序集信息,则无法正常工作。 VB6 DLL不知道汇编绑定是什么。
您的VB6 EXE使用COM体系结构来访问DLL功能。如果要将.Net体系结构公开给VB6,可以使用.Net Interop服务。 [本文])http://support.microsoft.com/kb/817248)解释了如何从VB6调用.Net程序集。如果你想使用app.config的东西,那么创建一个通过Interop公开其接口的.Net类,并提供从app.config获取配置信息的方法。然后VB6 exe可以调用这些方法。 This article看起来像是如何做到这一点的非常好的总结。