我有一个.cs文件,里面有我的代码。我编译了它,并且得到了一个.dll文件。 我可以打开我的.dll文件并查看我的c#代码,因为我想再次编译它?我可以打开我的Dll文件吗
回答
使用Reflector.Net
查看您的代码,您可以使用它来反汇编您的DLL。或者,如果您有原始的cs文件,那么您可以使用C#编译器进行重建。
您可以使用反汇编程序,如Reflector(或许多alternatives之一)将CIL反汇编回C#。
不确定为什么你需要它,如果你自己编译DLL - 你肯定有源代码?
呃,你说你编译过一次。这意味着你已经有了源代码。它在我看来有点异常,试图反编译DLL以重新编译它,假设你有源代码。这就是说C#编译器吐出了MSIL代码,这意味着你可以使用例如ildasm.exe这样的工具从编译后的程序集中得到这个MSIL代码。然后,您可以修改生成的IL,并使用ilasm.exe实用程序将其重新编译为托管程序集。
当然,如果初始程序集使用强密钥进行签名,如果不使用私钥进行处理,您将无法使用此密钥对其进行签名。
有一些工具,例如ILSpy(免费)和.NET Reflector(商业),它们允许您将托管程序集反汇编成一些托管语言(C#,VB.NET,...)。当然,在这个过程中,你不能期望获得最初编译程序集时使用的完全相同的源代码,特别是如果它是在Release模式下编译的,并且开启了优化功能,因为像本地变量名称和注释一样不是导致组装。
既然你使用.NET,是的。 .NET程序集实际上被设计为易于反编译,所以反射更容易和更快。
你只需要一个类似.NET Reflector的反编译工具就可以进行反编译。反射器现在是零售产品,但有几种免费软件替代品;我使用CodeReflect。但是,尽管像这样的工具会向您显示与您的原始代码接近的东西,但首先它不会是精确的(条件编译的代码不会出现,某些调用和构造可以被优化,或者看起来像在IL中也是一样的,只是略有不同的构造),其次,它不允许你改变任何东西。如果您有.cs文件和Visual Studio(或MSBuild;由VS使用的命令行工具)的副本,则可以将源文件重新编译到DLL中。
- 1. 我可以在Python中使用Popen打开的gzip文件吗?
- 2. MySql连接,我可以打开它吗?
- 3. 我可以从popen()流打开bash吗?
- 4. 我可以在SQL CLR中打开外部文件吗?
- 5. 我可以在AppEngine上打开/写入SQLite文件吗?
- 6. 我可以打开一个文件让R运行代码吗?
- 7. 我可以在Express中打开Installshield Pro文件吗?
- 8. 我可以在Ace Editor中打开HTML文件吗?
- 9. 我可以用application/vnd.openxmlformats-officedocument.spreadsheetml.sheet打开一个xlsx文件吗?
- 10. 我们可以阻止打开CSS,JS文件吗?
- 11. iPhone:我们可以使用UIWebView打开pdf文件吗?
- 12. 我们可以在android中打开一个swf文件吗?
- 13. 我可以有两个组头文件吗?我可以替代打印吗?
- 14. 我可以打开Cookie文件并查看该文件中的内容吗?
- 15. 我可以找到.NET dll构建的目标文件吗?
- 16. 我可以组织DLL中的类吗?
- 17. Dreamweaver可以打开.manifest文件吗?
- 18. 我可以关闭我打开的浏览器活动吗?
- 19. 我可以从2天前获得以前打开的文件列表吗?
- 20. 我可以分开我的Capistrano capfile吗?
- 21. 我可以运行一个批处理文件,当我打开
- 22. 我可以签署不是开源的DLL吗?
- 23. 我们可以从.dll文件中检索方法体吗?
- 24. 我可以在android应用程序中使用dll文件吗?
- 25. 我可以在DLL中嵌入其他文件吗?
- 26. 我们可以直接在IDE中打开设计文档吗?
- 27. 我可以使用Chromium从本地网页打开可执行文件吗?
- 28. 我可以在MacVim内运行软件包打开命令吗?
- 29. 我可以在VB6中打开不可见的窗体吗?
- 30. 我可以记住UWP应用程序中打开的文件吗?
请不要在标题中加上“C#”来表明它是一个C#问题。这就是标签的用途。 – 2011-06-16 19:45:55
编译后你把它放在哪里? – 2011-06-16 19:46:00
他应该说“轻推微调眨眼睛”以及他的问题 - 他显然是在尝试反编译他没有源代码的东西。 – 2011-06-16 19:48:48