在 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 類似, 包含了程序集所有的引用信息。
張志敏所有文章遵循創作共用版權協議,要求署名、非商業 、保持一致。在滿足創作共用版權協議的基礎上可以轉載,但請以超鏈接形式注明出處。
本博客已經遷移到 GitHub , 圍觀地址: https://beginor.github.io/
浙公網安備 33010602011771號