1

当我使用自定义 AppDomain 和 PermissionSet 时,我在 IronPython 中遇到了一个奇怪的问题。由于某种原因,当 PermissionSet 不是 Unrestricted 并且我构建面向 x64 平台时,将双精度转换为浮点数无法正常工作。当我针对 x86 平台构建或使用 PermissionState.Unrestricted 时,问题就消失了。我也尝试从 PermissionState.None 开始,并将此处列出的每个权限添加为 Unrestricted,但它仍然不起作用。我将 IronPython 2.7.4 用于 .NET 4.0。下面是一个重现问题的简单程序。知道这里发生了什么吗?

using IronPython.Hosting;
using System;
using System.Security;
using System.Security.Permissions;

namespace TestApp
{
    public class Program
    {
        private const string Test = @"
from System import Console
num = float(10.0)
Console.WriteLine(num)
";

        public static void Main(string[] args)
        {
            // Prints 10 always
            var permissionSet1 = new PermissionSet(PermissionState.Unrestricted);
            RunTest(permissionSet1);

            // Prints 0 on x64 builds
            var permissionSet2 = new PermissionSet(PermissionState.None);
            permissionSet2.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
            RunTest(permissionSet2);

            Console.ReadKey();
        }

        private static void RunTest(PermissionSet permissionSet)
        {
            var appDomainSetup = new AppDomainSetup { ApplicationBase = "." };
            var evidence = AppDomain.CurrentDomain.Evidence;
            var appDomain = AppDomain.CreateDomain("ScriptingSandbox", evidence, appDomainSetup, permissionSet);
            var scriptEngine = Python.CreateEngine(appDomain);
            var scriptSource = scriptEngine.CreateScriptSourceFromString(Test);
            scriptSource.Execute();
        }
    }
}
4

0 回答 0