RuntimeHelpers.PrepareDelegate的安全透明备选方案
我需要提前预先发送一些发出的代表,并尝试使用RuntimeHelpers.PrepareDelegate进行此操作,但此方法标记为SecurityCritical
属性。我的程序集标有AllowPartiallyTrustedCallers
属性,因此不能调用任何安全关键代码。RuntimeHelpers.PrepareDelegate的安全透明备选方案
为什么PrepareDelegate
和PrepareMethod
安全至关重要,在替代这些代表之前我有什么替代方案?
由于MSDN文章CA2140: Transparent code must not reference security critical items中引用:
如何解决冲突
要修复与该规则的冲突,请执行下列操作之一:
马克使用安全关键代码的代码元素与
SecurityCriticalAttribute
属性- 或 -
从被标记为安全关键的,并且代替标记它们 与
SecuritySafeCriticalAttribute
或SecurityTransparentAttribute
属性的代码元素取出SecurityCriticalAttribute
属性。
你必须标记,做预JIT编译与[SecuritySafeCriticalAttribute]
的方法。在这里它是在行动:
using System;
using System.Runtime.CompilerServices;
using System.Reflection;
using System.Security;
[assembly: AllowPartiallyTrustedCallers]
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
PreJIT();
}
[SecuritySafeCritical]
static void PreJIT()
{
RuntimeHelpers.PrepareMethod(
System.Reflection.Emit.DynamicMethod.GetCurrentMethod()
.MethodHandle);
}
}
}
进一步说明:您可以添加SecuritySafeCritical属性*,因为*程序集是APTCA。如果它是透明的,那么你将无法获得安全的关键代码。 – fsimonazzi 2013-03-14 18:36:52
您是否尝试过标记用'[SecuritySafeCritical]'执行pre-JITing的方法? – 2013-02-19 11:59:53