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

本文关键字:GAC 程序集 信任 net | 更新日期: 2023-09-27 18:36:20

我正在尝试创建一个沙盒应用程序域。为此,我正在使用 AppDomain.CreateDomain ,提供要沙盒化的 DLL 的路径。

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

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

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

谢谢!

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

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

如果这不是一个选项,则需要使用其中一个 CreateDomain 重写,您可以在其中定义程序集所需的权限集。有关覆盖的更多信息,请参阅:http://msdn.microsoft.com/en-us/library/ms130766.aspx。

取自 http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust-sandbox/的用法示例...

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();
}