c# - 如何在 .Net core exe/assembly 上运行 ildasm?

标签 c# .net .net-core ildasm

我正在尝试针对 .NetCore3.1 控制台应用程序运行作为 Visual Studio 2019 的一部分安装的 ildasm(中级语言反汇编程序)。

使用 Visual Studio 2019 的开发人员命令提示符并运行以下命令

ildasm.exe D:\DotNet\IntroductionToCsharp\IntroductionToCsharp\bin\Debug\netcoreapp3.1\IntroductionToCsharp\bin\Debug\netcoreapp3.1\IntroductionToCsharp.exe



但出现以下错误:

'D:\DotNet\IntroductionToCsharp\IntroductionToCsharp\bin\Debug\netcoreapp3.1\ IntroductionToCsharp.exe' has no valid CLR header and cannot be disassembled



this folder content

注意:在非 Core (.Net Framework 4.x) exe 上运行相同的命令可以正常工作。也许在 .Net Core 中查看 IL 需要一些特殊的东西?

最佳答案

正如已经指出的那样,.exe在 .NET Core 中只不过是一个主机。它的唯一目的是加载 CoreCLR,然后 JIT 编译并执行程序集的 Main 方法。代码本身存储在 .dll 中.您可以使用您最喜欢的反汇编程序(ILDASM、JetBrains 的 dotPeek、ILSpy 等)检查这一点。

为什么 IL 反汇编器可以对 .exe 起作用在 .NET 框架中?因为可执行文件是一个托管程序集,具有相应的托管 header 。与 .NET Core 不同,.NET Framework 得到了 Windows 操作系统的 Image Loader 的广泛支持,可以设置所有内容,然后在可执行文件中运行托管代码。见第二点讨论here .

关于c# - 如何在 .Net core exe/assembly 上运行 ildasm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59818364/

相关文章:

c# - 多播委托(delegate) C#

c# - 如何实现返回类型为 Task<T> 的方法

.net - 在 .Net 中反射执行代码

c# - 内联变量声明不编译

c# - 使用 MSI 向 Azure Blob 存储进行身份验证时出现问题

entity-framework - 同一数据库中的 Entity Framework 核心多个 DbContext 迁移

c# - 使用 lambda 查询获取前 5 个值

c# - c#中的小数到精确分数转换器

c# - 公开课 - "is inaccessible due to its protection level. Only public types can be processed."

c# - Windows 服务使用队列中的 Azure 服务总线消息