我遇到了JSON.Net
序列化库的问题,我想咨询一下在CAS和AppDomain管理方面比我更专业的人的意见。
要了解有关该问题的更多信息,请参阅issue 21575。我为这个问题提交了一个补丁。
这个想法是,当您第一次访问DynamicCodeGeneration
标志时,在当前应用程序域中静态地一次性设置它。但是,我认为应用程序域允许的权限可以更改。
例如,如果您在应用程序域中调用对象的方法,则跨另一个应用程序域,似乎您继承了最严格的应用程序域的权限。所以对我来说,这个假设权限不会改变一个应用程序域,你可以静态地设置DynamicCodeGeneration
一劳永逸是错误的。
我说的对吗?还是我错过了一些关于CAS和AppDomain管理的内容?
编辑:
我添加了一个关于我认为正在发生的事情的小模式:http://www.sp4ce.net/data/temp/appdomain.png你认为它是正确的吗?
我认为你的单元测试为你的理论提供了证据。在跨应用域调用中,似乎执行了更严格的CAS限制。但是,我不认为将来对限制较少的appdomain的本地调用(不远程到限制较少的appdomain)将继续强制执行更严格的权限集。
JSON的问题。Net中您试图解决的问题是,权限集只检查一次,而在将来可能来自限制性更强的应用程序域的调用中不重新验证。考虑到权限可以根据调用上下文而更改,因此要求在使用权限的最局部范围内使用权限是有意义的。您的解决方案是让调用代码负责通知JSON。是否使用DynamicCodeGeneration。我认为JSON是更好的解决方案。Net库将在JsonTypeReflector中要求所需的权限。DynamicCodeGeneration getter,而不是像现在这样缓存值。