Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# .net 4部分信任来自GAC的程序集_C#_.net_Security_Appdomain - Fatal编程技术网

C# .net 4部分信任来自GAC的程序集

C# .net 4部分信任来自GAC的程序集,c#,.net,security,appdomain,C#,.net,Security,Appdomain,我正在尝试创建一个沙盒应用程序域。为了实现这一点,我使用了AppDomain.CreateDomain,给出了要沙盒的DLL的路径 但是,我注意到,如果该DLL位于GAC中,则该DLL是完全受信任的,因此,如果其中有PermissionSet.Assert,则它可以接收不受限制的访问 所以,我想知道是否有办法 强制DLL从路径加载,而不是从GAC加载,因此它将被部分信任 或-将GAC中的某个DLL标记为部分受信任 谢谢 如果两个程序集都已完全签名,则CLR将使用GAC中的程序集。如果将目标路径中

我正在尝试创建一个沙盒应用程序域。为了实现这一点,我使用了
AppDomain.CreateDomain
,给出了要沙盒的DLL的路径

但是,我注意到,如果该DLL位于GAC中,则该DLL是完全受信任的,因此,如果其中有
PermissionSet.Assert,则它可以接收不受限制的访问

所以,我想知道是否有办法

  • 强制DLL从路径加载,而不是从GAC加载,因此它将被部分信任
  • 或-将GAC中的某个DLL标记为部分受信任

  • 谢谢

    如果两个程序集都已完全签名,则CLR将使用GAC中的程序集。如果将目标路径中的一个保留为未签名,CLR将使用该路径

    如果这不是一个选项,那么您需要使用其中一个CreateDomain覆盖,您可以在其中定义程序集将需要的权限集。有关覆盖的详细信息可在此处找到:

    用法示例取自

    无法再访问DaveCenter()链接。链接是否有镜像?
    static void RunInPartialTrust()
    {
        AppDomainSetup setup = new AppDomainSetup
        {
            ApplicationBase = Environment.CurrentDirectory
        };
    
        PermissionSet permissions = new PermissionSet(null);
        permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
        permissions.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.RestrictedMemberAccess));
        AppDomain appDomain = AppDomain.CreateDomain(
            "Partial Trust AppDomain",
            null,
            setup,
            permissions
        );
    
        Program p = (Program)appDomain.CreateInstanceAndUnwrap(
            typeof(Program).Assembly.FullName,
            typeof(Program).FullName
        );
    
        p.PartialTrustMain();
    }