我目前正在尝试在单触应用程序中动态加载插件程序集。
要做到这一点,我在我的应用程序项目中引用了插件dll,将limker设置为'sdk',然后当我需要插件时,我正试图在我的应用程序中调用Assembly.Load(filename)
。 / p>
这与我之前在monodroid中成功使用的方法相同。但是目前,这在使用FileLoadException的monotouch中失败了。
这种方法在单音中是否可行?是否需要包含特殊的文件路径?或者在aot环境中不支持这个吗?
注意:显然还有其他方法可以达到类似的效果 - 我确实有一个备用计划......但这是我的首选路线(如果我可以使它工作)
答案 0 :(得分:3)
代码如:
var a = Assembly.Load ("mscorlib.dll");
Assert.NotNull (a);
适用于模拟器和设备。但是Load
的参数是assemblyString
,不是一个文件名(即使抛出的异常让你认为是这样)。
还存在许多其他重载(对于Load
)和其他方法(例如LoadFrom
),但它们可能并非都在MonoTouch内部工作(因为可能缺少一些运行时支持)。
注意强>
mscorlib.dll
的处理是特殊的(并且在比其他组合更多的情况下工作,即快捷方式)。然而,基于反射的方法似乎在更多情况下可以正常工作,例如:
string filename = System.IO.Path.GetFileName (GetType ().Assembly.Location);
Assembly assembly = Assembly.ReflectionOnlyLoadFrom (filename);
答案 1 :(得分:1)
MonoTouch不支持Assembly.Load(或动态加载代码的任何其他方式)。
这是iOS限制 - 所有可执行代码都必须在应用程序中(并且必须是本机代码,这就是我们在编译时使用AOT生成本机代码的原因。)