Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RuntimeHelpers.PrepareDelegate的安全透明替代方案_C#_.net_Code Access Security - Fatal编程技术网

C# RuntimeHelpers.PrepareDelegate的安全透明替代方案

C# RuntimeHelpers.PrepareDelegate的安全透明替代方案,c#,.net,code-access-security,C#,.net,Code Access Security,我需要提前预JIT一些发出的委托,并尝试为此使用,但此方法标记为SecurityCritical属性。我的程序集被标记为AllowPartiallyTrustedCallers属性,因此不能调用任何安全关键代码 为什么PrepareDelegate和preparedemethod安全性至关重要,我在预JITting这些代理时有哪些备选方案?如MSDN文章所述: 如何纠正违规行为 要修复违反此规则的情况,请执行以下操作之一: 使用SecurityCriticalAttribute属性标记使用安全

我需要提前预JIT一些发出的委托,并尝试为此使用,但此方法标记为
SecurityCritical
属性。我的程序集被标记为
AllowPartiallyTrustedCallers
属性,因此不能调用任何安全关键代码


为什么
PrepareDelegate
preparedemethod
安全性至关重要,我在预JITting这些代理时有哪些备选方案?

如MSDN文章所述:

如何纠正违规行为

要修复违反此规则的情况,请执行以下操作之一:

  • 使用
    SecurityCriticalAttribute
    属性标记使用安全关键代码的代码元素

    -或-

  • 从标记为安全关键的代码元素中删除
    SecurityCriticalAttribute
    属性,改为标记它们 使用安全性安全关键属性
    SecurityTransparentAttribute
    属性

您必须使用
[SecuritySafeCriticalAttribute]
标记进行预JIT的方法。这就是它的作用:

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]
标记进行预JIT的方法?进一步说明:您可以添加该SecuritySafeCritical属性,因为程序集是APTCA。如果它是透明的,那么您就不能拥有安全的关键代码。