Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将另一个.NET程序集中的ComVisible.NET库用作COM库。_C#_.net_Com - Fatal编程技术网

C# 如何将另一个.NET程序集中的ComVisible.NET库用作COM库。

C# 如何将另一个.NET程序集中的ComVisible.NET库用作COM库。,c#,.net,com,C#,.net,Com,我为.NET4.0创建了一个测试COM项目。然后我向regasm注册: RegAsm /codebase TestCom.dll /TLB 它在JavaScript中正常工作: var app = new ActiveXObject("TestCom.TestClass"); app.Message1("123"); 我想使用另一个C#项目中用于.NET3.5的TestCom.TestClass,但是当我尝试添加对该项目的引用时,我得到了一个关于更高框架版本的错误。“添加引用”对话框(CO

我为.NET4.0创建了一个测试COM项目。然后我向regasm注册:

RegAsm /codebase  TestCom.dll /TLB
它在JavaScript中正常工作:

var app = new ActiveXObject("TestCom.TestClass");
app.Message1("123");
我想使用另一个C#项目中用于.NET3.5的TestCom.TestClass,但是当我尝试添加对该项目的引用时,我得到了一个关于更高框架版本的错误。“添加引用”对话框(COM部分)仅显示对tlb文件的引用,而不是dll

这是应该的吗?当我尝试添加对tlb文件的引用时,出现错误:

“改为添加对.NET程序集的引用”


如何从.Net 3.5的另一个C#项目中创建TestCom.TestClass的实例?

IDE可以从您选择的类型库中判断COM服务器是在.Net中实现的。它只是拒绝让你添加它,这样做没有意义。当您改为添加对.NET程序集的引用时,它将同样有效,事实上效果更好

这并不是说你不能愚弄机器,你可以用dynamic关键字进行后期绑定。IDE没有办法干预这一点。但实际上,您并没有按照非托管客户机使用服务器的方式测试COM服务器。CLR将在运行时发现COM服务器实际上是一个.NET服务器,并在管道上设置快捷方式。换句话说,它不会为服务器创建RCW。而且服务器不会创建CCW,现在的工作方式与添加程序集引用时的工作方式完全相同

所以这样做真的毫无意义。只需添加程序集引用,就可以享受IntelliSense支持和静态类型检查带来的诸多好处。并以测试任何.NET库的方式测试COM服务器代码。您没有测试,而且根本无法测试的是COM互操作层。没关系,这从来都不是个问题。如果它是出于某种神秘的原因,那么就不可能对它采取任何措施,CLR中的COM互操作无论如何都是一个黑匣子


除了测试服务器代码之外,您还需要执行集成测试。只需确保实际的非托管客户机实际上可以使用服务器即可。确实如此,您已经知道它在Javascript中运行良好。

我无法从.Net3.5的项目中添加对.Net4.0的dll的引用。这是主要问题,不是主要问题。真正的问题是无论你做什么,服务器中的代码永远无法运行。它将无法加载,不管您如何调用它。您确实对.NET4.0有依赖性,您不能将其隐藏在地板垫下。您可以创建一个app.exe.config文件,强制使用.NET 4.0,即使exe的目标是3.5。但这在测试项目中是毫无意义的。好吧,是否有一种方法可以从project for 3.5中使用.NET 4.0库?运行它的系统同时拥有.NET 3.5和.NET 4.0。正如我所说,需要一个app.exe.config文件。
元素必须是“v4.0”。仍然不知道这和COM有什么关系。好的,我在配置文件omg中有它。我应该做什么来创建TestClass的实例?我能用C语言完成吗?就像用JavaScript一样简单???