为什么要解决已经加载在AppDomain中的汇编事件



我有一项服务,该服务涉及从云存储中下载一个程序集,使用Activator.CreateinStance创建IT的实例,然后在其上调用一种方法。

我已经设置了一种汇编方法,以下载依赖性效果很好,但是要测试/实验,我现在正在尝试手动下载汇编。我已经找到了需要哪些依赖项,下载它们,然后使用

加载它们
Assembly.Load(byte[])

之后,我可以看到它们通过

加载到AppDomain中
AppDomain.CurrentDomain.GetAssemblies())

但是,当我在引用此内容的汇编上调用该方法时,它仍然交给汇集。

我可能会误解加载的组件和AppDomain的工作原理,但在我看来,一旦加载程序集,它应该可以用于此组件,并且不需要解决它?

为什么不能"看到"它?版本和名称等是相同的。

我在这里阅读了不同的组装绑定上下文,我认为这可能是问题吗?它表明使用assembly.load(字符串)将加载到与assembly.load(字节)不同的上下文中?在哪种情况下,当我将组装在内存中作为字节[]?

时,我该怎么做。

谢谢

您需要直接从加载的组件中获取类型,因为它未加载到正确的上下文中。

var assembly = Assembly.Load(File.ReadAllBytes(some_path));
// This will work. Note that you don't need the assembly-qualified name,
// as you are asking the assembly directly for the type.
var type1 = assembly.GetType("My.Special.Type");
// This will not work - the assembly "My.Assembly" is not loaded into
// the Load context, so the type is not available.
var type2 = Type.GetType("My.Special.Type, My.Assembly");

在上面的代码中,type1将具有对类型的引用,但是type2将是null的,因为程序集未加载到正常的负载上下文中。

相关内容

  • 没有找到相关文章

最新更新