注册一个引用多个dll的dll

时间:2012-11-29 19:29:18

标签: c# com reference regasm

好的,我有2个问题,我在这里泡了一个星期。

重要 - 没有应用程序会构建它或运行它。它将是一个单独的客户端dll(引用其他几个dll)将被放置在特定的文件夹中,我需要使用regasm或其他东西来注册这个dll。

概述

所以我写了一个c#COM ScannerController.dll。 ScannerController引用了五个第三方dll,它们已经安装并在c:\ Program Features \ etc ....中的文件夹中注册(位置将根据它们所在软件的版本而改变,但是dll将是相同。)

这个dll(integration.ActiveX(它是一个程序集))有一个名为InstalledPath的方法。 InstalledPath返回正在执行的程序集的实际位置。当我完成dll时,我通过IExplorer运行它并返回正确的“../program features / ....”。

然后,为了在另一台计算机上设置它,我取消注册它,然后运行一些regasms并在“Scanner / bin / debug / integration.ActiveX”中注册了dll(该oleview说它无法找到它的依赖项)所以我取消注册它,在vs2012中构建它,现在当我从IExplorer运行它时,InstalledPath是“../bin/debug/”。我创建了一个新的项目,构建它自动注册它,并从iexplorer运行它,InstalledPath是“..Scanner-fake / bin / debug /”。我已经在cmd中取消注册了一百万次,无论我做什么,它现在总是指向已注册的ScannerController的调试文件夹。

问题1:

我在世界上如何使用regasm等注册我的COM ScannerController.dll,并将其指向ScannerController引用的五个第三方dll?

问题2:

我尝试将它修复到我的计算机上本地路径中不存在Integration.dll的地方(因为我正在构建它)所以我将本地副本设置为false。当我构建它时,在oleview中查看它,它表示无法加载或找到它的依赖项。如何设置项目,以便使用copy local = false,引用可以找到其他第三方dll?

对于冗长的问题感到抱歉,但非常感谢您阅读并试图帮助我。我为此寻找过高和低,我现在只是精神疲惫。

1 个答案:

答案 0 :(得分:0)

1)ScannerController.dll

使用regasm ScannerController.dll

进行COM注册

2)第三方ActiveX dll

假设已经注册:无需采取任何措施。 (否则注册regsvr32

3)第三方托管库(无com类型/ libsexposed)

使用以下2个选项之一来保证您的ScannerController Libraray可以访问这些托管库:

  • 将它们复制到您的ScannerController.dll文件夹或者(我不是100%确定,您必须测试它)到ScannerController.dll主机 - exe /调用ScannerController.dll的进程所在的文件夹中
  • global assembly cache(托管库的注册表吊坠)中注册这些库,使其可以全局用于其他应用程序