场景:我想在运行时加载程序集,该程序集存在于解决方案中。
belo代码不起作用,因为Cuurent App Domain中没有。
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
此外,如果我将在引用的程序集中进行搜索,那么也无法找到它,因为它未被引用。所以下面的代码也不起作用:
public static IEnumerable<Assembly> GetAssemblies()
{
var list = new List<string>();
var stack = new Stack<Assembly>();
stack.Push(Assembly.GetEntryAssembly());
do
{
var asm = stack.Pop();
yield return asm;
foreach (var reference in asm.GetReferencedAssemblies())
if (!list.Contains(reference.FullName))
{
stack.Push(Assembly.Load(reference));
list.Add(reference.FullName);
}
}
while (stack.Count > 0);
}
你们有什么建议吗?
答案 0 :(得分:0)
Sign your assembly,然后在您的app.config中指定fully qualified assembly name。调用Assembly.Load(string),从app.config传递程序集名称。
注意:您尝试加载的程序集必须位于运行时可以找到它的位置。您最好的选择是将其放入Global Assembly Cache,或确保它与执行程序集位于同一文件夹中。