问题标签 [ilspy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
596 浏览

.net-4.5 - 如何使用 ILSpy 或其他工具找出 .NET 框架中的哪些代码生成了特定的异常消息?

假设我在标准英美文化中运行时框架生成了一些特定的异常消息,例如“尝试连接到 Principle 服务器时发生此故障”。如何确定框架中的哪些代码在消息中生成包含此文本的异常?

堆栈跟踪并不总是有帮助,因为框架代码通常在最终抛出异常之前使用多个级别的辅助方法来生成异常。

我想这个字符串是本地化的,这就是为什么我在 ILSpy 的任何常量中都找不到它的原因。我想该字符串将与唯一的资源 ID 或类似的东西一起存储,然后由该 ID 引用,但我不确定从哪里开始查找 ID ...

0 投票
0 回答
682 浏览

c# - 使用 MDB(或 mdb2pdb?)将 IL 代码反汇编为带有行号的 C#

有谁知道可以将 IL 反汇编回 C# 代码并使用存储在 mdb 文件中的信息来注释反汇编 IL 的行号的工具?

我正在尝试调查包含行号但没有用于编译的确切源代码的堆栈跟踪。但我有一个 mdb 文件。

目前,我正在使用dotPeekILSpy为我进行反汇编,但我似乎没有找到任何指定 mdb 的选项。

在dotPeek 1.4的 DLL 属性下有一个不可编辑的部分“ Pdb ” ,但我也找不到mdb2pdb转换器。(只有pdb2mdb包含在 Mono 中)。

0 投票
1 回答
215 浏览

razor - ILSpy(又名 .NET Reflector)显示一个方法只是调用自身,为什么?

将匿名类型传递给像 TextBox 这样的 HtmlHelper 方法时,您会遇到绑定错误(因为匿名类型成员只有内部访问权限),除非您使用 RouteDataDictionary 来提取成员

当我看到(HtmlHelper 扩展)InputExtensions.TextBox 方法接受匿名类型时,我知道它必须在内部进行一些转换,否则它将失败并出现同样的错误。

果然,它调用了 HtmlHelper.AnonymousObjectToHtmlAttributes 方法,其文档试图通过不提及它来淡化问题,而是建议它只是用破折号替换下划线以确保使用有效的属性名称。当然。反正...

我想看看这个转换到底是什么样子,但是当我在 ILSpy 中检查 HtmlHelper 的具有该名称的静态方法时,该方法似乎只是调用了它自己。这里发生了什么?

0 投票
1 回答
310 浏览

c# - 将 IL 指令重构为更高级别的 .net 代码

ILSpy 正在使用 cecil 及其自己的库来完成此任务,我听说 .NETReflector 正在使用他自己的私有算法从 MSIL 生成更高级别的 c#、f#、vb 代码,以及如何在没有依赖关系的情况下执行此操作的任何方法/参考?

编辑:我现在对 ILSpy 和 cecil 作为骨干感到满意

解决方案

0 投票
1 回答
550 浏览

mono - 篡改组件时,为什么我不能删除原始说明?

为了能够测试依赖于 SharePoint 的遗留代码,我需要模拟 SharePoint 的一些对象。我通过篡改 SharePoint 程序集来做到这一点,并在运行中用我的方法替换它们的方法。

这适用于某些情况,但不适用于其他情况。我遇到的一个奇怪的情况就是这个。

我想SPContext.Current用我自己的实现替换getter;为了简单起见,我的实现只是抛出了一个异常:

在篡改原程序集的时候,如果我替换了getter对应的IL代码SPContext.Current,这个属性就不能再使用了。我什至无法在 ILSpy 中可视化它的内容,因为这是显示的内容:

另一方面,当我在原始指令之前插入指令时,我可以成功调用 getter,并在 ILSpy 中查看其内容:

...按照我插入的说明进行操作:

...遵循原始说明:

在插入新指令之前删除原始指令时,是什么阻止了 ILSpy 加载代码?

笔记:

  • 篡改是通过使用MethodDefinition.Body.Instructions集合(以及相应的InsertRemove方法)使用 Mono.Cecil 完成的。

  • 其他一些组装方法和属性Microsoft.SharePoint被成功篡改: ILSpy 显示生成的 IL 代码。

  • 我认为该.maxstack指令可能是一个问题(原始属性中有 1 个,代理属性中有 8 个,结果中有 1 个)。在对一个单独的项目进行了几次测试后,它似乎没有任何效果。

  • 我还怀疑异常可能是原因(原始代码引发的异常与新代码不同)。在对一个单独的项目进行了几次测试之后,它似乎也没有效果。

0 投票
1 回答
800 浏览

c# - 反编译 c# 动态操作时看到的语法实际上是什么意思?

我最近不得不尝试在同事不在的时候对他们的代码进行反编译,发现其中大部分看起来都非常好(感谢 ILSpy),但我们需要使用的几个地方除外dynamic——这些被分成几个部分:

  1. 调用站点容器 - 即在定义中类似于类,但假设使用的方法dynamicDoStuffpublic /* static? I forget */ class <DoStuff>CallSiteContainer_Plus_Some_Weirdness { /* bunch of CallSite fields */ }
  2. 很多代码检查容器中的各种 CallSite 是否已被分配,并在使用前根据需要使用我还没有得到的方法分配它们。

我的问题是关于第一点中类声明的语法。它看起来像一个泛型类,但显然不是。谁能解释那里发生了什么?

请注意,我不是在寻找原始代码的帮助 - 我已经通过明智地使用查找和替换以及将自动生成的代码与其他所有代码分开来做到这一点。但我想了解 CallSite 容器语法如何成为有效的类名!

0 投票
1 回答
593 浏览

c# - “使用”块编译器生成的代码在 dotPeek 或 ILSpy 中不可见

我有兴趣查看编译器为生成的using代码块生成的代码try-finally,但我没有看到两者dotPeekILSpy显示了这个细节。我曾经ildasm.exe看过这个代码块,我发现它里面有try-finally块,但不能很好地理解它……所以想看看这两个工具是否有帮助。

有任何想法吗?

更新: 所以我最近在我的项目中使用了一个实现 IDisposable 的结构,并担心using带有 IDisposable 的代码块和结构是否会导致装箱......但后来我发现下面的文章提到编译器针对这种情况进行了优化并且没有尝试调用 Dispose 时的框。

http://ericlippert.com/2011/03/14/to-box-or-not-to-box/

所以我很想知道编译器为我的 using 块生成了什么样的代码。

一个简单的示例复制: 在此处输入图像描述

0 投票
1 回答
208 浏览

f# - 如果我在 C# 商店工作并尝试编写 F# 只是为了依赖 ILSpy 进行转换,会有什么风险?

如果我在 C# 商店工作并尝试在 F# 中编写功能,然后依靠 ILSpy 将 F# 源代码转换为 C# 表示,会涉及哪些风险?

0 投票
0 回答
212 浏览

c# - 这个发出的代码有用吗?

在使用 ILSpy 查看一些 dll 时,我遇到了以下代码:

num 变量的引入对我来说似乎很奇怪。为什么编译器会引入一个额外的局部变量?

原始代码只是一个简单的循环,尽管它使用计数变量而不是 foreach 枚举器:

0 投票
1 回答
197 浏览

.net - 使用 ICSharpCode Decompiler 的语法树中缺少 Lambda 表达式的嵌套类

显然,ICSharpCode Decompiler 不会以某种方式反编译由 C# 编译器为 lambda 表达式创建的内部类。考虑以下示例:

在某些情况下,C# 中的 lambda 表达式将被编译成一个内部类,其中包含一个包含 lambda 主体的方法。例如这样的 C# 代码:

将导致编译器添加如下内部类:

(也许不完全是这样,但你明白了。)

现在的问题是,当我尝试MyClass通过使用ICSharpCode.Decompiler.Ast.AstBuilder这些内部类的程序集以编程方式构建 AST 时,AST 中没有包含这些内部类(其他一切都很好)。我什至可以在MyClass's的注释中看到这些生成的类TypeDecleration:具有类型的注释Mono.Cecil.TypeDefinition在其属性中正确列出了这些内部类NestedTypes(因此它们已从程序集中正确加载但未添加到语法树中;还有其他手动创建的内部类类被正确反编译)。

另请参阅我打开的这个 ILSpy 问题:https ://github.com/icharpcode/ILSpy/issues/686

我在这里遗漏了一些明显的东西吗?我还使用 GUI 查看了 ILSpy 的程序集,并且有问题的代码已正确反编译(尽管不是使用内部类,而是重构了 lambda)。