Генерация кода CodeDom, TypeAttribute ExplicitLayout не генерирует пользовательский атрибут?
Я использую CodeDom для создания структуры, я пытаюсь указать явное расположение полей с помощью пользовательского атрибута. Мне удалось сделать это с помощью обычного CodeAttributeDeclaration
экземпляра, но затем я заметил, что перечисление System.Reflection.TypeAttributes содержит поле с именем ExplicitLayout, которое должно быть тем, что я ищу. Я использовал это так:
CodeTypeDeclaration type = new CodeTypeDeclaration();
type.Name = "MyStructure";
type.IsStruct = true;
type.TypeAttributes = TypeAttributes.Public | TypeAttributes.ExplicitLayout;
Однако это не генерирует StructLayout
атрибут мне нужен, зачем?
1 ответ
Решение
System.TypesAttributes.ExplicitLayout
не генерирует автоматически StructLayoutAttribute
поэтому мне пришлось объявить это "вручную":
type.CustomAttributes.Add(new CodeAttributeDeclaration("StructLayout",
new CodeAttributeArgument(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(LayoutKind)), "Explicit"))));