2011-06-16 70 views
0

我有一個.cs文件,裏面有我的代碼。我編譯了它,並且得到了一個.dll文件。 我可以打開我的.dll文件並查看我的c#代碼,因爲我想再次編譯它?我可以打開我的Dll文件嗎

+0

請不要在標題中加上「C#」來表明它是一個C#問題。這就是標籤的用途。 – 2011-06-16 19:45:55

+0

編譯後你把它放在哪裏? – 2011-06-16 19:46:00

+1

他應該說「輕推微調眨眼睛」以及他的問題 - 他顯然是在嘗試反編譯他沒有源代碼的東西。 – 2011-06-16 19:48:48

回答

1

使用Reflector.Net查看您的代碼,您可以使用它來反彙編您的DLL。或者,如果您有原始的cs文件,那麼您可以使用C#編譯器進行重建。

0

您可以使用反彙編程序,如Reflector(或許多alternatives之一)將CIL反彙編回C#。

不確定爲什麼你需要它,如果你自己編譯DLL - 你肯定有源代碼?

2

呃,你說你編譯過一次。這意味着你已經有了源代碼。它在我看來有點異常,試圖反編譯DLL以重新編譯它,假設你有源代碼。這就是說C#編譯器吐出了MSIL代碼,這意味着你可以使用例如ildasm.exe這樣的工具從編譯後的程序集中得到這個MSIL代碼。然後,您可以修改生成的IL,並使用ilasm.exe實用程序將其重新編譯爲託管程序集。

當然,如果初始程序集使用強密鑰進行簽名,如果不使用私鑰進行處理,您將無法使用此密鑰對其進行簽名。

有一些工具,例如ILSpy(免費)和.NET Reflector(商業),它們允許您將託管程序集反彙編成一些託管語言(C#,VB.NET,...)。當然,在這個過程中,你不能期望獲得最初編譯程序集時使用的完全相同的源代碼,特別是如果它是在Release模式下編譯的,並且開啓了優化功能,因爲像本地變量名稱和註釋一樣不是導致組裝。

0

既然你使用.NET,是的。 .NET程序集實際上被設計爲易於反編譯,所以反射更容易和更快。

你只需要一個類似.NET Reflector的反編譯工具就可以進行反編譯。反射器現在是零售產品,但有幾種免費軟件替代品;我使用CodeReflect。但是,儘管像這樣的工具會向您顯示與您的原始代碼接近的東西,但首先它不會是精確的(條件編譯的代碼不會出現,某些調用和構造可以被優化,或者看起來像在IL中也是一樣的,只是略有不同的構造),其次,它不允許你改變任何東西。如果您有.cs文件和Visual Studio(或MSBuild;由VS使用的命令行工具)的副本,則可以將源文件重新編譯到DLL中。

相關問題