您的位置:首页 > 编程语言 > C#

How to programmatically generate C# files from a DLL or EXE

2011-11-09 14:05 1121 查看
I’m working on a project that involves researching and comparing many versions of the same DLL. I don’t have the source for every version of this DLL so I needed a way to convert it to C# files and diff those. Since there are thousands of versions of this file out there I needed to be able to generate the C# files programmatically.

I started with Reflector, but it doesn’t have a simple API needed to generate the files programmatically.

I came across JustDecompile from Telerik and found that they do have a command line API that works great. I could have just invoked the EXE with Process.Start, but I figured I should see how they are doing and see if I could do everything inproc. So I decompiled the JustDecompile.exe file and found a very simple DLL method that they use to output C# files.

1) Download JustDecompile

2) Open up your project and Add References to these two DLLs.


C:\Program Files (x86)\Telerik\JustDecompile\Libraries\JustDecompile.Tools.MSBuildProjectBuilder.dll

C:\Program Files (x86)\Telerik\JustDecompile\Libraries\JustDecompiler.dll


3) Add these namespaces:


using JustDecompile.Tools.MSBuildProjectBuilder;
using Telerik.JustDecompiler.Languages.CSharp;
using System.Threading;


4) Add this code to your project where you want to programmatically decompile code

MSBuildProjectBuilder projectBuilder = new MSBuildProjectBuilder(dll, outfolder, new CSharpV4());

[code]projectBuilder.ProjectFileCreated += new EventHandler<ProjectFileCreatedEvent>(projectBuilder_ProjectFileCreated);

projectBuilder.BuildProject(new CancellationToken());

[/code]
Where dll is the path to the dll that you want to decompile and outfolder is the folder you want to output the C# files.

5) Add this event handler to be notified when the Visual Studio Project file has been created

static void projectBuilder_ProjectFileCreated(object sender, ProjectFileCreatedEvent e)

[code]{

//throw new NotImplementedException();

}

[/code]

Hope this saves you some time.

Jon
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: