Mono.Cecil - 错误的 mscorlib 版本

Mono.Cecil - Wrong mscorlib version

我在尝试让 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 类型系统,但我找不到任何有关如何执行此操作的示例。

您应该尝试使用 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)