我可以打开我的Dll文件吗?

时间:2011-06-16 19:44:08

标签: c#

我有.cs文件,有我的代码。我编译了它,我得到了一个.dll文件。 我可以打开我的.dll文件并查看我的c#代码,因为我想再次编译它吗?

4 个答案:

答案 0 :(得分:2)

呃,你说你编译了一次。这意味着你已经拥有了源代码。假设你有源代码,我试着反编译DLL以重新编译它看起来有点异常。这就是说C#编译器吐出MSIL代码,这意味着你可以使用像ildasm.exe之类的工具从编译的程序集中获取这个MSIL代码。然后,您可以修改生成的IL并使用ilasm.exe实用程序将其重新编译回托管程序集。

当然,如果使用强密钥签署初始程序集,如果不使用私钥,则无法使用相同的密钥对其进行签名。

有一些工具,例如ILSpy(免费)和.NET Reflector(商业),允许您将托管程序集反汇编回某些托管语言(C#,VB.NET,...) 。当然,在这个过程中,你不能期望获得最初用于编译程序集的完全相同的源代码,特别是如果它是在发布模式下编译并且启用了优化,因为局部变量名称和注释之类的东西根本不属于结果组装。

答案 1 :(得分:1)

使用Reflector.Net查看您的代码,您可以使用它来反汇编您的DLL。或者,如果您有原始cs文件,则可以使用C#编译器重建。

答案 2 :(得分:0)

您可以使用反汇编程序,例如Reflector(或许多alternatives中的一个)将CIL反汇编回C#。

如果你自己编译了DLL,不确定为什么需要它 - 肯定你有源代码?

答案 3 :(得分:0)

因为您正在使用.NET,是的。 .NET程序集实际上设计为易于反编译,因此反射更容易,更快。

您只需要像.NET Reflector这样的反编译工具来进行反编译。 Reflector现在是零售产品,但有几种免费软件替代品;我使用CodeReflect。

但是,虽然这样的工具会向您显示与原始代码接近的内容,但首先它不会是准确的(有条件编译的代码不会出现,某些调用和构造可以优化,或者看看同样在IL中作为略有不同的构造),其次,它不允许你改变任何东西。如果您有.cs文件和Visual Studio(或MSBuild; VS使用的命令行工具)的副本,则可以将源文件重新编译为DLL。