向 COM 公开 .NET Framework 组件


https://msdn.microsoft.com/zh-cn/library/c2850st8(v=vs.100).aspx
【为 COM 访问部署应用程序】
程序集可以是专用或共享的。 专用程序集仅可用于与该程序集位于同一目录结构的客户端;共享目录可用于任何本地 COM 应用程序。 所有程序集和类型库都必须在 Windows 注册表中注册,以便 COM 客户端透明地使用托管类型。
如果应用程序将要供专用,则可将其部署到应用程序目录和子目录中。
如果应用程序的程序集将要进行共享,则应将其安装在全局程序集缓存中。 所有共享程序集必须带有强名称(由发行者签名)。 当任何引用程序集中类型的 COM 应用程序遇到 Mscoree.dll 时,都会查找该程序集。
使用全局程序集缓存工具 (Gacutil.exe) 可向全局程序集缓存中添加程序集。

https://msdn.microsoft.com/zh-cn/library/tzat5yw6.aspx
【Regasm.exe(程序集注册工具)】
在注册表中创建一个 Codebase 项。Codebase 项指定未安装到全局程序集缓存中的程序集的文件路径。如果随后将安装要注册到全局程序集缓存中的程序集,则不应指定此选项。用 /codebase 选指定的 assemblyFile 参数必须是具有强名称的程序集。

https://msdn.microsoft.com/zh-cn/library/h627s4zy.aspx
【向 COM 注册程序集】
您可以运行一个叫做程序集注册工具 (Regasm.exe) 的命令行工具来注册或注销与 COM 一起使用的程序集。Regasm.exe 添加有关选件类的信息向系统注册表,以便 COM 客户端可以透明地使用 .NET framework 选件类。 RegistrationServices 类提供了等效的功能。
在 HKCR\CLSID\{0000…0000} 项下,默认值设置为类的 ProgID,并且会添加两个新的命名值:“类”值和“程序集”值。运行时将从注册表中读取“程序集”值,并将其传递给运行时程序集冲突解决程序。程序集冲突解决程序将根据程序集信息(如名称和版本号)尝试查找程序集。为便于程序集冲突解决程序查找程序集,程序集必须位于以下某一位置中:
·全局程序集缓存(必须是强名称的程序集)。
·在应用程序目录中。从应用程序路径加载的程序集只能通过该应用程序进行访问。
·沿使用 /codebase 选项指定的、指向 Regasm.exe 的文件路径。
Regasm.exe 还会在 HKCR\CLSID\{0000…0000} 项下创建 InProcServer32 项。该键的默认值设置为初始化公共语言运行时的 DLL 的名称 (Mscoree.dll)。
【检查注册表项】
COM 互操作提供了标准的类工厂实现来创建任何 .NET Framework 类的实例。客户端可以通过对托管 DLL 调用 DllGetClassObject 来获取类工厂并创建对象,就像处理其他任何 COM 组件一样。
为 InprocServer32 子级,对 Mscoree.dll 的引用将一个替代传统的 COM 类型库显示指示公共语言运行时将创建托管对象。

https://msdn.microsoft.com/zh-cn/library/s1sx4kfb.aspx
【如何:引用具有强名称的程序集】
当您向编译器表明程序集显式引用另一程序集时,发生编译时引用。使用编译时引用时,编译器会自动获取定为目标的强名称程序集的公钥,并将其放在正在编译的程序集的程序集引用中。
注意:具有强名称的程序集只能使用其他具有强名称的程序集的类型。否则会危及具有强名称的程序集的安全。

https://msdn.microsoft.com/zh-cn/library/xwb8f617.aspx
【创建和使用具有强名称的程序集】
具有强名称的程序集只能使用其他具有强名称的程序集的类型。否则,将会危害具有强名称的程序集的安全性。
注意:此方案不解决信任问题。除强名称外,程序集可携带完整的 Microsoft Authenticode 签名。Authenticode 签名包括建立信任的证书。请务必注意强名称不要求代码以这种方式进行签名。事实上,用于生成强名称签名的密钥不需要与用于生成 Authenticode 签名的密钥相同。

https://msdn.microsoft.com/zh-cn/library/wd40t7ad.aspx
【具有强名称的程序集】
警告:不要依赖于通过强名称实现安全性。它们仅提供唯一的标识。
【为何强命名程序集?】
在引用具有强名称的程序集时,你应该可以从中获得某些益处,例如版本控制和命名保护。强名称程序集可安装在需要启用一些方案的全局程序集缓存中。
强名称程序集在以下方案中有用:
·你希望启用强名称程序集将引用的程序集,或希望允许其他强名称程序集 friend 访问你的程序集。
·应用程序需要访问同一程序集的各种版本。这意味着你需要在同一应用程序域中并排加载某程序集的不同版本,且各版本互不冲突。例如,如果在具有相同简单名称的程序集中存在 API 的不同扩展,强命名将为该程序集的每个版本提供唯一标识。
·你不希望程序集的使用对应用程序性能产生负面影响,所以你想要非特定于域的程序集。这就要求进行强命名,因为非特定于域的程序集必须安装在全局程序集缓存中。
·如果你希望通过应用发布服务器策略来集中应用程序的服务,则意味着程序集必须安装在全局程序集缓存中。
如果你是开源开发人员且希望利用强命名程序集的标识优势,不妨签入与源代码管理系统内程序集相关联的私钥。

https://msdn.microsoft.com/zh-cn/library/hh415055.aspx
【改进的强命名】
常规强名称的限制
.NET Framework 4.5 之前版本使用的强命名技术具有以下缺点:
·由于密钥持续受到攻击,所以使用改进的技术和硬件可以更轻松地从公钥推断私钥。若要防止攻击,必须设置较大的密钥。.NET Framework 4.5之前的 NET Framework 版本可以用任意大小的密钥(默认大小是 1024 位)签名,但是,用新的密钥为程序集签名会破坏引用程序集早期标识的所有二进制文件。因此,如果要维护兼容性,则升级签名密钥的范围将极其困难。
·强名称签名仅支持 SHA-1 算法。最近发现 SHA-1 不适合安全哈希应用程序。因此,需要使用更强的算法(SHA-256 或更高)。SHA-1 可能丢失其 FIPS 站立,其将呈现选择仅使用 FIPS 兼容软件和算法的问题。
增强的强名称的优点
增强的强名称的主要优点是与预先存在的强名称的兼容性以及要求一个标识等效于另一个的能力:
·具有预先存在的已签名的程序集的开发人员可以将他们的标识迁移到 SHA-2 算法,同时能保留与引用旧标识的程序集的兼容性。
·创建新的程序集且不关心预先存在的强名称签名的开发人员可以使用更安全的 SHA-2 算法并以他们一贯的方式对程序集进行签名。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值