有的时候在进行反射操作时经常可能
所射的类不是能过下面两种情况所能创建
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;
}