我正在使用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时。
答案 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托管过程,这两个问题都会消失!