我有一些代码使用pinvoke调用本地win32。自从我升级到.NET 4后,这段代码开始抛出MethodAccessException异常,显示:
“Tek.Audio.Midi.MidiDevice.GetDevices()”方法的安全透明性尝试通过“Tek.Native.Windows.Multimedia.midiInGetNumDevs()”方法调用本机代码失败。必须是安全关键或安全安全关键的方法才能调用本机代码。
以下是发生的情况:
可执行程序集的Program.Main方法调用library1公共静态Tet.Audio.Midi.MidiDevice.GetDevices()。
Library1的GetDevices()调用library2的public static pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs()(是的,不好的做法,但不管怎样)。
涉及的类、方法和程序集上唯一与安全相关的属性是library1上的AllowPartiallyTrustedCallers,而我甚至不知道为什么会这样。
我很惭愧地承认,我对.NET中的安全性相当无知。我该怎么做才能防止这个异常?还有,在这里,有什么好的文章可以让我开始了解.NET安全性吗?
“Tek.Audio.Midi.MidiDevice.GetDevices()”方法的安全透明性尝试通过“Tek.Native.Windows.Multimedia.midiInGetNumDevs()”方法调用本机代码失败。必须是安全关键或安全安全关键的方法才能调用本机代码。
以下是发生的情况:
可执行程序集的Program.Main方法调用library1公共静态Tet.Audio.Midi.MidiDevice.GetDevices()。
Library1的GetDevices()调用library2的public static pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs()(是的,不好的做法,但不管怎样)。
涉及的类、方法和程序集上唯一与安全相关的属性是library1上的AllowPartiallyTrustedCallers,而我甚至不知道为什么会这样。
我很惭愧地承认,我对.NET中的安全性相当无知。我该怎么做才能防止这个异常?还有,在这里,有什么好的文章可以让我开始了解.NET安全性吗?