Генерация кода 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"))));
Другие вопросы по тегам