我有一项服务,该服务涉及从云存储中下载一个程序集,使用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的,因为程序集未加载到正常的负载上下文中。