BuildManager.adpreferencedassembly完全正确

本文关键字:完全正确 adpreferencedassembly BuildManager | 更新日期: 2023-09-27 17:50:18

MSDN表示"将程序集添加到应用程序的引用程序集"。但如何?影响究竟发生在哪里?是否有任何可枚举/列表的引用程序集访问和手动添加到它们?

实际上如果我们在应用启动后调用这个方法它会抛出

"此方法只能在应用程序的预启动期间调用初始化阶段。使用PreApplicationStartMethodAttribute to声明将在该阶段调用的方法。"

ok。现在我不想用它了。我想知道它到底做了什么,然后在我的自定义函数中进行模拟。由于

BuildManager.adpreferencedassembly完全正确

还好我们有源代码:

public static void AddReferencedAssembly(Assembly assembly) 
{
    if (assembly == null) 
    {
        throw new ArgumentNullException("assembly");
    }
    ThrowIfPreAppStartNotRunning();
    s_dynamicallyAddedReferencedAssembly.Add(assembly);
}

s_dynamicallyAddedReferencedAssembly.Add是编译时要考虑的动态添加程序集的List<Assembly>

还有一个叫做GetReferencedAssembiles的内部方法,它获取项目的所有程序集,迭代并将所有动态添加的程序集添加到引用程序集列表中:

internal static ICollection GetReferencedAssemblies(CompilationSection compConfig,
                                                    int removeIndex) 
{
    // shorted for brevity
    foreach (Assembly assembly in s_dynamicallyAddedReferencedAssembly)
    {
        referencedAssemblies.Add(assembly);
    }
}