在 Silverlight 项目中获取程序集的引用信息

在完整的 .Net 环境下,如果要获取程序集的引用信息,可以使用下面的代码:

var assembly = Assembly.LoadFrom(assemblyFile);
var references = assembly.GetReferencedAssemblies();

得到的 references 对象是一个 AssemblyName 数组, 这个对象包含了程序集的所有引用信息, 关于 AssemblyName 类的信息, 可以参考 MSDN 中相应的文档

众所周知, 获取程序集的引用信息对于插件式开发是非常重要的, 但是, 在 Silverlight 环境下, Assembly 类却没有这个方法, 因此我们无法通过反射获取到程序集的引用信息。 不过幸运的是我们有开源的 Mono.Cecil 项目, 而且 Cecil 已经开始完整的支持 Silverlight 了, 因此我们需要 Cecil 来获取程序集的引用信息。

首先我们需要获取 Cecil 的源代码并且编译成 Silverlight 类库,这是非常容易的。 只要访问 Cecil 的 github 站点, 下载最新版本的源代码, 然后将配置修改为 silverlight_release 或者 silverlight_debug 编译即可。

然后在我们的 Silverlight 项目中添加对 Cecil 的引用就可以使用了, 使用 Cecil 获取程序集的代码如下:

var entryPointPart = Deployment.Current.Parts.First(asmPart => asmPart.Source == assemblyName);
var entryPointResourceInfo = Application.GetResourceStream(new Uri(entryPointPart.Source, UriKind.Relative));
var asmDef = AssemblyDefinition.ReadAssembly(entryPointResourceInfo.Stream);
var references = asmDef.MainModule.AssemblyReferences.ToArray();

这样获取到的 references 对象是一个 Mono.Cecil.AssemblyNameReference 数组, AssemblyNameReference 与 .Net 环境下的 AssemblyName 类似, 包含了程序集所有的引用信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值