Mono.Cecil - 错误的mscorlib版本

时间:2015-11-04 21:37:49

标签: c# mono.cecil

我在尝试让Mono.Cecil使用正确的" mscorlib"时遇到问题。使用TypeReference时的版本。我正在向Method中添加一个新变量,并按照以下方式执行操作。但是,它添加了对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类型系统,但我无法找到任何如何执行此操作的示例。

2 个答案:

答案 0 :(得分:1)

您应该尝试使用TypeReference构造函数

加载类型

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

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

答案 1 :(得分:0)

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

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