有的时候在进行反射操作时经常可能
所射的类不是能过下面两种情况所能创建
Assembly.GetCallingAssembly().CreateInstance(""); Assembly.GetExecutingAssembly().CreateInstance("");
所以可以在程序起来的时候,把当前所有的程序集获取到一个集合里面去
然后想用的时候,只要知道程序集的dll名称,以及要返回的类的FullName就可以了
下面就是获取当前项目中所有程序集的引用
static Dictionary<String, Assembly> DynLoadingAssemblyDict = new Dictionary<string, Assembly>();//用来存放当前项目所有程序集字典 /// <summary> /// 加载所有程序集合 /// </summary> public static void LoadDll() { AssemblyPartCollection coll = Deployment.Current.Parts; foreach (var v in coll) { if (!DynLoadingAssemblyDict.ContainsKey(v.Source)) { System.Windows.Resources.StreamResourceInfo sri = Application.GetResourceStream(new Uri(v.Source, UriKind.RelativeOrAbsolute)); if (null == sri) { continue; } Assembly ass = v.Load(sri.Stream); DynLoadingAssemblyDict.Add(v.Source, ass); } } } /// <summary> /// 根据名称获取程序集 /// </summary> /// <param name="assemblyName"></param> /// <returns></returns> public static Assembly AssemblyByName(string assemblyName) { if (DynLoadingAssemblyDict.ContainsKey(assemblyName)) { return DynLoadingAssemblyDict[assemblyName]; } return null; }
posted on 2012-01-25 23:28 小土泥 阅读(1715) 评论(0) 编辑 收藏 举报