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'时,第一次我会得到'assembly as _rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' a
nd以及'type'为{Name = "_rounded_tree" FullName = "_rounded_tree"}'的值。但是,如果在保存后重新启动应用程序,我不能获取'assembly'的值,会出现异常'无法加载文件或程序集'_rounded_treeGOLD、版本=0.0.0.0、文化=中性、公钥令牌=null'或其某个依赖项。系统找不到指定的文件。":"_rounded_treeGOLD、版本=0.0.0.0、文化=中性、公钥令牌=null',并且返回类型变为空,这不应该发生。
对于基类“leaf”,没有问题,我将获得xmlSerializableType.Name作为“Root.Systemmodel.leaf”,并且'type'变为{Name = "leaf" FullName = "Root.Systemmodel.leaf"},程序集将是Root.Systemmodel、版本=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);
更新
可能我的汇编正在创建用户定义的类,但没有保存,这可能是我第一次没有遇到任何问题的原因,一旦我关闭应用程序,我将失去它,请查看我的代码。
// Define assembly that can be executed but not saved
this.UserClassAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess.Run
);
更新
这里我的数据库是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>
。第一次没有问题,但如果我重新启动应用程序,我会收到异常。