Reflection 获取有关解决方案中存在的程序集的信息

Reflection 获取有关解决方案中存在的程序集的信息,reflection,assembly-loading,Reflection,Assembly Loading,场景:我想在运行时加载解决方案中存在的程序集 belo代码将无法工作,因为它不在Cuurent应用程序域中 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); 此外,如果我将在引用的程序集中搜索,则也无法找到它,因为它未被引用。因此,以下代码也将不起作用: public static IEnumerable<Assembly> GetAssemblies() { var list

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

belo代码将无法工作,因为它不在Cuurent应用程序域中

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

    }
公共静态IEnumerable getAssemblys()
{
var list=新列表();
var stack=新堆栈();
stack.Push(Assembly.GetEntryAssembly());
做
{
var asm=stack.Pop();
收益率;
foreach(asm.getReferencedAssemblys()中的变量引用)
如果(!list.Contains(reference.FullName))
{
堆栈.推送(组装.加载(参考));
列表.添加(参考.全名);
}
}
而(stack.Count>0);
}
你有什么建议吗?

,然后在app.config中指定。调用,从app.config传递程序集名称


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

您是说要动态加载程序集吗?如果是这样,程序集将不会出现在AppDomain中。您可以使用Assembly.Load()从磁盘加载DLL文件。Assembly.Load()需要一个路径,我不想硬编码代码中的任何内容。您能告诉我如何在不指定路径的情况下实现这一点吗?如果不指定路径,它将不知道文件位于何处。如果没有硬编码,您可以将位置放在App.config文件中,因此DLL位置是流动的。但是在App.config中,我还需要输入硬代码路径,我认为这在其他机器中不起作用。如果我在这里错了,请纠正我。也许你可以澄清你到底想做什么?