2014-12-01 54 views
1

我在Visual Studio 2010 Express中编写了VB.NET类库。我确保在Properties - > Application - > Assembly Information选项卡上选择“Make assembly COM-Visible”。我还确保在属性窗口的编译选项卡上选择“Register for COM Interop”。无法在原始编译机器以外的机器上部署.Net DLL

生成的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中的可用引用?

非常感谢您花时间回复。

+2

您可能不应该使用64位版本的Regasm.exe,大多数Office安装都是32位。使用框架,而不是Framework64。 – 2014-12-01 22:00:32

+0

我强烈建议使用installshield limited或其他类似产品来创建安装程序,而不是批处理文件路径。这样的生活很简单。 – RubberDuck 2014-12-01 22:05:01

+0

@HansPassant使用32位版本的Regasm导致DLL出现在VBA引用列表中;然而,现在当我在部署机器上运行VBA代码时,我收到错误“ActiveX组件无法创建对象”。这个宏在开发机器上工作。 – NickVise 2014-12-02 14:21:40

回答

0

我能够在当今的其他机器上使用DLL。我最初犯了一些错误,导致DLL失败。我的问题的起源是由注册DLL使用64位版本RegAsm而不是32位版本引起的。下面列出的操作顺序是最终得到这个结果的顺序。

  • 在VBA
  • 取下所有的旧DRAPERLibrary参考使用RegAsm与/ u参数完全注销该DLL
  • 使用RegAsm的32位版本注册新的DLL,因为我有一个32位版本的工作的Excel(\ Microsoft.NET \框架\代替\ Microsoft.NET \ Framework64)
  • 在VBA
  • 更新模块代码选择参考新DRAPERLibrary以反映最新的DLL版本号

感谢@HansPassant帮助我解决了这一切。

相关问题