Система.Отражение.Emit — Как добавить атрибут к определению возвращаемого типа?

#c# #.net #reflection.emit

#c# #.net #reflection.emit

Вопрос:

Я определяю некоторые типы через 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);
  

Атрибут return отсутствует: (Есть идеи, как добиться правильного поведения?

Заранее спасибо

Ответ №1:

Этот код, о котором идет речь, работает хорошо, просто дизассемблер C # не показывает его, il one показывает.