System.MethodAccessException,CAS和Visual Studio调试器

时间:2011-06-19 12:35:15

标签: c# wpf asp.net-mvc .net-4.0 code-access-security

我正在使用Visual Studio 2010调用ModelMetadataProviders.Current.GetMetadataForProperties来获取WPF应用程序中的ModelMetadata列表。 此调用执行正常,我得到IEnumerable<>作为回报。 在代码行,我尝试迭代这个,我得到System.MethodAccessException。

有趣的是,只有在我使用F5进行调试时才会发生这种情况。 如果我用Ctrl + F5运行代码,那么我不会得到这个异常,代码工作正常。 如果我从Windows资源管理器运行exe,它运行正常。

当然,我错过了一些东西。可能是,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,   公钥= 0024000004800000940000000602000000240000525341310004000001000100B5FC90E7027F67871E773A8FDE8938C81DD402BA65B9201D60593E96C492651E889CC13F1415EBB53FAC1131AE0BD333C5EE6021672D9718EA31A8AEBD0DA0072F25D87DBA6FC90FFD598ED4DA35E44C398C454307E8E33B8426143DAEC9F596836F97C8F74750E5975C64E2189F45DEF46B2A2B1247ADC3652BF5C308055DA9'   到了   PartialTrustVisibleAssemblies列表   在创建AppDomain时。

2 个答案:

答案 0 :(得分:6)

这是System.ComponentModel.DataAnnotations.dll中的一个已知错误,它将在下一版本的.NET Framework中修复。简而言之,DataAnnotations程序集被标记为有条件的APTCA,因为它最初仅供ASP.NET应用程序使用。程序集变得更加有用,因此它可以在ASP.NET之外使用,但我们忘记从程序集中删除条件APTCA标志。当在某些AppDomain中的ASP.NET应用程序之外访问此程序集时,这会导致透明DLL(如System.Web.Mvc.dll)失败,例如VS调试过程实例化的那些。

要回答您的其他问题:System.Web.Mvc.dll从未在ASP.NET应用程序之外进行过测试。它有几个挂钩到System.Web.dll和其他相关的程序集,所以它在某些时候会爆炸并不太令人惊讶。

答案 1 :(得分:2)

感谢Levi。

提供的信息

由于我无法使用DataAnnotations,因为我说自己做了一些编码 - 涉及反射。我遇到问题:-(在调用GetCustomAttributes时使用CompareAttribute。

但是,我找到了解决方法。

似乎问题出在Visual Studio Hosting Process上。

如果我禁用visual studio托管过程,这两个问题都会消失!