BuildManager.AddReferencedAssembly究竟做了什么?

时间:2015-05-21 09:33:54

标签: c# asp.net-mvc

MSDN说它"将一个程序集添加到应用程序的一组引用程序集中。"。但怎么样?效果恰好发生的地方?是否有任何可引用的/可引用程序集列表可供访问并手动添加到它们中?

实际上,如果我们在app启动后调用此方法,则抛出

  

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

确定。现在我不想用它。我想知道究竟做了什么,然后我在我的自定义函数中模拟。 感谢

1 个答案:

答案 0 :(得分:3)

这是一个很好的想法we have the source code

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