1

我对使用类库很陌生,希望有人能告诉我我是否遗漏了什么,或者我正在尝试做的事情是否值得:

我有一个从 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 的应用程序配置文件中包含上述条目。

出于某种原因,我无法获得以这种方式工作的参考。这是错误消息:

无法加载文件或程序集 'Dep.dll, Version=1.0.0.2,Culture=neutral,PublicKeyToken=xxxxxxxxxxx' 或其依赖项之一。该系统找不到指定的文件。

我将 App.config 文件的 Build Action 属性更改为“Content”,将“Copy Output”属性更改为“Copy Always”。我也没有对 Test.dll 的项目文件中对 Dep.dll 的原始引用做任何事情。我从 VB6.exe 的 app.config 文件中删除了 Dep.dll 的程序集绑定条目。

我们这里有一个使用 app.config 文件的 dll 工作示例,但是它不绑定程序集,只有一堆应用程序设置。

我正在做的研究表明,也许我正在做的事情是不可能的,甚至是最佳实践,但现在我只想知道我正在尝试的事情是否可行。如果是这样,我错过了什么?

4

1 回答 1

0

程序集的概念对于 VB6 来说是陌生的,而 VB6 DLL 与 .Net DLL 完全不同(VB6 编译为本机代码,.Net 编译为 IDL)。此外,VB6 EXE 不使用 app.config 来读取配置信息(除非您“滚动自己的”xml 阅读器)。它使用 .ini 文件或注册表。

现在,您还没有指定 Test.Dll 和 Dep.Dll 是哪种类型的 DLL,如果没有这些信息,任何答案都会涉及一些猜测。但是,如果您尝试使用 VB6 在 app.config 文件中查找有关 DLL 的程序集信息,它将无法正常工作。VB6 DLL 不知道什么是程序集绑定。

您的 VB6 EXE 使用 COM 架构来访问 DLL 功能。如果您想向 VB6 公开 .Net 体系结构,请使用 .Net Interop 服务。[本文])http://support.microsoft.com/kb/817248)解释了如何从 VB6 调用 .Net 程序集。如果你想使用 app.config 的东西,那么创建一个 .Net 类,通过 Interop 公开其接口,并具有从 app.config 获取配置信息的方法。然后 VB6 exe 可以调用这些方法。 这篇文章看起来是如何做到这一点的一个很好的总结。

于 2014-07-13T05:27:17.997 回答