You need to enable JavaScript to run this app. .NET混合框架下调用GetAccessControl报MissingMethodException异常排查
优惠活动
大模型
产品
解决方案
定价
更多

.NET混合框架下调用GetAccessControl报MissingMethodException异常排查

根因分析

该报错由混合框架调用的运行时类型不匹配导致:
DirectoryInfo.GetAccessControl()实例方法是.NET Framework专属API,.NET Core/.NET 5+ 运行时下的DirectoryInfo类型不包含该实例方法。即使权限逻辑封装在.NET Framework 4.8类库中,由于入口主项目为.NET Core,运行时会优先加载.NET Core版本的基础类库实现,因此触发方法找不到的异常。

解决方案

方案1:修改权限逻辑适配.NET Core运行时(推荐,无需调整现有框架架构)

  1. 给.NET Framework类库和.NET Core主项目都安装System.Security.AccessControl NuGet包,该包提供了跨.NET框架版本兼容的ACL操作API。
  2. 调整SetFullPermission方法,确保引入对应命名空间后调用扩展方法实现相同逻辑,修改后代码如下:
using System.Security.AccessControl; // 必须引入该命名空间才可调用跨框架的ACL扩展方法

public static void SetFullPermission(string path, string domainAccount)
{
    NTAccount ntaccount = new NTAccount("my_domain", domainAccount);
    DirectoryInfo dirInfo = new DirectoryInfo(path);
    // 此处实际调用NuGet包提供的扩展方法,兼容.NET Framework和.NET Core运行时
    DirectorySecurity ds = dirInfo.GetAccessControl();
    ds.AddAccessRule(new FileSystemAccessRule(
        ntaccount, 
        FileSystemRights.FullControl, 
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
        PropagationFlags.None, 
        AccessControlType.Allow));
    ds.SetAccessRuleProtection(true, false); // 禁用继承并清除所有继承权限
    dirInfo.SetAccessControl(ds);
}

方案2:统一框架版本

如果业务允许调整主项目配置,直接将.NET Core主项目的目标框架改为.NET Framework 4.8,与类库框架保持一致,运行时会加载.NET Framework版本的基础类库,无需修改业务代码即可正常运行。

注意事项

修改代码后需确认NetworkConnection传递的管理员账号对目标网络共享目录拥有修改安全描述符的权限,否则会触发权限不足的报错。


内容的提问来源于stack exchange,提问作者julian bechtold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 13:09:02