【问题标题】:Constructor on type 'Microsoft.Win32.SafeHandles.SafeRegistryHandle' not found找不到类型“Microsoft.Win32.SafeHandles.SafeRegistryHandle”的构造函数
【发布时间】:2011-11-23 21:43:32
【问题描述】:

在将 Fax.NET 项目升级到 .NET 4 客户端配置文件后,我得到了这个异常:

MissingMethodException:
Constructor on type 'Microsoft.Win32.SafeHandles.SafeRegistryHandle' not found.

此函数的返回语句发生异常:

private static SafeHandle CreateRegistrySafeHandle(IntPtr handle)
{
    Type type;

    type = typeof(SafeHandle).Assembly.GetType("Microsoft.Win32.SafeHandles.SafeRegistryHandle");

    return (SafeHandle)Activator.CreateInstance(
        type,
        BindingFlags.Instance | BindingFlags.NonPublic,
        null,
        new object[] { handle, true },
        null);
}

这个异常有什么解决办法?

【问题讨论】:

    标签: c# .net exception


    【解决方案1】:

    自 .NET 4 起,SafeRegistryHandle Constructor 是公共的 (BindingFlags.Public),而不是内部或私有的 (BindingFlags.NonPublic)。

    如果您可以访问源代码,则可以将方法替换为

    private static SafeHandle CreateRegistrySafeHandle(IntPtr handle)
    {
        return new SafeRegistryHandle(handle, true);
    }
    

    【讨论】:

    • 我改成BindingFlags.Public但还是有这个异常!
    • BindingFlags.Instance | BindingFlags.NonPublic 更改为BindingFlags.Instance | BindingFlags.Public 后,它可以在我的机器上运行。
    • 对不起!我的错! RegistryKey: Constructor on type 'Microsoft.Win32.RegistryKey' not found. 发生了另一个相同的异常:P
    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多