System.MethodAccessException, CAS и Visual Studio отладчик - PullRequest
3 голосов
/ 19 июня 2011

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

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

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

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

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

Попытка с помощью прозрачного метода безопасности 'Система.Web.Mvc.TypeDescriptorHelper.Get (System.Type) 'для доступа к критически важному методу безопасности' System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider..ctor (System.Type) 'не удалось.

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

1015 *

Ответы [ 2 ]

6 голосов
/ 20 июня 2011

Это известная ошибка в 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 и других связанных сборках, поэтому неудивительно, что в какой-то момент он взорвется.

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

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

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

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

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

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

...