简介

在插件类型的应用开发中,我们可能会在程序中动态加载一个assembly文件,创建其中的类对象并使用。
这时,就涉及到了CAS(code access security)和信任沙盒。
一般,我们的应用开发中,使用其他的库时,会在代码中直接引入,并编码使用。但如果我们不是在编译时引用,而是在应用时动态加载该库文件,解析出class和类型,并进一步使用。这时,库文件可能被篡改,导致错误和安全。那么如果需要后期加载,在DotNet要求我们提供我们的Trust配置。

配置

在应用的配置中,添加loadFromRemoteSources项;

这个配置如下层次:

<configuration><runtime><loadFromRemoteSources enabled="true"/></runtime>
</configuration>

loadFromRemoteSources说明

在.Net Framework 3.5及之前的版本中,有赖于你的执行区域zone,你的应用如果加载了外部的库assembly,你的库可能执行在一个部分信任(partial trust)里。比如我们加载一个web网络上的assembly,那么气被加载到一个internet zone区域执行,并被赋予Internet的允许集合–其在一个internet的沙盒中执行。 缺省设置下,远程库文件不允许在.net framework 4版本及更新版本中,不允许执行。如果要执行,要么设置完全信任,要么创建一个队员的沙盒AppDomain来执行。

在.Net Framework 4及以后的版本中,你要么显式地为该assembly创建一个沙盒,要么完全地信任并执行。否则,会抛出异常。

在应用配置中的loadFromRemoteSources元素,用来指定在以前版本的.Net framework 中部分信任的库文件,在版本4或更新的版本中,是否使用完全信任模式。设置为true,则使用完全信任模式。

  • 但在4.5版本中,本地网络中的assembly文件,缺省模式下时完全信任执行的。
  • 可以使用**Assembly.UnsafeLoadFrom()**来加载assembly,这会跳过一些安全检测,也会把来自网络的assembly看做本地的assembly。 OS会把来自网络的assembly标示为internet assembly,即使已经下载保存在本地了。

其他说明

缺省下,在.Net Framework 4级以后的版本,CAS 策略是disabled,也只有在CAS为disabled时, loadFromRemoteSources 设置为true才能有效。

抛出异常的情况

如果loadFromRemoteSources没有设置为true,在下面的情形下,会有异常抛出:

  • 使用的assembly不是在MyComputer的zone中。
  • 在.Net Framework 3.5版本中,当前应用的domain的沙盒行为和assembly的行为不同。此时CAS 策略要关闭,而且当前的domain没有在沙盒中。

另外的解决方法:

  • 使用Assembly.UnsafeLoadFrom
Assembly a = Assembly.UnsafeLoadFrom(strDllName);

-使用Assembly a = Assembly.Load(byte[] codeBytes)

byte[] assemblyBuffer = File.ReadAllBytes(strDllFileName);
Assembly a = Assembly.Load(assemblyBuffer);

在.Net framework中动态加载Assembly的loadFromRemoteSources配置相关推荐

  1. python requests 动态加载_Python获取网页中动态加载的数据

    Python获取网页中动态加载的数据 0.XHR 是什么? XHR是 XMLHttpRequest 对象.既Ajax功能实现所依赖的对象,在JQuery中的Ajax是对 XHR的封装. 1.查看异步加 ...

  2. 在VC中动态加载ODBC的方法

    在VC中动态加载ODBC的方法     在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较 ...

  3. Node.js项目中动态加载环境变量配置

    NODE_MODULES:项目中动态加载环境变量配置 开始 在平时的 Node.js 项目开发中,我们需要在项目中添加各种各样的配置:服务端口.服务地址.图片上传.数据库.Redis 等等. 通常情况 ...

  4. bpl文件java,在LoadLibrary中动态加载BPL失败

    我想在Delphi 10 Seattle(Update 1)或Delphi 10.1 Berlin项目(Enterprise版本)中动态加载BPL模块 . 但LoadPackage函数失败并显示消息( ...

  5. Java中动态加载字节码的方法 (持续补充)

    文章目录 Java中动态加载字节码的方法 1.利用 URLClassLoader 加载远程class文件 2.利用 ClassLoader#defineClass 直接加载字节码 2.1 类加载 - ...

  6. C#中动态加载和卸载DLL

    在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载.在C#中我们也能使用Assembly.LoadFile实 ...

  7. C#中动态加载卸载类库

    网上现有很多的文章是介绍怎样开发插件化的框架的,大部分无非是用Assembly.load等方法,动态加载类库,但这种方法有个缺点,就是没有办法卸载,因为net中就没有提供卸载assembly的方法,还 ...

  8. uni中动态加载class_SpringBoot中使用LoadTimeWeaving技术实现AOP功能

    1. 关于LoadTimeWeaving 1.1 LTW与不同的切面织入时机 AOP--面向切面编程,通过为目标类织入切面的方式,实现对目标类功能的增强.按切面被织如到目标类中的时间划分,主要有以下几 ...

  9. javascript中动态加载js、vbs脚本或者css样式表

    目录:DynamicLoad类简介.属性.方法.事件.示例.下载. DynamicLoad类简介 本文将为您介绍一个在javascript中可以动态加载js.vbs脚本和css样式表的DynamicL ...

最新文章

  1. docker 配置使用宿主机的GPU(ubuntu16.04+cuda10.0+cudnn7)
  2. 对于并列的TextField实现同步控制
  3. try to navigate from button to line item page
  4. 深入浅出NIO之Selector实现原理
  5. 关于Java类加载双亲委派机制的思考(附面试题)
  6. js防篡改对象之不可扩展对象
  7. 匹配除中文和空格意外的正则写法
  8. 60-127-040-源码-connector-Flink 1.9.0 with Hive
  9. Java数据结构——二叉树
  10. BT种子下载软件uTorrent Pro v3.5.5.45972
  11. 27 | 风控系统:如何从海量业务数据中,挖掘黑灰产?
  12. 简介 - 有哪些冗余技术?我应该用哪个,注意什么?
  13. ota升级 rk3399_RK3399 的ota升级方法
  14. 读书笔记之《大型分布式网站架构设计与实践》
  15. 倒看北斗星---念霍去病
  16. JavaScript解析json格式数据简单示例
  17. Linux数据库管理与应用
  18. 8-四平方和定理(拉格朗日定理)
  19. python快速入门精讲_Python快速入门精讲
  20. 呵护身体10个部位的最佳食物!

热门文章

  1. Envoy Proxy构建控制平面指南
  2. Facebook开源Horizon:首个用于大规模产品和服务的强化学习平台
  3. 如何开启一个Django项目
  4. 技术分享连载(六十四)
  5. MVC + AJAX请求失败的问题
  6. python画五角星代码_008-python绘制五个五角星
  7. java计算器简单吗,java简单计算器
  8. influxdb 客户端工具_性能工具之Jmeter小白入门系列之六
  9. python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题
  10. 计算机指令系统课件,计算机组成原理课件05指令系统.ppt