CodeDom 代码生成,TypeAttribute ExplicitLayout 不会生成自定义属性

本文关键字:自定义属性 ExplicitLayout 代码生成 TypeAttribute CodeDom | 更新日期: 2023-09-27 18:32:47

我正在使用CodeDom来生成结构,我正在尝试通过自定义属性指示字段的显式布局。我已经设法使用普通的CodeAttributeDeclaration实例来做到这一点,但后来我注意到枚举System.Reflection.TypeAttributes包含一个名为ExplicitLayout的字段,这应该是我正在寻找的。我是这样用的:

CodeTypeDeclaration type = new CodeTypeDeclaration();
type.Name = "MyStructure";
type.IsStruct = true;
type.TypeAttributes = TypeAttributes.Public | TypeAttributes.ExplicitLayout;

但是,这不会生成我需要的StructLayout属性,为什么?

CodeDom 代码生成,TypeAttribute ExplicitLayout 不会生成自定义属性

System.TypesAttributes.ExplicitLayout不会自动生成StructLayoutAttribute,所以我不得不"手动"声明它:

type.CustomAttributes.Add(new CodeAttributeDeclaration("StructLayout",
    new CodeAttributeArgument(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(LayoutKind)), "Explicit"))));