2015-11-04 63 views
0

我有问题试图让Mono.Cecil在使用TypeReference时使用正确的“mscorlib”版本。我将一个新变量添加到一个Method中,并沿着以下方式进行操作。但是,它添加了对4.0 mscorlib的引用,而不是2.0 mscorlib。我必须使用.NET Framework 4.5运行此应用程序,因此我无法使用较低版本,除非我重新编写其他人无法访问的代码。Mono.Cecil - 错误的mscorlib版本

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)); 

我试图围绕搜索有关如何获取正确的版本,我显然必须使用塞西尔类型系统的答案,但我无法找到如何做到这一点的任何例子。

回答

0

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

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

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

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

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

+1

感谢您的领导,我通过执行以下操作可以解决此问题。 assemblyDefinition.MainModule.GetType(“System.Nullable'1 [[System.Boolean]]”,true) – 7H3LaughingMan

+0

@ 7H3LaughingMan很高兴知道这一点。那么你应该发布你的答案并接受它。 –