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