2010-11-18 16 views
8

Açık bir şey eksik olursam özür dilerim, ancak Reflection.Emit ile yeni bir yazı oluşturduğumda, hangi ad alanının olması gerektiğini nasıl belirleyebilirim? yaniReflection.Emit ile oluşturulan bir tür için ad alanı nasıl belirlenir?

..

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

nasıl için bir ad alanı veriyorsunuz?

cevap

11

tipini belirlemek nerede tanımlayın:

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

D'oh! Belli bir şey olması gerektiğini biliyordum. Teşekkürler dostum. –

0

Sadece "kısa" TypeName önce koydu. "Namespace.Subnamespace.Type"

+0

Bu doğru değil, kapsamları (derleme, modül veya iç içe geçmişse başka bir tür), ad alanı ve ad için tanımlanır. –

+0

Montajı eklemeyi unuttum. hala, CLR bildiğim kadarıyla ad alanları hakkında bir şey bilmiyor. – Botz3000

+0

ECMA-335, türlerin ilgili adları kapsamında tam adları ile tanımlandığını belirtir. Tam adları, isim alanı ve iki ayrı varlık olarak depolanan addan oluşan türlerin meta verilerinden oluşturulur. Hiçbir şey bilmemek oldukça farklı. SRE örneğinde, uygulama sadece sizin adınızı ECMA 335'te (son noktaya bölünmüş) düzenlenmiş basit kurala göre ayırır. –