2014-11-12 5 views
0

Я пытаюсь построить динамический тип и установить его размер, например [StructLayout(LayoutKind.Sequential, Size=100)]. У меня есть следующий код:TypeBuilder тип набора размер

Type structLayoutAttr = typeof(StructLayoutAttribute); 
ConstructorInfo structLayoutAttrCtor = structLayoutAttr.GetConstructor(new[]{typeof(LayoutKind)}); 
object[] structLayoutAttrCtorArgs = new object[]{LayoutKind.Explicit}; 
FieldInfo[] structLayoutAttrSizeField = new FieldInfo[]{structLayoutAttr.GetField("Size")}; 
CustomAttributeBuilder cb = new CustomAttributeBuilder(structLayoutAttrCtor, structLayoutAttrCtorArgs, structLayoutAttrSizeField, new object[]{size}); 
tb.SetCustomAttribute(cb); 
type = tb.CreateType(); 

Однако этот код не на последний шаг - CreateType бросков TypeLoadException о плохом формате. Есть ли способ применить атрибут?

ответ

1

Атрибут StructLayout - это особый атрибут, который обрабатывается компилятором и скомпилирован в специальные метаданные, поэтому вы не можете применять его при создании пользовательских атрибутов. Проверьте DefineType overload, есть тот, который принимает размер типа.