无法在原始编译机以外的机器上部署.Net DLL

时间:2014-12-01 21:28:02

标签: .net excel visual-studio vba dll

我在Visual Studio 2010 Express中编写了一个VB.NET类库。我确保在Properties - > Application - > Assembly Information选项卡上选择“Make assembly COM-Visible”。我还确保在属性窗口的编译选项卡上选择“注册COM Interop”。

生成的DLL在编译项目的计算机上正常工作。 DLL旨在对来自Excel的几个输入数组进行一些繁重的处理,并返回一个输出数组。我能够在VBA中添加对DLL的引用,并使用该功能就好了。

我无法弄清楚如何在其他计算机上安装DLL。我确保将.NET更新到部署机器上的当前版本。然后我运行以下批处理文件:

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe“C:\ Users \ Public \ DRAPERLibrary.dll”/ codebase /tlb:DRAPERLibrary.tlb

这次对RegAsm的调用回来时没有错误。

我可以看到Windows注册表对此DLL有一些新的引用,但我无法在Excel中看到DLL。如果我手动浏览到DLL,它会返回错误“无法添加对指定文件的引用”。

我在哪里错了? Visual Studio用于创建Excel引用的内容是什么?我可以添加到批处理文件中以使Excel将此DLL识别为VBA中的可用引用吗?

非常感谢您抽出宝贵时间作出回应。

1 个答案:

答案 0 :(得分:0)

我今天能够在其他机器上运行DLL。我最初犯了一些错误导致DLL失败。我的问题的根源是使用64位版本的RegAsm而不是32位版本注册DLL引起的。下面列出的操作顺序是最终解决的问题。

  • 删除VBA中的所有旧DRAPERLibrary引用
  • 使用RegAsm使用/ u参数
  • 完全取消注册DLL
  • 使用32位版本的RegAsm注册新的DLL,因为我正在使用32位版本的Excel(\ Microsoft.NET \ Framework \而不是\ Microsoft.NET \ Framework64)
  • 在VBA中选择对新DRAPERLibrary的引用
  • 更新模块代码以反映最新的DLL版本号

感谢@HansPassant帮助我解决所有问题。