反思问题升级.net 3.5到4.5

时间:2015-08-20 07:31:29

标签: .net vb.net .net-4.5

我正在努力将.net应用程序从> net version 3.5迁移到4.5。 我刚刚开始工作,将visual studio中的目标运行时更改为4.5。 我的开发机器已经安装了> net 4.6。

现在我的代码看起来像这样,

    Dim privateConstructors As System.Reflection.BindingFlags = System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.NonPublic
    Dim safeRegistryHandleType As System.Type = GetType(Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid).Assembly.GetType("Microsoft.Win32.SafeHandles.SafeRegistryHandle")
    Dim safeRegistryHandleConstructorTypes As System.Type() = {GetType(System.IntPtr), GetType(System.Boolean)}
    Dim safeRegistryHandleConstructor As System.Reflection.ConstructorInfo = safeRegistryHandleType.GetConstructor(privateConstructors, Nothing, safeRegistryHandleConstructorTypes, Nothing)
    Dim safeHandle As System.Object = safeRegistryHandleConstructor.Invoke(New System.Object() {hKey, ownsHandle})

    Dim registryKeyType As System.Type = GetType(Microsoft.Win32.RegistryKey)
    Dim registryKeyConstructorTypes As System.Type() = {safeRegistryHandleType, GetType(System.Boolean)}
    Dim registryKeyConstructor As System.Reflection.ConstructorInfo = registryKeyType.GetConstructor(privateConstructors, Nothing, registryKeyConstructorTypes, Nothing)
    Dim result As Microsoft.Win32.RegistryKey = DirectCast(registryKeyConstructor.Invoke(New Object() {safeHandle, writable}), Microsoft.Win32.RegistryKey)

现在,当代码与.net 3.5一起运行时,这可以正常工作。 我用.net 4.5运行它的那一刻它给出了一个异常(nullpointer) 这是因为safeRegistryHandleConstructor变量在第二个最后一行的末尾设置为空。 我不明白为什么会发生这种情况。 我所看到的API没有在3.5和4.5之间发生变化!

请指教。我是.net。

的新手

编辑:

在更高的层面上,我正在尝试这样做,

Dim regkey As Microsoft.Win32.RegistryKey = Nothing
regkey = OpenSubKey(Microsoft.Win32.Registry.LocalMachine, AppConstant.REGISTRY_PATH, False, RegWow64Options.KEY_WOW64_64KEY)

在此之后,我将从regkey获得单独的条目。 你可以建议一些其他方式而不是反思来获得密钥吗?

编辑2:

BindingFlags.NonPublic更改为BindingFlags.Public后,执行错误消失,但在最后一行之后出现相同的错误。它表示registryKeyConstructor设置为空,并报告错误。

0 个答案:

没有答案