11得票3回答
为什么 .NET Core 和 .NET 5 会生成可执行文件?

我有一个非常困惑的问题。我理解的.NET是这样的: C# 应用程序(源码) -> csc.exe(编译器) -> .NET 应用程序(以 MSIL 形式存在) 如果是这样,为什么构建.NET应用程序的输出是Windows可执行文件?我原以为整个想法是将您的源代码编译成针对本...

7得票4回答
如何在MSIL级别上调试.NET可执行文件?

我有一个.NET可执行文件需要进行调试,希望能够单步执行,设置断点等,并且需要一个可视化界面。这似乎应该很容易解决,但我还没有找到解决方案!我在网上看到了关于DbgCLR.exe的信息,但是我无论在我的系统中还是在线上都找不到这个文件。我还在某个地方看到过DbgCLR.exe已经不再需要了,因...

26得票6回答
一个 .net 反汇编器/反编译器

我正在寻找一款 .net 的反汇编工具或更好的反编译工具。情况是,我的前任写的一个程序集的源代码丢失了,我想看一下它在做什么。 我知道 Visual Studio 安装附带了 ildasm,因此我可以获取 MSIL,但我希望有一款聪明到足以反向转换成 C# 代码(或最佳近似)的程序。 有这...

9得票2回答
为什么编译器会添加一个不必要的局部变量?

这段C#代码: private void LoadAssignments(AssignmentType assignmentType, Collection<Assignment> assignments) { bool flag; Dat...

18得票2回答
将SSA转换为堆栈机

我们都知道如何将代码从SSA表示法转换为寄存器机器码。 (基本上,图形着色寄存器分配是这种转换的核心。) 但是,将代码从SSA转换为堆栈机器有什么通用方法吗?(在我正在查看的情况下,是CIL字节码。)考虑到不需要寄存器分配,我预计这会更简单一些。

26得票1回答
为什么'unbox.any'没有像'castclass'一样提供有用的异常文本?

为了说明我的问题,考虑以下简单的例子(C#):object reference = new StringBuilder(); object box = 42; object unset = null; // CASE ONE: bad reference conversions (CIL i...

13得票2回答
使用F#语言时,"嵌套if"与"if and"的性能差异

以下代码的执行结果为 slow1 = 1323 ms,slow2 = 1311 ms 和 fast = 897 ms。这是怎么可能的? 在这里:嵌套或非嵌套if块?他们提到: 任何现代编译器(我指的是过去20年中构建的任何编译器)都将这些编译为相同的代码。 let s = Syste...

9得票1回答
重载的等于操作符从未被调用

这个类的方法 public class NullTester { public bool EqualsNull<T>(T o) where T : class { return o == null; } public bool I...

14得票1回答
为什么CLR的jmp指令不可验证?

我知道jmp指令已经有一段时间了,但是它从来没有让我觉得不安全。最近我查看了CIL规范,非常惊讶地发现jmp被认为是不可验证的。

20得票7回答
使用C#中的枚举类型索引数组

我有很多固定大小的数字集合,其中每个条目都可以通过常量访问。自然而然地,这似乎指向数组和枚举: enum StatType { Foo = 0, Bar // ... } float[] stats = new float[...]; stats[StatType....