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
属性,为什么?
System.TypesAttributes.ExplicitLayout
不会自动生成StructLayoutAttribute
,所以我不得不"手动"声明它:
type.CustomAttributes.Add(new CodeAttributeDeclaration("StructLayout",
new CodeAttributeArgument(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(LayoutKind)), "Explicit"))));