Ich habe einen Code, der native win32 pinvokiert. Seit ich auf .NET 4 aktualisiert habe, begann der Code eine MethodAccessException zu sagen:
Versuch durch die Sicherheitsmethode 'Tek.Audio.Midi.MidiDevice.GetDevices ()', um den systemeigenen Code über die Methode 'Tek.Native.Windows.Multimedia.midiInGetNumDevs ()' aufzurufen. Methoden müssen sicherheitskritisch oder sicherheitsrelevant sein, um systemeigenen Code aufrufen zu können.
Hier ist was los ist:
Program.Main
der ausführbaren Assembly ruft library1 public static Tek.Audio.Midi.MidiDevice.GetDevices()
auf
GetDevices()
ruft bibliothek2 's öffentlichen statischen pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs()
(yeah, schlechte Praxis, was auch immer) Die einzigen sicherheitsrelevanten Attribute für die beteiligten Klassen, Methoden und Assemblies sind AllowPartiallyTrustedCallers in library1, und ich weiß nicht einmal warum.
Es ist mir eine Schande, zuzugeben, dass ich in .NET ziemlich unsicher bin. Was soll ich tun, um diese Ausnahme zu verhindern? Und während ich hier bin, irgendwelche guten Artikel, um mich mit .NET Sicherheit zu beginnen?
Sie haben Wahlmöglichkeiten. Am einfachsten wäre es, das neue Sicherheitsmodell zu deaktivieren.
ODER (bedenkt, dass ich kein .Net 4 Sicherheitsexperte bin)
Sie können Ihre Methode markieren:
%Vor%, da Sie den Code für teilweise vertrauenswürdige Anrufer verwenden können.
Leider habe ich keinen guten Artikel, den ich Ihnen schicken kann. Ich musste das herausfinden, indem Sie meinen kaputten Code reparierten. :)