【问题标题】:Replace Assembly.LoadFrom(String, Evidence) call with Assembly.LoadFrom(String) - .NET 4将 Assembly.LoadFrom(String, Evidence) 调用替换为 Assembly.LoadFrom(String) - .NET 4
【发布时间】:2011-07-26 11:39:12
【问题描述】:

我必须将一些旧的.NET 2 代码移动到.NET 4 项目。它有下一行:

`return Assembly.LoadFrom(filePath, Assembly.GetExecutingAssembly().Evidence);`

正如微软 (MSDN) 所说:

注意:此 API 现在已过时。非过时的替代方法是 LoadFrom(String)。

我不熟悉Evidence 类。从调用中删除 Evidence 参数有什么风险?需要Evidence参数的真实情况是什么?

提前感谢您的帮助

【问题讨论】:

    标签: security c#-4.0 c#-2.0 code-access-security assembly-loading


    【解决方案1】:

    evidence 参数用于提供代码访问安全 (CAS) 策略机制在决定向正在加载的程序集授予哪些 CAS 权限时可以使用的数据。但是,在 .NET 4.0 中,“裸”CLR 不再使用 CAS 策略(http://blogs.msdn.com/b/shawnfa/archive/2010/02/24/so-is-cas-dead-in-net-4-or-what.aspxhttp://blogs.msdn.com/b/shawnfa/archive/2009/06/12/clr-v4-security-policy-roundup.aspx),因此在 API 中使用证据已被弃用。通常只有两个原因可能会在针对早期 .NET 版本的代码中的 LoadFrom 调用中提供证据:

    1. 允许程序集以比其他方式授予的权限更多的权限运行,或
    2. 为了限制程序集的权限,删除在程序集的默认证据下本应授予的权限。

    对于 #1,您可能在 .NET 4.0 中无事可做,因为默认情况下,所有代码都将以不受限制的 CAS 权限(也称为“完全信任”)运行。对于#2,推荐的方法是使用sandboxed appdomain

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多