[Mono-dev] Edit and Continue / Function body rewrite

David Srbecky dsrbecky at gmail.com
Fri Jul 7 20:46:46 EDT 2006


I need to compile source code and there is a great C# compiler - gmcs. 
gmcs will save the update using System.Reflection.Emit and so this is 
how I need to get the data.

Consider this:
- I compile program using gmcs and save it to assembly Foo.exe
- I make gmcs to reemit one method using System.Reflection.Emit

How can I now use Cecil to get the IL code of the new method? I have to 
use System.Reflection.Emit.

David

Kornél Pál wrote:
> Cecil can read and write metadata and IL code so you can even modify 
> existing metadata or IL code. If you want to compile source code to IL 
> code you need a compiler. Neither System.Reflection.Emit nor Cecil 
> provides any compiler so this is not a difference.
> 
> Kornél
> 
> ----- Original Message ----- From: "David Srbecky" <dsrbecky at gmail.com>
> To: "Kornél Pál" <kornelpal at gmail.com>
> Cc: <mono-devel-list at lists.ximian.com>
> Sent: Saturday, July 08, 2006 2:28 AM
> Subject: Re: [Mono-dev] Edit and Continue / Function body rewrite
> 
> 
> I do not see how Cecil can help me - can you please outline how could I
> use it?
> 
> I know that Cecil can write new IL code and metadata to an assembly, but
> that's not what I want to do - I somehow want to obtain new IL code and
> metadata from a given source code of one method.
> 
> David
> 
> Kornél Pál wrote:
>> Why do you want to extend System.Reflection.Emit when Cecil already 
>> can do that? As far as I know Cecil can be used with .NET Framework as 
>> well so you don't even need two different runtimes.
>>
>> BTW according to your previous messages you don't only want to change 
>> IL code but you want to modify metadata and string heap as well.
>>
>> Kornél
>>
>> ----- Original Message ----- From: "David Srbecky" <dsrbecky at gmail.com>
>> To: "Kornél Pál" <kornelpal at gmail.com>
>> Cc: <mono-devel-list at lists.ximian.com>
>> Sent: Saturday, July 08, 2006 1:53 AM
>> Subject: Re: [Mono-dev] Edit and Continue / Function body rewrite
>>
>>
>>>> If you want to modify existing assemblies you should use Cecil 
>>>> (http://www.mono-project.com/Cecil) because it is designed to do 
>>>> this while System.Reflection.Emit is designed to emit new code and 
>>>> in fact
>>>
>>> I do not want to save the new IL code to assembly, I want to save it 
>>> to memory to change a running program - but I know how to do that.
>>>
>>> The problem is that I need to somehow *get* the new IL code - do to 
>>> that I need to use gmcs and System.Reflection.Emit.
>>>
>>>> it have less support for metadata creation than C# requires because 
>>>> Microsoft is not using it for C# compilation so they didn't 
>>>> reallized that System.Reflection.Emit lacks a lot of features.
>>>
>>> That's why I have to use Mono's System.Reflection.Emit not Mircosoft's
>>>
>>> David
>>
> 
> 





More information about the Mono-devel-list mailing list