世界杯积分榜_世界杯几年一届 - fjmzsy.com

.NET 注册 COM 组件

9278

生成密钥文件提前准备好一个密钥文件,因为将注册为 COM 组件时要求提供签名。打开 Visual Studio 命令行工具,执行:

1sn -k xxx.snk

得到文件后放到工程目录下即可。

.NET Framework 工程设置传统风格的工程文件和新的 SDK style 稍微有些区别,所以分开说。

传统风格工程默认 COM 可见性打开工程设置窗口,点击程序集设置

这里不建议勾选,因为 .NET 默认会将程序集中所有访问权限为public的类都对外公开,这当然是不合适的。所以这里默认没有勾选,实际上,这里的选项会影响AssemblyInfo.cs文件中ComVisible属性值。

为 COM 互操作注册选项决定在编译后是否自动注册 DLL,根据自身需要设置。对应的工程属性为:

1true

设置签名文件

对应的工程属性为:

12truexxx.snk

然后编写一个测试接口和其实现即可,注意要在实现类上设置[ComVisible(true)]。

1234567891011121314151617181920using System.Runtime.InteropServices;namespace ClassLibrary2{ public interface ICalc { int Add(int a, int b); } [ComVisible(true)] [Guid("365BBAE2-A911-4078-952A-9B5734538C35")] [ClassInterface(ClassInterfaceType.None)] public sealed class Calc : ICalc { public int Add(int a, int b) { return a + b; } }}

手动注册 COM 组件如果设置了RegisterForComInterop属性的话会在编译后自动注册,否则就需要手动注册。而用 .NET Framework 开发的 COM 组件不能用传统的regsvr32去注册,要用运行时自带的RegAsm.exe工具注册:

1%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe ClassLibrary2.dll /tlb:ClassLibrary2.tlb /codebase

注意我这里用的是 x64 架构注册,注册 COM 组件时要确认架构一致性。卸载的话使用/u选项:

1%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe ClassLibrary2.dll /u

我们可以用 RegDllView 软件查看系统 COM 注册情况。

测试接口COM 组件的好处是语言无关性,我们可以编写一个 VBScript 脚本测试接口:

12345Dim objSet obj = CreateObject("ClassLibrary2.Calc")Dim resultresult = obj.Add(5, 3)MsgBox "The result is: " & result

结果正确

NET.Sdk 风格工程.NET Sdk 风格的工程文件因为没有界面,所以需要手动编辑

123456789 ... true xxx.snk true AnyCPU;x64

因为 .NET Sdk 风格工程没有AssemblyInfo.cs文件设置程序集属性,这导致项目默认会将所有public的类都公开。这就需要我们手动将程序集属性ComVisible设置为false。

12345678910 ... <_Parameter1>false

不同于传统风格工程文件是将属性写在代码中,Sdk 风格将属性配置在工程文件中。

.NET 工程设置对于新的 .NET 框架,使用EnableComHosting属性决定是否生成 COM Host(一个用于注册的本机 DLL 文件)。

12345678910111213 Library net8 disable enable 12 true xxx.snk true AnyCPU;x64

当EnableComHosting属性为true时,编译后会多出一个[ProjectName].comhost.dll文件。

这不是 .NET 程序集,而是一个本机的 DLL 文件。

而这个 DLL 文件导出了注册 COM 需要的几个标准方法,用 C++ 开发过 COM 组件的一定都明白了。

可以看出 .NET 不同于 .NET Framework 框架的处理方式。所以这里不再需要用RegAsm.exe去注册了,直接原生注册即可。

1regsvr32 ClassLibrary2.comhost.dll

卸载:

1regsvr32 /u ClassLibrary2.comhost.dll

相关阅读向 COM 公开 .NET Core 组件在项目文件中设置程序集属性

南通长牌的最佳玩法
*事时阴道完全不出水是怎么回事?