У меня есть некоторый код который pinvokes собственный win32. Так как я обновил до.NET 4, код начал бросать высказывание MethodAccessException:
Попытка безопасности прозрачный метод 'Tek. Аудио. Midi. MidiDevice. GetDevices ()' для вызова собственного кода через метод 'Tek. Собственный компонент. Windows. Multimedia.midiInGetNumDevs ()' перестал работать. Методы должны быть очень важной безопасностью или безопасностью, безопасно-очень важной для вызова собственного кода.
Вот то, что продолжается:
Program.Main
вызовы метода library1 общедоступные помехи Tek.Audio.Midi.MidiDevice.GetDevices()
GetDevices()
общественность library2 вызовов статический pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs()
(да, плохая практика, безотносительно)Единственными связанными с безопасностью атрибутами на классах, методах и включенных блоках является AllowPartiallyTrustedCallers на library1, и я даже не знаю почему.
Это позорит меня, чтобы признать, что я довольно не осведомлен о безопасности в.NET. Что я должен сделать для предотвращения этого исключения? И в то время как я здесь, какие-либо хорошие статьи для запущения меня на безопасности.NET?
У вас есть выбор. Проще всего "отказаться" от новой модели безопасности.
<configuration>
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
</configuration>
ИЛИ (учитывая, что я не эксперт по безопасности .Net 4)
Вы можете пометить свой метод:
[SecuritySafeCritical]
поскольку вы можете использовать его с кодом, предназначенным для частично доверенных абонентов.
К сожалению, у меня нет хорошей статьи, которую я мог бы вам прислать, мне пришлось разобраться в этом, как и вам, исправляя свой сломанный код. :)
.