在我的实验中,我保存了一些发射类型的对象,这些对象在入口程序集中包含一个类型,如下所示:
///normal assembly
public class Person{ public string Name; public int Age;}
///dynamic assembly "dynAsm"
public class Dude: Person{}
Peron tom = (Person)Activator.CreateInstance(dudeType);
tom.Name = "Tom";
tom.Age = 100;
db.Store(tom);
它已成功存储到db文件中。 Cuz我已经使用ObjectManager检查了文件,并看到tom对象实际上在那里。
但是当我使用IObjectContainer和IQuery的查询方法来编程检索保存的对象时,我得不到任何回报。
我试过了:
db.Query(dudeType); //dudeType is from a dynamic assembly with the same name as
//the one used to generate "tom"
//nothing
db.Query(typeof(Person));
//nothing
db.Query(typeof(object));
//still nothing
以同样的方式使用IQuery对象,我也得不到任何东西。
所以,有人请告诉我:为什么我不能这样做?为什么即使基类方法也不起作用?
PS:当我将动态程序集保存到文件中,加载它并再次尝试查询时,一切正常。但是如你所知,CLR不允许卸载程序集,因此保存加载的东西不是我想要的东西