Исключение Autofac - критический уровень безопасности против уровня прозрачности 2 - PullRequest
0 голосов
/ 26 ноября 2018

Я обновляю старый проект, чтобы использовать .net 471 вместо 462 и самую последнюю версию всех пакетов nuget.

У меня было много проблем с версиями, которые нужно было вспахать, но я наконец-тополучил проект, который строит.

Но, когда я выполняю программирование, я получаю следующее исключение:

System.TypeAccessException: 'Попытка прозрачным методом безопасности' Autofac.Integration.WebApi.RegistrationExtensions.RegisterApiControllers (Autofac.ContainerBuilder, System.Reflection.Assembly []) 'для доступа к критическому типу безопасности' Autofac.Builder.IRegistrationBuilder`3 'не удалось.

С последующим

Сборка 'Autofac.Integration.WebApi, версия = 3.0.0.0, Culture = нейтральная, PublicKeyToken = 17863af14b0044da' помечена атрибутом AllowPartiallyTrustedCallersAttribute и использует модель прозрачности безопасности уровня 2.Прозрачность уровня 2 приводит к тому, что все методы в сборках AllowPartiallyTrustedCallers становятся прозрачными для безопасности по умолчанию, что может быть причиной этого исключения. '

Это происходит при вызове:

builder.RegisterApiControllers(ThisAssembly);

Гдестроитель - это Autofac ContainerBuilder.

Вопрос

Как говорит субъект, должен быть какой-то конфликт между SecurityCritical и AllowPartiallyTrustedCallersAttribute, но я неЯ не знаю, как я это представил, и каково лучшее действие, поэтому

Что происходит и как я могу это исправить?

Обновление

Продолжая предложение JLe, я удалил ссылку webapi и вместо нее использовал webapi2.Я получил связанную ошибку при настройке регистрации, но поскольку это не «основная функциональность», я пока ее пропустил (мне нужно вернуться к ней), чтобы посмотреть, что я получу.Я попадаю на экран браузера, который дает мне следующее:

Метод 'my.namespace.MyController + d__6.MoveNext ()' прозрачен для безопасности, но является членом критического типа безопасности.

Я попытался поместить [SecurityCritical] в класс контроллера, но, очевидно, вам не разрешено делать асинхронные вызовы в классе с этим атрибутом:

Ошибка CS4031 Асинхронные методыне допускаются в интерфейсе, классе или структуре, которые имеют атрибут «SecurityCritical» или «SecuritySafeCritical».

Но я не могу исправить , потому что явыполнение асинхронных вызовов к бэкэнду (NServicebus ESB).

1 Ответ

0 голосов
/ 28 ноября 2018

Убедитесь, что вы используете nuget.org/packages/Autofac.WebApi2 в качестве этого, если для WebApi2, а не более старый, называемый просто Autofac.WebApi (пространства имен одинаковы, Autofac.Integration.WebApi).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...