У меня довольно стабильная версия серверного приложения, которая уже почти год работает с десятками клиентов.
Один новый клиент недавно настроил приложение и получает следующую ошибку:
SomeMethod и SomeOtherMethod - это методы в сборках, которые я написал, которые построены на .NET 4 и работают в службе Windows. Если это имеет значение, SomeOtherMethod ссылается на тип из сторонней сборки (EntLib 4.1), встроенной в .NET 2.0. Посмотрев код для EntLib 4.1, я вижу, что они используют атрибуты SecurityTransparent и APTC, но это никогда не вызывало проблем у других клиентов.System.MethodAccessException: попытка с помощью прозрачного метода безопасности [SomeMethod] для доступа к критическому критическому методу [SomeOtherMethod] не удалось.
Эти сборки были обновлены из .NET 2.0 CLR, но давно. Этот точный код работает на других клиентах очень хорошо, и я не использую явно атрибут APTC, и я не использую атрибут SecurityCritical где угодно.
Это приводит меня к выводу, что проблема с конфигурацией или, возможно, с пакетом обновления .NET Framework. Был ли выпущен патч для .NET, который может вызвать это нарушение? Существует ли какой-либо параметр конфигурации, где это принудительно проверяет этот тип проверки, который отключен по умолчанию, но что мой клиент может включить?
Последняя точка. В моем сервисе используются RDLC SSRS для создания PDF файлов. Из-за некоторых изменений в .NET 4 я должен заставить службу использовать устаревшую политику безопасности через следующую конфигурацию:
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
Подробнее о том, зачем мне это нужно, см. эту статью в статье stackoverflow: Очень высокое использование памяти в .NET 4.0
Важным моментом является то, что я делаю это и у других моих клиентов. Только у этого клиента возникают проблемы.