【发布时间】:2011-11-11 09:49:02
【问题描述】:
我有这样的代码
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' and的价值,所以'type作为{Name =“_rounded_tree”FullName =“_rounded_tree”}'。但保存后,如果我重新启动我的应用程序,我将无法加载“程序集”的值,出现异常“无法加载文件或程序集“_rounded_treeGOLD,版本=0.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一.系统找不到指定的文件。":"_rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 并且返回类型变为 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>
第一次在这里没有问题,但是如果我重新启动我的应用程序,我会遇到异常
【问题讨论】:
标签: c# winforms visual-studio-2005