.net - NET 4.0 在 COM+ 中安装程序集加载额外的依赖项

标签 .net .net-4.0 com+

我们有一个程序集,我称之为 COMPlusAssembly,它引用了第三方 dll。 COMPlusAssembly 托管在 COM+ 中,并使用 System.Enterprises.RegistrationHelper 安装。我们的客户可能会也可能不会安装 COMPLusAssembly 中引用的第三方软件。在 .NET 3.5 中,当使用 RegistrationHelper 安装 COMPlusAssembly 时,它甚至从未尝试加载第三方 dll。现在我们已经升级到 .NET 4.0,它正在加载程序集并在注册期间抛出 FileLoadException 无法加载文件或程序集或其依赖项错误之一。 .NET 4.0 中是否发生了某些更改,导致它加载在 .NET 3.5 中未加载的其他依赖项。我们的第三方程序集是 .NET 2.0 程序集。有没有办法告诉框架不要加载依赖项?

谢谢!

-塔米

最佳答案

我还没有真正的确切答案(尽管它可能会演变),但我有一些建议。

据我所知,在 JITter 需要依赖项之前,不会加载依赖项(仍然是在 .Net 4.0 中)。也许不知何故,以前延迟的代码路径现在急切地进行了 JIT,因此尝试加载依赖项。

处理此问题的最佳方法可能是在 JITted 需要依赖项的代码路径之前使用 AppDomain.Load 手动接管依赖项的加载和解析。然后您可以确定加载是否成功,如果没有,则明确决定不执行现在不可用的代码。

此外,由于您使用的是 .Net 4.0,您还可以考虑使用一种不同的方式来满足依赖关系,即使用位于 System.ComponentModel.Composition 中的名为 MEF 的类型解析框架。使用 MEF,您可以轻松地加载和发现类型,然后自动将这些类型组合到您的依赖类型中。在这种情况下,运行发现后,您会发现依赖性不满足(可能属性值仍为 null),然后您可以采取适当的措施。

关于.net - NET 4.0 在 COM+ 中安装程序集加载额外的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629918/

相关文章:

c# - 单独组装和路由中的 Controller

c# - 在 VS 2010 中为测试项目设置 useLegacyV2RuntimeActivationPolicy

c# - ServicedComponent 未在终结器中处理

c++ - ATL COM+ 使用接口(interface)作为参数

c# - 从 ToolStripMenuItem 打开 ContextMenu

c# - DataGridView:复制完整到剪贴板

c# - 如何让AutoFixture从多个TypeRelay中随机选择?

c# - 需要时髦的 LINQ(第 2 部分)

linq - 在匿名类型上编写 Group By

wpf - 托管 WPF 和 native 代码互操作。 WPF 托管在 ServicedComponent 中