关于Assembly的动态加载
2004-06-07 16:52
357 查看
Assembly的加载通常是由CLR隐式进行的,CLR的原则是只有用到时才加载,也就是说很多时候在应用程序运行过程中还要进行加载Assembly的动作,如果希望显式的在可预期的时候动态加载Assembly, 可以采用以下方法:
Assembly的动态加载有两种主要形式,都是使用Assembly类的静态方法:
* Assembly.LoadFrom(FilePath|URI): 直接指定Assembly的文件路径或URI,调用Assembly Loader;
* Assembly.Load(FullQualifiedAssemblyName):需要输入Assembly的全名称(包括name, version, culture, public key token),该种加载调用Assembly resolver,并基于以下策略来定位相应的Assembly:
1. Assembly是否有public key,如果没有直接到Probing (step 5),如果有则应用version policy
2. 基于version policy,也就是.config文件种的assemblyBinding元素下assembly定位的信息;
3. 如果无法通过version policy定位,则在GAC种查找;
4. 如果无法在GAC中定位assembly,codeBase来定位,如果通过codeBase找到的文件不匹配,则失败;
5. 如果无法通过codeBase定位,则通过probing方式来查找,如果找到的文件不匹配,则失败。
6. 在第一步之前应该还可以在DEVPATH系统变量中查找,但一般这只是给开发者用的而不是在部署时用的,所以可以忽略不计。
以上两种方式表面上类似,但一个是调用Loader,一个调用Resolver,实际差别很大。
Assembly的动态加载有两种主要形式,都是使用Assembly类的静态方法:
* Assembly.LoadFrom(FilePath|URI): 直接指定Assembly的文件路径或URI,调用Assembly Loader;
* Assembly.Load(FullQualifiedAssemblyName):需要输入Assembly的全名称(包括name, version, culture, public key token),该种加载调用Assembly resolver,并基于以下策略来定位相应的Assembly:
1. Assembly是否有public key,如果没有直接到Probing (step 5),如果有则应用version policy
2. 基于version policy,也就是.config文件种的assemblyBinding元素下assembly定位的信息;
3. 如果无法通过version policy定位,则在GAC种查找;
4. 如果无法在GAC中定位assembly,codeBase来定位,如果通过codeBase找到的文件不匹配,则失败;
5. 如果无法通过codeBase定位,则通过probing方式来查找,如果找到的文件不匹配,则失败。
6. 在第一步之前应该还可以在DEVPATH系统变量中查找,但一般这只是给开发者用的而不是在部署时用的,所以可以忽略不计。
以上两种方式表面上类似,但一个是调用Loader,一个调用Resolver,实际差别很大。
相关文章推荐
- Android关于分包方案、插件化动态加载APK或DEX 以及热补丁资料总结
- 关于C#如何动态加载程序并调用其中某个类的方法
- 关于NGUI的动态加载后的刷新显示问题,解决办法!!
- 关于unity中Assetbundle动态加载
- 关于资源动态加载的一次有趣优化[原创]
- 关于动态加载控件 事件触发的问题
- 关于ASP.NET动态加载Master页面
- 关于页面动态加载控件当页面回发后控件消失的问题
- 关于Unity3D中Resources动态加载NGUI图片的方法
- 关于c#动态加载程序集的一些注意事项
- C#中可以通过Assembly来动态加载DLL
- 关于Unity3D中Resources动态加载NGUI图片的方法
- 关于C#中PictureBox加载动态GIF所出现的BUG以及解决方法
- 关于apk加壳之动态加载dex文件
- 关于jQuery的getScript()实现动态js加载,原理,实现过程是怎么样的?
- 关于Android中Fragment静态和动态加载的方法
- C#动态加载/卸载Assembly的解决方案
- c++关于动态加载Dll.
- 关于LayoutInflater动态加载View到AbsListView和ViewGroup之间的区别
- 关于动态加载的数据实现单选可取消的效果 并且附带 ScrollView滑动到指定位置