Over a million developers have joined DZone.

Try Mono.Cecil if you need System.Reflection.Emit in Windows Phone 7

DZone's Guide to

Try Mono.Cecil if you need System.Reflection.Emit in Windows Phone 7

· ·
Free Resource

Windows Phone

As .NET compact framework never support System.Reflection.Emit, we can’t use Reflection.Emit in Windows Phone 7 development. So, it prevents us from porting the existing frameworks like Unity, Castle Dynamic Proxy, Moq and etc to Windows Phone 7 development platform. I was looking all options that helps us to use Reflection.Emit in Phone 7. The first option that I check is to port Mono code to Silverlight for Phone 7 version. The second option is to use Mono Cecil that is using in Mono Core. And the third option is to use EmitCF but I don’t see any update after beta release so I guess this project is dead already. So, I decided to give a try on Mono Cecil.

Mono Cecil supports Silverlight, Compact Framework and .NET desktop version. So, it’s very easy to make Cecil work on Phone 7. All I have to do is to create a conditional called CF in csproj file and then it will work like a charm. I submitted a patch to Mono Cecil but Jb Evain said that he doesn’t want to provide csproj officially so I will make the files downloadable here.

Download ~ cecil.zip (Please use Mono.Cecil – 2010.sln and Mono.Cecil-Phone.csproj )


What is Mono Cecil?

Cecil is a library written by Jb Evain to generate and inspect programs and libraries in the ECMA CIL format. It has full support for generics, and support some debugging symbol format.

In simple English, with Cecil, you can load existing managed assemblies, browse all the contained types, modify them on the fly and save back to the disk the modified assembly.

Today it is used by the Mono Debugger, the bug-finding and compliance checking tool Gendarme, MoMA, as well as DB4O.



Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}