合并两个.dll以进行 MS 访问



我在Visual Studio中使用类库创建了一个项目,并使用C#编写,并使用itextsharp库。

该项目有两个dll:project.dll和itextsharp.dll

我希望能够在其他用户的笔记本电脑中使用此项目,以便他们可以在MS Access VBA中使用它。

我已经在一个简单的项目上进行了测试运行。我创建了一个类库,并将.dll文件复制到其他用户的电脑上。 然后我使用"regasm testFile.dll/tlb:testFile.tlb/codebase"注册了它。 然后我能够在VBA Access编辑器中打开引用testFile.tlb文件的MS Access。

但是现在我有一个包含 itextsharp 的项目,我不确定该怎么做。 我尝试像上面一样使用 regasm,它确实创建了一个 .tlb 文件,但它没有注册它的 dll。

我还尝试在项目上使用 ilmerge.dll 和 itextsharp.dll但这并没有产生一个强名称,尽管两个 dll 都有一个强名称,如果我理解正确,它需要一个强名称才能工作。

我试图使用 sn为合并的 dll 提供一个强名称.exe但是当我尝试使用"sn -v mergeFile.dll检查它是否确实具有强名称时,它返回了"mergeFile.dll不代表强名称程序集">

有没有办法将这些.dll合并到一个中,或者有没有办法将 itextsharp 库插入到项目中.dll?

我能够弄清楚如何在VBA中使用iTextSharp而不合并DLL。

若要在 Access VBA 中使用 C#代码,您需要能够添加 C# DLL 作为对 Access VBA 编辑器的引用。 在DataCam中完成此操作时,我们需要使用一个名为ed iTextSharp的第三方库.dll当您想在VBA中使用它时,这可能会使事情变得棘手。

执行以下操作:

在视觉工作室中

  • 创建 C# 项目时,选择"类库"模板
  • 下载 iTextSharp DLL 并将其添加到您的项目中
  • 编写 C# 代码
  • 转到"项目"选项卡
    • 选择项目的属性
    • 选择"应用程序"选项卡
    • 选择程序集信息
    • 勾选"使程序集COM可见">
    • 选择"生成"选项卡
    • 勾选"注册 COM 互操作">
    • 选择"签名"选项卡
    • 勾选"签署程序集">
    • 选择强名称密钥文件
    • 使用现有密钥文件或创建一个新密钥文件
  • 完成此操作后,选择屏幕顶部的"构建"
    • 这将创建您需要在 VBA 中使用的 DLL、TLB 和 PDB 文件,这些文件可以在项目的垃圾箱、调试文件夹中找到

注册文件

  • 将项目的 DLL、TLB 和 PDB 文件复制到计算机的 SysWOW64 文件夹
  • 同时将iTextSharp的DLL和TLB文件从同一文件夹复制到SysWOW64
  • 以管理员身份打开命令提示符
    • 使用命令 Regasm 注册项目的 DLL 文件.exe
    • 示例 1:
    • Regasm.exe project.dll/tlb:project.tlb/codebase
    • 示例 2:
    • C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe C:\Windows\SysWOW64\projectName.dll/tlb:projectName.tlb/codebase

在访问 VBA 中

  • 到了VBA编辑器
  • 选择工具,然后选择参考
  • 选择项目的 TLB 和 iTextSharp 的 DLL 文件
  • 您现在可以在 VBA 中使用 C# 代码

注1:

我编写的 C# 方法可以在 VBA 中使用,但我必须排除括号

例如。

methodName("Hello, World"( - 在 VBA 中不起作用

方法名称"你好,世界" - 在 VBA 中工作

注2:

如果更新了项目并希望将其添加为 VBA,请确保注销旧 DLL。

为此,请使用 Regasm.exe 项目.dll/u