簡體   English   中英

為什么我的 ILSpy 顯示不同版本的代碼?

[英]why my ILSpy shows a different version of code?

我是 C# 和 .net 的新手,對不起,如果我的問題聽起來很愚蠢。

我遵循在線教程,該教程教授如何檢查已編譯的代碼,以下是講師的快照: 在此處輸入圖片說明

下面是我電腦的截圖: 在此處輸入圖片說明

可以看到我的是純IL代碼,即使我把設置改成C#: 在此處輸入圖片說明 不再有<Main>d_0部分,代碼是純 C# 代碼。 那么如何切換到視圖,以便可以像講師一樣查看“更高級的 C# 代碼”?

與您的講師相比,您使用的是更現代的 ILSpy 版本。 您更現代的版本可以更好地將 C# 的較新語言功能反轉為更簡單的 C# 代碼。

例如,舊版本的 ILSpy 無法將帶有await關鍵字的async方法反編譯回單個源方法,而是將它們顯示為已編譯的多方法狀態機(正如您在<Main>d_0如何TaskAwaiter所看到的TaskAwaiter<Main>d_0 )。

如果您想要與您的講師相同的顯示,您需要使用與他們相同版本的 ILSpy。 從屏幕截圖看來,他們使用的是 ILSpy 4 或更早版本 - 現在已經非常過時了。 您應該告訴您的講師獲取最新版本(截至 2020 年 11 月,它是 6.1 版)。

ILSpy 工具欄有一組按鈕,可讓您選擇

  • 僅顯示公共類型和成員
  • 顯示公共、私有和內部(默認)
  • 顯示所有類型和成員(包括編譯器生成的)

如果您選擇“顯示所有類型和成員”,即使啟用了async功能的反編譯,您也會看到編譯器生成的類及其 MoveNext 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM