У меня есть такой код
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" и пользовательский класс с именем "roundndedtree", когда 'xmlSerializableType.Name
' становится пользовательским классом '_olved_tree', впервые яполучаю значение для 'ассемблера as _rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' a
и т. д. для' type
как {Name = "_olved_tree" FullName = "_tained_tree"} '.Но после сохранения, если я перезапускаю свое приложение, я не могу загрузить значение для «сборки», получая исключение » Не удалось загрузить файл или сборку« _ounded_treeGOLD, Версия = 0.0.0.0, Культура = Нейтральный, PublicKeyToken = null »или одна из его зависимостей,Системе не удается найти указанный файл. ":" _ Rounded_treeGOLD, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null 'и тип возвращаемого значения становится нулевым, этого не должно происходить
Для базового класса "leaf"без выдачи я получу xmlSerializableType.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);
ОБНОВЛЕНИЕ
вероятномоя сборка создается для пользовательского класса, но не сохраняется, это может быть причиной того, что я не сталкиваюсь с какой-либо проблемой в первый раз, когда я закрою приложение, я потеряю его, увидев мой код
// Define assembly that can be executed but not saved
this.UserClassAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess.Run);
howЧтобы преодолеть эту ситуацию
ОБНОВЛЕНИЕ Здесь моя база данных представляет собой 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>
Здесь в первый раз проблем нет, но если я перезапущумое заявление я получаю исключение