在运行时请求程序集的 CAS 安全设置 - C# .NET 2.0

Requesting the CAS Security Settings for an assembly at runtime - C# .NET 2.0

如何使用 C# .NET 2.0 (VS 2005) 在 运行 时检查加载程序集的安全设置?我正在加载程序集:

程序集外部程序集 = Assembly.LoadFrom(路径);

可能是本地路径或远程 UNC 路径(网络路径)。

如果是远程网络路径,用户应将CAS设置为"fulltrust"和caspol.exe,正确设置为运行应用程序。如果 CAS 配置正确,我如何在 运行 时检查它?

我看到,.NET 4.0 提供了一个 "IsFullyTrusted" 属性 用于此目的。

不幸的是,我的项目仍然必须使用 VS 2005。

问候 汤姆

试试这个:

public static bool IsFullyTrusted()
{
    try
    {
        new PermissionSet(PermissionState.Unrestricted).Demand();
        return true;
    }
    catch (SecurityException)
    {
        return false;
    }
}

在我做了一些功课并深入研究了代码访问安全之后,我希望到目前为止我已经找到了适合我的解决方案。我只需要两行代码:

Assembly externalAssembly = Assembly.LoadFrom(path);

// Retrieve the permission set of the external assembly
PermissionSet permSet = SecurityManager.ResolvePolicy(externalAssembly.Evidence);
if(!permSet.IsUnrestricted())
{
    throw new Exception("Assembly is not fully trusted!");
}

如果程序集具有不受限制的权限,则 IsUnrestricted() returns 为真,并且 permSet 中的权限集合为空。

如果受到限制,则返回 false,并且 permSet 列出由 .NET 策略解析分配给程序集的权限。

希望这对以后的人有所帮助

汤姆