将 DLL(C#、Entity Framewok、.Net 4.8)与 VB6 应用程序一起使用 - 无法注册、无法调试

问题描述 投票:0回答:1

我们有这个配置:

  1. 主应用程序 [VB6]
  2. DLL [C#、.Net Framework 4.8、实体框架]
  3. 测试应用程序 [C#、.Net Framework 4.8]

应从 mainApp 应用程序调用 DLL 来执行此操作:

  1. 从数据库[EF]读取一些信息
  2. 将信息发送到 api 并获取响应代码
  3. 更新代码到数据库[EF]

我读了thisthis,他们建议复制.config文件

  1. as VB6.exe.config(在我的 vb6 文件夹中 - 用于调试)
  2. 作为 mainApp.exe.config(从 .exe 使用)

问题1:我无法测试它,因为我无法从VB6 IDE引用我的dll。

我尝试从 VB6 添加对我的 dll 的引用,但失败了。 尝试 regsrv32.exe 我的 dll,但出现以下错误:

模块“mydll.dll”已加载,但未找到入口点 DllRegisterServer。确保“mydll.dll”是有效的 DLL 或 OCX 文件,然后重试。'

问题2:现在我已经正确创建了DLL并注册了它,我正在尝试调试maniApp和DLL,我在DLL中有断点,但从未被击中。

我该怎么办?

c# .net dll vb6
1个回答
1
投票

在@GSerg 的帮助下,我找到了正确的方向,我成功找到了适合我的案例的解决方案。我的目标是能够使用 DLL 并同时调试两个项目。

这些是遵循的步骤

  1. 为类的属性和方法创建接口。
  2. 为每个类分配一个 GUID - 这是为了帮助 VB 正确“读取”DLL
  3. 在项目属性>构建
    中启用
    Register for COM interop
  4. 复选框
  5. 在项目属性>应用程序>程序集信息...中启用
    Make assembly COM-Visible
  6. 使用强名称对程序集进行签名(在 Visual Studio> Developer PowerShell Run
    sn -k "path-to-key\myKey123.snk"
    中)
  7. 使用 regasm 注册 DLL(在具有管理权限的 CMD 中运行
    regasm "full-path-to-my-dll\\mydll.dll" /tlb:"full-path-to-my-tlb\\mydll.tlb"
  8. 使用 gacutil 将 DLL 注册到 GAC(在 Visual Studio> Developer PowerShell Run
    gacutil /i "path-to-mydll-debug-folder\mydll.dll"
  9. 在项目属性 > 调试 > 启动操作中选择
    Start External Program
    并浏览到 VB6.exe 的位置。
  10. 将 TestApp 中的 App.config 文件(需要包含连接字符串)复制到我的 VB6.exe 文件夹中,并将其重命名为 VB6.exe.config

每次在 C# 类库项目中进行更改时都要再次挖掘步骤 6 和 7

更新: 所有引用的项目必须更改为 x86(项目属性 > 构建 > 平台目标)并使用强名称进行签名(项目属性 > 签名 > 签署程序集复选框并选择或创建强名称密钥文件)

资源:

将军对类似问题的回答

将 .NET 组件暴露给 COM

通过CSharp或VB.Net为VBA创建DLL

如何:使用强名称签署程序集

签署程序集 - 基础知识

GAC-全局程序集缓存

© www.soinside.com 2019 - 2024. All rights reserved.