是使用Assembly.Load静态引用还是动态引用?

时间:2010-08-09 20:15:23

标签: c# assembly-loading

使用它们有什么含义和建议的场景?

3 个答案:

答案 0 :(得分:10)

Assembly.Load是动态引用,因为您在运行时动态加载外部DLL。您可以考虑使用静态引用,就像添加对.NET项目的引用并使用该引用构建项目一样。

编辑:

来自MSDN Doc:

  

编译器记录静态引用   在程序集清单的元数据中   建立时间。

嗯,我自己也不确定。我现在就在这里保留我的答案,希望得到更多的更正评论或者看到更好的答案。

答案 1 :(得分:2)

参考:

  

有什么影响和   建议使用哪种情景?

通常,如果我使用Assembly.Load(),那是因为我正在开发一个可插拔系统。动态引用有助于包含不一定构成我的构建的程序集。

从动态加载的程序集中实例化类型至少需要一些反射。通过确保动态加载的类型实现一些已知的接口或基类(来自静态加载的程序集),可以减轻必要的反射量。

简而言之,使用动态加载的程序集需要做很多工作;但是,通过允许用户开发插件,这样做可以使应用程序更加灵活。只需权衡动态引用的预期灵活性(可能不是必需的),以及Visual Studio对静态引用的设计时支持。

如果构建插件架构是在自己的AppDomain中加载程序集,那么值得考虑的做法。这样做可以让您对可能不完全信任的程序集的安全权限进行更细粒度的控制,并提供可以在运行时卸载程序集的额外好处。就个人而言,我发现与AppDomains合作是劳动密集型的;但是,如果需要获益,最好知道AppDomains就在那里。

答案 2 :(得分:0)

MSDN(http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx)中所述的动态引用引用动态引用作为加载引用,其中只有运行时必须搜索正在加载的程序集的足够信息。对于静态引用,程序集的位置(GAC,应用程序指令等)是已知的,并且仍然可以使用Assembly.load来完成。

相关问题