用Assembly.LoadFrom(String)替换Assembly.LoadFrom(String,Evidence)调用 - .NET 4

时间:2011-07-26 11:39:13

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

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

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

正如它在微软(MSDN)中所说的那样:

  

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

我不熟悉Evidence课程。从呼叫中删除Evidence参数的风险是什么? Evidence参数是否必要时的实际情况是什么?

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

证据参数用于提供代码访问安全性(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. 要限制程序集的权限,请删除在程序集的默认证据下已授予的权限。
  3. 对于#1,您可能在.NET 4.0中无所事事,因为默认情况下所有代码都将以不受限制的CAS权限(又名“完全信任”)运行。对于#2,建议的方法是使用sandboxed appdomain