Async CTP в среде частичного доверия - PullRequest
2 голосов
/ 15 июня 2011

Кто-нибудь знает, можно ли "Bin развернуть" Async CTP?

Поскольку большая часть Async в основном представляет собой трюк с компилятором, я подумал, что предварительная компиляция моего приложения и его развертывание на сервере без установленной Async CTP может работать. К сожалению, все не так просто. При попытке вызвать асинхронный метод появляется следующее сообщение об ошибке:

Task<Result> task = _checker.CheckAsync(input);

Инициализатор типа для 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1' вызвал исключение.

Это не совсем та ошибка, которую я ожидал, но, возможно, есть некоторые сменные сборки, которые я мог бы развернуть в своем каталоге Bin, чтобы это исправить? Я не могу установить Async CTP на эту (производственную) машину.

Обновление : Я также включил детали InnerException:

System.MethodAccessException: попытка прозрачным методом безопасности 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder 1<TResult>..cctor()' to access security critical method 'System.Threading.Tasks.TaskScheduler.add_UnobservedTaskException(System.EventHandler 1)' не удалось. at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1..cctor ()

Похоже, это проблема среднего доверия, а не проблема асинхронности?

1 Ответ

2 голосов
/ 15 июня 2011

Вам также потребуется развернуть AsyncCtpLibrary.dll. Я бы ожидал , что это все, что требуется ... вы уже развернули это вместе со своим приложением?

Что является внутренним исключением TypeInitializerException?

РЕДАКТИРОВАТЬ: Как вы говорите, это похоже на проблему среднего доверия, которая не будет решена, если все это установить в любом случае. Вероятно, стоит обсудить это с командой напрямую (я могу сделать это, если хотите), если в вашей ситуации есть что-то необычное с точки зрения безопасности.

Чтобы убедиться, что это так, вы можете попробовать добавить обработчик для UnobservedTaskException самостоятельно где-нибудь в вашем коде:

TaskScheduler.UnobservedTaskException += (sender, e) => e.SetObserved();

Сделайте это в небольшом проекте, который вообще не использует асинхронность - я подозреваю, что он потерпит неудачу таким же образом. Если вы можете настроить параметры безопасности так, чтобы это работало, остальные могут просто работать с этого момента.

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