Reflection.Emit генерация сборки со структурой
От: t.zamaleev  
Дата: 11.08.10 22:27
Оценка:
Доброго времени суток.

Необходимо сгенерировать сборку содержащую структуру со строковой константой:

namespace n {
    struct Alpha {
        public const string DATA = "Alpha";
    }
}


Можно ли это сделать силами Reflection.Emit ? С генерацией классов я разобрался, а вот касательно генерации структур информацию найти не могу. Заранее спасибо.
reflection.emit
Re: Reflection.Emit генерация сборки со структурой
От: Пельмешко Россия blog
Дата: 12.08.10 07:16
Оценка: 1 (1)
Здравствуйте, t.zamaleev, Вы писали:

TZ>Доброго времени суток.


TZ>Необходимо сгенерировать сборку содержащую структуру со строковой константой:


TZ>
namespace n {
TZ>    struct Alpha {
TZ>        public const string DATA = "Alpha";
TZ>    }
TZ>}


TZ>Можно ли это сделать силами Reflection.Emit ? С генерацией классов я разобрался, а вот касательно генерации структур информацию найти не могу. Заранее спасибо.


Можно, конечно!
Следует лишь воспользоваться данной перегрузкой метода ModuleBuilder.DefineType():
public TypeBuilder DefineType(
    string name,
    TypeAttributes attr,
    Type parent
)
и указать в качестве наследуемого типа typeof(System.ValueType).

Удачи!
Re: Reflection.Emit генерация сборки со структурой
От: t.zamaleev  
Дата: 14.08.10 10:47
Оценка: 1 (1)
Если кому нибудь потребуется вот решение:

    private static void Generate() {
        var an = new AssemblyName("Beta") { Version = new Version("1.0.0.0") };

        var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save);

        var mb = ab.DefineDynamicModule("BetaModule", "Beta.dll");

        var tb = mb.DefineType("n.Beta", TypeAttributes.Public, typeof(System.ValueType));

        var fb = tb.DefineField("DATA", typeof(string), FieldAttributes.Public | FieldAttributes.Literal);
        fb.SetConstant("Beta");

        tb.CreateType();
        ab.Save("Beta.dll");
    }
Re: Reflection.Emit генерация сборки со структурой
От: hexamino http://hexamino.blogspot.com/
Дата: 16.08.10 06:54
Оценка:
Здравствуйте, t.zamaleev, Вы писали:

TZ>Необходимо сгенерировать сборку содержащую структуру со строковой константой:


А какая разница — создавать константу в классе или в структуре?
Re[2]: Reflection.Emit генерация сборки со структурой
От: Sinix  
Дата: 16.08.10 07:53
Оценка: 1 (1)
Здравствуйте, t.zamaleev, Вы писали:

TZ>Если кому нибудь потребуется вот решение:


На будущее — можно использовать ReflectionEmitLanguage.
Re[2]: Reflection.Emit генерация сборки со структурой
От: t.zamaleev  
Дата: 16.08.10 08:58
Оценка:
Здравствуйте, hexamino, Вы писали:

H>А какая разница — создавать константу в классе или в структуре?


Фактически не какой, но с идеологической точки зрения мне кажется что в данном случае правильнее использовать структуру, ну и для общего развития хотелось узнать можно ли такое сделать и если можно то как.
Re[3]: Reflection.Emit генерация сборки со структурой
От: t.zamaleev  
Дата: 16.08.10 09:00
Оценка:
Здравствуйте, Sinix, Вы писали:

S>На будущее — можно использовать ReflectionEmitLanguage.


Спасибо большое! По описанию понравилось, при случае попробую.
Re: Reflection.Emit генерация сборки со структурой
От: TK Лес кывт.рф
Дата: 16.08.10 10:03
Оценка:
Здравствуйте, t.zamaleev, Вы писали:

TZ>Можно ли это сделать силами Reflection.Emit ? С генерацией классов я разобрался, а вот касательно генерации структур информацию найти не могу.


Используйте .NET Reflector и ReflectionEmitLanguage: http://reflectoraddins.codeplex.com/wikipage?title=ReflectionEmitLanguage
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.