问题标签 [mono.cecil]

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 投票
1 回答
2098 浏览

c# - 如何在 Cecil 中获取程序集的属性值

有没有办法进入str1代码?

的实例Mono.Cecil.CustomAttribute.Fields为空。

0 投票
0 回答
500 浏览

c# - 将泛型类型参数应用于返回泛型参数的方法时出现 MissingMethodException

我有一个名为 DynamicInvoke 的方法,如下所示:

它在以下上下文中使用(是的,这是使用 Mono.Cecil 以编程方式生成的代码并使用 ILSpy 反转):

现在,如果 a) GenericsTest 没有泛型参数或 b) 该方法没有泛型参数(并且我有其他类和方法可以验证这一点),则代码现在可以正常运行。只有当类和方法都包含泛型参数时才会出现问题。

调用 di.Invoke 时,出现以下异常:

鉴于我在 ILSpy 中检查了结果,并且 IL 和元数据在功能上等同于 C# 编译器本身生成的结果(通过将代码复制到 .cs 文件并编译它进行测试),我现在认为它是导致此问题的 Invoke 方法的运行时使用。

一个奇怪的效果是构造函数被成功调用,并且 Visual Studio 在检查新创建的 IDirectInvoke 对象时正确报告了类型(它只在调用 Invoke 时抛出异常),但如前所述,Invoke 的 IL 与C# 生成。

有谁知道在这种情况下可能是什么问题?

编辑:还有一件事,这只发生在直接返回分配给方法的泛型参数的方法上(因此,如果方法返回 A、B 或另一个包含 A、B 或 C 参数的泛型类型实例,则不会发生这种情况;在这种情况发生是因为该方法直接返回了一个 C 类型的对象)。

0 投票
1 回答
2273 浏览

c# - 从另一个程序集添加 TypeDefinition

这个快把我逼疯了。

每当我尝试执行上述代码时,我都会收到此错误“类型已附加”,我决定在 MonoCecil 源代码中查看此错误,我发现它会引发此错误,因为该类型的 MainMoudle 不是 asm2 MainModules。所以我决定将该类型复制到一个新类型。

然后正常将此类型添加到我的程序集中,但这会引发另一个错误,“不支持指定的方法。”。有什么想法为什么我会收到这个错误?

编辑:只是添加,我试图添加的类型包含一些使用指针的方法。这可能是问题吗?据我所知,单声道支持但不支持混合模式。

0 投票
1 回答
748 浏览

.net - 如何使用 Mono.Cecil 检查 .pdb 和 .dll 文件是否匹配?

我们在项目中使用 Mono.Cecil。它是否有任何功能可以让我检查特定的 PDB 和 DLL 是否匹配?

谢谢!

0 投票
1 回答
786 浏览

.net - Mono.Cecil 无法处理 Silverlight 5 程序集

当我尝试通过Mono.Cecil版本 0.9.3.0 读取 Silverlight 5 程序集时,出现以下异常:

发生这种情况是因为 Silverlight 项目中的引用是 mscorlib 5.0.5.0,而 GetCorlib 函数似乎没有处理这些情况。

这个问题有解决方案吗?

0 投票
2 回答
221 浏览

c# - 通过 C# 代码解析/重构 C#

是否有任何来自 Microsoft 或 Mono 项目的库允许您通过代码对 C# 代码库进行全面更改?塞西尔有什么事吗?我认为 Cecil 只允许您在字节码级别工作 - 任何可以在语言级别工作的东西?

我已经确定了我想纠正的问题。只是可以以 C# 语法感知的方式使用搜索/替换的一些帮助。

0 投票
1 回答
863 浏览

.net - 如何在 Mono.Cecil 中为 MethodReference 创建 GenericParameter 返回类型?

我正在尝试使用 Mono.Cecil 重现以下 IL:

当我使用 Mono.Cecil 检查这个 IL 时,我看到指令的操作数是一个 GenericInstanceMethod,它包含一个 MethodReference 类型的 ElementMethod。此 MethodReference 又具有 GenericParameter 类型的返回类型。

我想手动创建相同的对象,但似乎达到了 catch-22。要创建一个 GenericParameter,我需要一个 IGenericParameterOwner,它似乎与上面的 MethodReference 完全相同。所以我想将 MethodReference 传递给 GenericParameter 构造函数。但是,如果没有返回类型的 TypeReference,我也无法创建 MethodReference,我认为它应该是 GenericParameter。

我该如何解决这个问题?我有什么误解?

0 投票
2 回答
1082 浏览

c# - Visual Studio Watch 窗口未考虑使用情况

我在视图模型中有以下代码:

代码文件顶部的用途之一是System,其中包含Math.

如果我Math.Sin(Theta)在 Watch 窗口中查看(通过选择代码、右键单击并选择“Add Watch”),我会收到以下错误:

当前上下文中不存在名称“数学”

我想知道的是:

  1. 这是 Visual Studio 2010 的预期/默认行为吗?我可以发誓这从来都不是问题,但也许它总是这样工作,我不知何故从未注意到。
  2. 如果出现此错误是不正常的,对问题可能是什么有任何想法?Visual Studio 中有上百万个设置,我不知道从哪里开始。

我应该注意到这个问题与此模糊相似,但我没有任何问题将鼠标悬停在我的局部变量上,而且我没有使用 PostSharp。

编辑

我刚刚尝试将我的所有 Visual Studio 设置重置为默认值,但我仍然遇到同样的错误。如果有人想在 Visual Studio 中尝试一个简单的测试,我只想知道如果为Math.Sin(1).

编辑 2

这里有几个屏幕截图来显示我正在经历的事情:

添加 Math.Sin(1) 来观看

显示手表错误

编辑 3

有趣的是,如果我Math.在 Watch 窗口中输入,智能感知就可以工作,但如果我完成表达式,我仍然会收到错误:

显示智能感知工作

编辑 4

要解决 BACON 的问题:

  1. 我对 QuickWatch 和 Immediate 有同样的行为。
  2. 关闭并重新打开所有窗口并不能解决问题。
  3. 我正在使用 Visual Studio 2010 Professional(版本 10.0.40219.1 SP1Rel)
  4. 我尝试针对 .NET 4.0 客户端配置文件和完整的 .NET 4.0。没区别。我创建了一个针对 .NET 4.0 客户端配置文件的控制台应用程序(而不是 WPF 应用程序),最后没有发生错误。因此,WPF 可能是一个问题(或 WPF 与某些第三方库)。(接下来会检查。)
0 投票
1 回答
2117 浏览

c# - 检查 Mono.Cecil 和 Mono.Cecil.Cil

我有一些代码可以加载 exe 文件并向用户显示其 CIL 代码。为此,我使用 Mono.Cecil 和 Mono.Cecil.Cil。

现在我想做一些不同的事情:我想知道用户的系统中是否有 Mono.Cecil 和 Mono.Cecil.Cil。为此,我想将 Reflection.Assembly.Load 与 Mono.Cecil 和 Mono.Cecil.Cil 一起使用。就像是:

但我只收到以下错误:

当然,我有 Mono.Cecil 和 Mono.Cecil.Cil。我没有正确使用 Assembly.Load 吗?如果是这种情况,有人可以告诉我如何使用 Assembly.Load 来加载 Mono.Cecil 和 Mono.Cecil.Cil 而无需寻找路径(制作仅在 Windows 或 GNU/Linux 下使用的 exe 文件单声道)?

注意:我在 Linux Mint 下使用 MonoDevelop 2.6 或在 windows 7 下使用 MonoDevelop 2.8。

0 投票
2 回答
5756 浏览

c# - ICSharpCode.Decompiler + Mono.Cecil -> 如何为单个方法生成代码?

我可以使用 Mono.Cecil 和 ICSharpCode.Decompiler 为类型或程序集生成代码。

但是,如果我尝试为单个方法生成代码,则会收到错误消息“对象引用未设置为对象的实例”。

你们能给我一些关于这个的提示吗?提前感谢所有帮助。

为程序集中的所有类型生成代码的代码:

为程序集中的所有公共方法生成代码的代码: