我有这样的代码
public static Type ToType(XmlSerializableType xmlSerializableType)
{
string func = "XmlSerialzationType.ToType";
Type type = null;
if (xmlSerializableType != null && xmlSerializableType.Name != string.Empty)
{
type = Type.GetType(xmlSerializableType.Name);
if (type == null)
{
// May be a user defined class
try
{
Assembly assembly = Assembly.Load(xmlSerializableType.AssemblyName);
type = assembly.GetType(xmlSerializableType.Name);
}
catch (Exception ex)
{
TestDebug.DebugTraceSevere(func, "Exception " + ex.ToString());
}
}
}
return type;
}
我有一个名为“leaf”的基类和一个名为“roundedtree”的用户定义类
什么时候 'xmlSerializableType.Name
'成为用户定义的类'_rounded_tree',我第一次获得'程序集的值as _rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' a
所以对于'type
作为{Name =“_rounded_tree”FullName =“_rounded_tree”}'。但是保存后,如果我重新启动应用程序,我无法加载“程序集”的值,出现异常“无法加载文件或程序集“_rounded_treeGOLD,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。":"_rounded_treeGOLD,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null' 并且返回类型变为 null 这不应该发生
对于基类“leaf”,没有问题,我将得到 xmlSerializedType.Name 作为“Root.Systemmodel.leaf”,并且“type”变为 {Name =“leaf”FullName =“Root.Systemmodel.leaf”} 程序集将是 Root.Systemmodel, Version =8.0.7.0,文化=中性,PublicKeyToken=83bd062a94e26d58
在这些情况下我该怎么办
这是一段将为用户定义的类生成程序集的代码
public Type CreateType()
{
string func = "ManagedClass.CreateType";
// Create instances of AssemblyBuilder and ModuleBuilder for the new Type
AppDomain myDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
// Create the assembly name by appending the machine name to the typename.
myAsmName.Name = this.TypeName + Environment.MachineName;
// Define assembly that can be executed but not saved
this.UserClassAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.Run);
// Create dynamic module with symbol information
this.UserClassModuleBuilder = this.UserClassAssemblyBuilder.DefineDynamicModule("userdefinedmodule", true);
UPDATE
可能我的程序集是为用户定义的类创建的,但没有保存,这可能是我第一次没有遇到任何问题的原因,一旦我关闭应用程序,我将失去看到我的代码的人
// Define assembly that can be executed but not saved
this.UserClassAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess.Run);
如何克服这种情况
UPDATE这里我的数据库是xml文件。当我检查基类叶子时,我可以看到该条目是<Name>Root.Systemmodel.WindowsSystem</Name><AssemblyName>Root.Systemmodel, Version=8.0.7.0, Culture=neutral, PublicKeyToken=83bd062a94e26d58</AssemblyName>
在这种情况下,如果重新启动我的应用程序没有问题,但对于用户定义的类“roundedtree”xml 条目是<Name>_rounded_tree</Name> <AssemblyName>_rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</AssemblyName>
第一次没有问题,但如果我重新启动我的应用程序,我会遇到异常