获取有关解决方案中存在的装配的信息

时间:2012-10-11 10:17:59

标签: reflection assembly-loading

场景:我想在运行时加载程序集,该程序集存在于解决方案中。

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);

    }

你们有什么建议吗?

1 个答案:

答案 0 :(得分:0)

Sign your assembly,然后在您的app.config中指定fully qualified assembly name。调用Assembly.Load(string),从app.config传递程序集名称。

注意:您尝试加载的程序集必须位于运行时可以找到它的位置。您最好的选择是将其放入Global Assembly Cache,或确保它与执行程序集位于同一文件夹中。