Mono.Cecil-mscorlib版本错误

本文关键字:错误 版本 Cecil-mscorlib Mono | 更新日期: 2023-09-27 18:20:31

我在尝试获取Mono.Cecil时遇到问题,在使用TypeReference时请使用正确的"mscorlib"版本。我正在向一个方法添加一个新变量,并按照以下步骤进行操作。然而,它添加了对4.0 mscorlib的引用,而不是2.0 mscorlib。我必须使用.NET Framework 4.5运行这个应用程序,所以我不能使用较低版本,除非我重新编写我无法访问的其他人的代码。

TypeReference typeReference = CSharpModule.Import(Type.GetType("System.Nullable`1[[System.Boolean, mscorlib, Version=2.0.0.0]], mscorlib, Version=2.0.0.0"));
methodBody.Variables.Add(new VariableDefinition(typeReference));

我试着四处寻找如何获得正确版本的答案,显然我必须使用Cecil类型系统,但我找不到任何如何做到这一点的例子。

Mono.Cecil-mscorlib版本错误

您应该尝试使用TypeReference构造函数加载类型

https://github.com/lextm/obfuscar/blob/master/Obfuscar/Obfuscator.cs#L1204

我的项目Obfuscar展示了一个如何做到这一点的例子。您需要非常注意library.MainModule.TypeSystem.Corlib部分,以便从正确的mscorlib程序集加载类型。

所以我能够通过以下操作来解决这个问题。使用MainModule可用的内容创建TypeReference。

assemblyDefinition.MainModule.GetType("System.Nullable`1[[System.Boolean]]", true)