阻止.NET在COM调用期间重用程序集



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

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

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

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

在这种情况下,如何隔离程序集?

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

最新更新