是否有办法设置MAF添加,以便System.Reflection.Assembly.GetEntryAssembly()在从插件的AppDomain内部调用时返回对插件主程序集的引用?
背景:为了满足我的项目的某些安全要求,我必须在单独的AppDomain中加载插件,并且当从插件的AppDomain内部调用时,GetEntryAssembly()的结果必须设置为插件的(强命名的)主程序集。我按照MSDN MAF演练中列出的模式开发了一个测试用例。在我的测试用例中,如果程序集加载在单独的AppDomain(或进程)中,GetEntryAssembly()总是返回null。
我注意到GetEntryAssembly文档说"当托管程序集从非托管应用程序加载时,GetEntryAssembly方法可以返回Nothing"——这是否适用于跨AppDomain边界的MAF代理?
程序集和可执行文件都有强名称
你是对的。它确实返回Nothing (null)。
但是请注意,在System.Reflection.Assembly。GetEntryAssembly,"返回值"描述为:
在默认应用程序中作为进程可执行文件的程序集域,或由之执行的第一个可执行文件应用程序域中。ExecuteAssembly
应用程序域中。ExecuteAssembly用于执行。net应用程序的main方法。在您的情况下,不执行任何应用程序。这里解释了正在做的事情。
返回Nothing (null)是有意义的,因为没有调用ExecuteAssembly。
为什么不使用GetExecutingAssembly呢?