Почему я получаю версию сборки как 0.0.0.0? Не создаст ли это проблемы, если реальная DLL имеет некоторый номер версии и использует класс Type для получения значений? - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть проект с именем «Test.LiveModel» (Test.LiveModel.dll), и его версия 8.0.7.0 в моем решении, которое содержит 25 проектов.Я могу видеть информацию Test.LiveModel в AssemblyInfo.cs.У меня есть две категории объектов с именами «категория базового класса» и «категория пользовательского класса», которые отображаются в пользовательском интерфейсе моего приложения.Я показываю это через свойство, которое имеет класс Type

Теперь я рассматриваю один объект категории базового класса с именем «Сервер» и один определенный пользователем объект категории класса RoundedTree.Когда я устанавливаю значение «Сервер» в свойстве в Grid после сохранения, когда я перезапускаю свое приложение, я вижу сохраненное значение, но для «RoundedTree», которое не происходит из-за типа, становится пустым.Поэтому я сделал тщательный анализ и узнал, что проблема в ToType() методе, показанном ниже. Это ToType() мето

Для базового класса Server xmlSerializableType.Name я получаю как Test.LiveModel.Server иAssemblyName Я получаю как Test.LiveModel, Version=8.0.7.0, Culture=neutral, PublicKeyToken=23bd062a94e26d58 и type Я получаю, используя Type.GetType как type = {Name = "Server" FullName = "Test.LiveModel.Server"}

Но для определенного пользователем класса xmlSerializableType.Name Я получаю как _Rounded_Tree.'type' Я получаю как null, используя Type.GetType.AssemblyName Я получаю как _Rounded_TreeTest-Machine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null, но даже assembly.GetType Я получаю как ноль.В чем причина этого?Почему я получаю версию сборки 0.0.0.0?Я имею в виду полную сборку _Rounded_TreeTest-Machine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.

Это метод CreateType(), который создаст сборку и наберет myTypeBuilder для пользовательского класса:

 public Type CreateType()
  {

     // 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);

Так вот мой вопрос:если реальный Dll имеет некоторый номер версии, а пользовательская сборка класса имеет версию 0.0.0.0, является ли это причиной того, что я получаю тип как ноль после использования Type.GetType и assembly.GetType метода?

1 Ответ

1 голос
/ 25 ноября 2011

Вот несколько предложений, которые могут решить проблемы.

Определение версии сборки

new AssemblyName(this.TypeName + Environment.MachineName) 
{ 
    Version = new Version("1.0.0.0") 
};

Используйте полные имена для сериализации

myObject.GetType().FullName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...