运行com暴露程序集的奇怪错误

时间:2010-03-16 21:14:20

标签: .net com assemblies reference types

将com暴露的程序集部署到客户端时遇到以下问题。 COM组件应该由vb6应用程序完成。这是它的完成方式

1)我有一个c#项目,其中有一个类暴露给COM的几个方法

2)项目引用了多个程序集

3)我编译项目,生成一个包含程序集和所有引用的dll的文件夹(名为dllcom)

4)我在文件夹中包含了一个.bat,它执行以下操作:

regasm /u c:\dllcom\LibInsertador.dll
del LibInsertador.tlb
regasm c:\dllcom\LibInsertador.dll /tlb:c:\dllcom\LibInsertador.tlb /codebase c:\dllcom\
pause

5)在我实验室的许多工作站本地运行蝙蝠之后,我能够毫无问题地从我的vb6应用程序中使用生成的tlb。我甚至只能通过运行这个bat来更新dll,而无需重新编译vb6应用程序。我的意思是我没有vb6 fiding和调用暴露的com对象的问题。

问题

6)我将SAME FOLDER发送给我的客户

7)他们在本地执行.bat,没有任何错误

8)他们执行vb6应用程序,vb6找到主程序集,.net代码似乎正确运行(它甚至能够生成日志文件),直到它必须实例化它的第一个引用程序集。然后,他们得到以下例外:

“无法从程序集'GYF_Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加载类型'GYF.Common.TypeBuilder'。”

其中“GYF.Common”是LibInsertador引用的程序集,TypeBuilder是GYF.Common中包含的类。 GYF.Common不是已签名的程序集,它不在GAC中,只与Libinsertador位于同一文件夹中。根据.net反射器,版本是正确的。

¿关于可能发生的事情的任何想法?

1 个答案:

答案 0 :(得分:0)

这仅适用于您的机器。对于任何依赖项,CLR没有理由查看带有COM可见DLL的目录。它将探测EXE文件夹和GAC以查找它们。

不确定此事故是如何在您的计算机上发生的,请使用Fuslogvw.exe查看程序集解析。也许您的测试程序与COM程序集位于同一文件夹中?执行此操作的正确方法是将程序集部署到GAC(无/代码库)。重要的是要避免被DLL地狱问题活着吃掉,这个问题总是潜伏在COM附近。