2010-11-18 1 views
8

Извините, если мне не хватает чего-то очевидного, но когда я создаю новый тип с Reflection.Emit, как указать, в каком пространстве имён должно быть указано?Как указать пространство имен для типа, созданного с помощью Reflection.Emit?

т.е. ..

AssemblyName assemblyName = new AssemblyName(); 
assemblyName.Name = "TestDynamic"; 

AssemblyBuilder assemblyBuilder = 
    AppDomain.CurrentDomain.DefineDynamicAssembly(
     assemblyName, 
     AssemblyBuilderAccess.Save); 

ModuleBuilder moduleBuilder =  
    AssemblyBuilder.DefineDynamicModule("TestDynamic", "TestDynamic.dll"); 

TypeBuilder myTestInterface = 
    moduleBuilder.DefineType("MyTestInterface", 
    TypeAttributes.Public | TypeAttributes.Interface, typeof(object)); 

Как дать пространство имен для ?

ответ

11

Определите, где вы определите тип:

moduleBuilder.DefineType("MyNamespace.MyTestInterface", 
       TypeAttributes.Public | TypeAttributes.Interface, 
       typeof(object)); 
+0

D'oh! Я знал, что это должно быть что-то очевидное. Спасибо друг. –

0

Просто поместите его перед "короткой" TypeName. "Namespace.Subnamespace.Type"

+0

Это просто неверно, типы идентифицируются для каждой области (сборка, модуль или другой тип, если тип вложен), пространство имен и имя. –

+0

Я забыл добавить сборку. Тем не менее, CLR ничего не знает об пространствах имен, насколько я знаю. – Botz3000

+0

ECMA-335 указывает, что типы идентифицируются по их имени в пределах своих соответствующих сборок. Их полное имя создается из метаданных типов, состоящих из пространства имен и имени, которые хранятся как два разных объекта. Это немного отличается от незнания. В случае SRE реализация просто разделит полное имя для вас на основе простого правила, указанного в ECMA 335 (разделение на последнюю точку). –

 Смежные вопросы

  • Нет связанных вопросов^_^