防止.NET在COM调用期间重用汇编

时间:2016-05-08 17:23:26

标签: c# .net com .net-assembly

我正在创建一个带有COM接口的.NET程序集。理想情况下,我希望将注册表项与程序集分开,因此执行发布只需要在共享驱动器上删除.dll(而不是每次都需要推出MSI)

我创建了从主类继承的不同类,以便为每个环境获取不同的GUID。

然而,当我测试这个时,加载的第一个版本(例如开发)最终会为其他环境(例如测试)提供服务。这通常不是问题,但是在使用时,这个组件是从全天运行的GUI可执行文件中调用的。可以想象,人们可能在一天中运行不同的环境。

每个接口都在注册表中设置了一个独立的代码库(无GAC),并且进程监视器显示两个程序集都已加载但只使用了第一个程序集。我认为这是因为.NET看到相同的类/程序集名称并重用第一个加载的名称。

在这种情况下如何隔离组件?

1 个答案:

答案 0 :(得分:-1)

您可以对程序集进行强名称(Visual Studio中项目属性中的“签名”选项卡,不要与Authenticode签名混淆)并更改不同版本/环境的版本号,公钥或两者。这样CLR程序集加载器会将它们视为不同,并且不会绑定到已在给定上下文中加载的那个。