System.MethodAccessException, CAS и отладчик Visual Studio

Я вызываю ModelMetadataProviders.Current.GetMetadataForProperties, чтобы получить список ModelMetadata в приложении WPF с помощью Visual Studio 2010. Этот вызов выполняется нормально, и в ответ я получаю IEnumerable‹>. В строке кода, где я пытаюсь повторить это, я получаю исключение System.MethodAccessException.

Забавно, что это происходит, только если я отлаживаю с помощью F5. Если я запускаю код с помощью Ctrl+F5, то я НЕ получаю это исключение, и код работает нормально. Если я запускаю exe из проводника Windows, он также работает нормально.

Наверняка, я что-то упускаю. Может быть, System.Web.Mvc нельзя использовать из приложения WPF? (почему) Есть ли что-то об отладчике Visual Studio?

Любая помощь будет оценена.

Вот целое исключение:

Попытка прозрачным для безопасности методом «System.Web.Mvc.TypeDescriptorHelper.Get(System.Type)» получить доступ к критичному для безопасности методу «System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider..ctor(System.Type)» не удалась.

Сборка «System.ComponentModel.DataAnnotations, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35» — это условно APTCA-сборка, которая не включена в текущем AppDomain. Чтобы включить эту сборку, которая будет использоваться путем частичного доверия или прозрачного защитного кода, пожалуйста, добавьте сборки имя «System.ComponentModel.DataAnnotations, PublicKey = 0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9» в список на PartialTrustVisibleAssemblies при создании AppDomain.


person isntn    schedule 19.06.2011    source источник
comment
Спасибо, Джехоф, за форматирование...   -  person isntn    schedule 20.06.2011


Ответы (2)


Это известная ошибка в System.ComponentModel.DataAnnotations.dll, которая будет исправлена ​​в следующем выпуске .NET Framework. Короче говоря, сборка DataAnnotations помечена как условно APTCA, поскольку изначально предназначалась для использования только приложениями ASP.NET. Сборка стала более полезной, так что ее можно использовать вне ASP.NET, но мы забыли убрать из сборки условный флаг APTCA. Это приводит к сбою прозрачных библиотек DLL (например, System.Web.Mvc.dll) при доступе к этой сборке за пределами приложения ASP.NET в определенных доменах приложений, например экземплярах, созданных в процессе отладки VS.

Чтобы ответить на ваш другой вопрос: System.Web.Mvc.dll никогда не тестировался для использования вне приложения ASP.NET. У него есть несколько подключений к System.Web.dll и другим связанным сборкам, так что неудивительно, что в какой-то момент он взорвется.

person Levi    schedule 20.06.2011

Спасибо за информацию, Леви.

Поскольку я не мог использовать DataAnnotations из-за указанной ошибки, я сделал собственное кодирование, которое включает в себя отражение. И я столкнулся с проблемой :-( с CompareAttribute при вызове GetCustomAttributes.

Но потом я нашел обходной путь.

Кажется, проблема связана с процессом размещения Visual Studio.

Если я отключу процесс хостинга Visual Studio, обе проблемы исчезнут!

person isntn    schedule 20.06.2011