在 Silverlight 项目中获取程序集的引用信息
在完整的 .Net 环境下,如果要获取程序集的引用信息,可以使用下面的代码:
1 2 | 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 获取程序集的代码如下:
1 2 3 4 | 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 类似, 包含了程序集所有的引用信息。
张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。
本博客已经迁移到 GitHub , 围观地址: https://beginor.github.io/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架