Mono.Cecil无法处理Silverlight 5程序集。

3
当我尝试通过Mono.Cecil版本0.9.3.0读取Silverlight 5程序集时,我遇到了以下异常:
System.NotSupportedException: Version not supported: 5.0.5.0
------   
at Mono.Cecil.BaseAssemblyResolver.GetCorlib(AssemblyNameReference reference) in C:\programming\mono.cecil\jbevain-cecil-5df660e\Mono.Cecil\BaseAssemblyResolver.cs:line 200
------  
at Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name) in C:\programming\mono.cecil\jbevain-cecil-5df660e\Mono.Cecil\BaseAssemblyResolver.cs:line 117
....

这是因为Silverlight项目中的引用是mscorlib 5.0.5.0,而GetCorlib函数似乎无法处理这些情况。这个问题有解决方案吗?

在 https://github.com/jbevain/cecil/issues 上报告一个 bug,@jbevain 通常会快速解决问题 :) - leppie
我不确定这是否是一个问题,因为代码中有各种 #if !SILVERLIGHT。因此,似乎已经考虑到并处理了某些内容,只是我不明白如何使用单个mono.Cecil.dll来处理常规的.NET程序集和Silverlight程序集。 - VitalyB
5
@leppie,谷歌提醒也可以使用 :) 我在 SO 上发问题后仅几分钟就会收到邮件。 - Jb Evain
@JbEvain:很酷,以前不知道这个,是时候去调查一下了 :) - leppie
@JBEvain:真快啊。谢谢! - VitalyB
1个回答

8

Cecil的默认解析器不能处理Silverlight程序集。修复方法很简单。只需将您自己的解析器传递给您的程序集,并确保它可以解析Silverlight程序集:

var resolver = new DefaultAssemblyResolver ();
resolver.AddSearchDirectory ("path/to/silverlight/assemblies");

var assembly = AssemblyDefinition.ReadAssembly (
    assemblyFile,
    new ReaderParameters { AssemblyResolver = resolver });

我强烈建议您从0.9.3升级到较新的版本。此外,为了保持HTML标记,内容不做解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接