使用CSharpCodeProvider编译dll,并确保它与Visual Studio编译的dll相同

本文关键字:编译 dll Visual Studio 相同 确保 CSharpCodeProvider 使用 | 更新日期: 2023-09-27 18:17:01

我正在工作的一个项目需要一个.dll,这将需要在运行时进行一些更改。现在我用Visual Studio编译它,它工作得很好,但现在我想用编程的方式来做。

我目前正在使用CSharpCodeProvider,它似乎工作得很好。但是当我检查Visual Studio编译的文件和使用Kdiff使用我的程序编译的文件时,它们有一些细微的差异。我希望它们是相同的。

我已经通过这样做确保我使用了与Visual Studio相同的框架,即。net 3.5

providerOptions.Add("CompilerVersion", "v3.5");

1。是否有任何其他参数,我需要把,以确保编译过程是相同的,我目前使用的Visual Studio?

2。当我用反射器反编译我的编程编译的dll时,似乎引用在某种程度上不包括在项目中。我通过这样做将它们添加到dll中。我做错了吗?

using System;
using System.Drawing;
[...]
compilerParameters.ReferencedAssemblies.Add("System.dll");
compilerParameters.ReferencedAssemblies.Add("System.Drawing.dll");

p。我知道当我在运行时做出改变时,它们不会相同,但现在我只想得到完全相同的dll。

使用CSharpCodeProvider编译dll,并确保它与Visual Studio编译的dll相同

你永远不可能得到一个精确的二进制匹配,像汇编的MVID和PE32报头中记录的时间戳这样模糊的东西总是不同的。

最实用的方法是编写一个小程序,使用Process类运行带有/out选项的ildasm.exe来反编译程序集。现在它是简单的文本比较,微不足道的实现与StreamReader。还有一个很大的好处就是你现在可以确切地知道和

有什么不同