System.Reflection.Emit - 如何添加属性以返回类型定义?

发布于 2024-11-05 04:30:25 字数 1082 浏览 0 评论 0原文

我通过 System.Reflection.Emit 定义一些类型。想象一下,我想要带有一些自定义属性的方法签名,如下所示:

[return: MyAttr]
MyType MethodName([MyOtherAttr] MyOtherType);

我使用这样的代码来生成它:

TypeBuilder t = assembly.DefineType(...);

MethodAttributes methodAttr = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.NewSlot;
MethodBuilder method = t.DefineMethod("MethodName", methodAttr, typeof(MyType), new Type[] { typeof(MyOtherType) });
method.SetImplementationFlags(MethodImplAttributes.Runtime | MethodImplAttributes.Managed);

// return type
ParameterBuilder pbr = method.DefineParameter(0, ParameterAttributes.Retval, null);
CustomAttributeBuilder cabr = GetMyAttrBuilder();
pbr.SetCustomAttribute(cabr);

// parameter
ParameterBuilder pbp = method.DefineParameter(1, ParameterAttributes.None, null);
CustomAttributeBuilder cabp = GetMyOtherAttrBuilder();
pbp.SetCustomAttribute(cabp);

t.CreateType();

但是生成的方法签名是:

MyType MethodName([MyOtherAttr] MyOtherType);

缺少返回属性:(知道如何实现正确的行为吗?

提前致谢

I'm defining some types via System.Reflection.Emit. Imagine that I want to have method signature with some custom attributes, something like this:

[return: MyAttr]
MyType MethodName([MyOtherAttr] MyOtherType);

I use such code to generate it:

TypeBuilder t = assembly.DefineType(...);

MethodAttributes methodAttr = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.NewSlot;
MethodBuilder method = t.DefineMethod("MethodName", methodAttr, typeof(MyType), new Type[] { typeof(MyOtherType) });
method.SetImplementationFlags(MethodImplAttributes.Runtime | MethodImplAttributes.Managed);

// return type
ParameterBuilder pbr = method.DefineParameter(0, ParameterAttributes.Retval, null);
CustomAttributeBuilder cabr = GetMyAttrBuilder();
pbr.SetCustomAttribute(cabr);

// parameter
ParameterBuilder pbp = method.DefineParameter(1, ParameterAttributes.None, null);
CustomAttributeBuilder cabp = GetMyOtherAttrBuilder();
pbp.SetCustomAttribute(cabp);

t.CreateType();

But the generated method signature is:

MyType MethodName([MyOtherAttr] MyOtherType);

The return attribute is missing :( Any idea how to achieve right behavior?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寄人书 2024-11-12 04:30:25

这段代码运行良好,只是 C# 反汇编程序没有显示它,而有人却显示了它。

This code in question is working well just the C# disassembler does not shows it, il one does.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文