3

我目前正在尝试在单点触控应用程序中动态加载插件程序集。

为此,我在我的应用程序项目中引用插件 dll,将 limker 设置为“仅 sdk”,然后Assembly.Load(filename)在需要插件时尝试在我的应用程序中调用。

这与我之前在 monodroid 中成功使用的方法相同。但是目前,这在单点触控中失败并出现 FileLoadException。

这种方法在单点触控中可行吗?您需要包含一个特殊的文件路径吗?还是aot环境不支持这个?


注意:显然还有其他方法可以达到类似的效果 - 而且我确实有一个备用计划......但这是我的首选路线(如果我能做到的话)

4

2 回答 2

4

代码如:

var a = Assembly.Load ("mscorlib.dll");
Assert.NotNull (a);

适用于模拟器和设备。但是,for 的参数Load不是assemblyString文件(即使抛出的异常让您认为它是)。

存在许多其他重载(for Load)和其他方法(例如LoadFrom),但它们可能并非都在 MonoTouch 中工作(因为可能缺少一些运行时支持)。

笔记

处理mscorlib.dll是特殊的(并且在比其他组合更多的情况下工作,即快捷方式)。然而,基于反射的方法似乎在更多情况下按预期工作,例如:

string filename = System.IO.Path.GetFileName (GetType ().Assembly.Location);
Assembly assembly = Assembly.ReflectionOnlyLoadFrom (filename);
于 2012-09-13T12:28:19.307 回答
1

MonoTouch 不支持 Assembly.Load(或任何其他动态加载代码的方式)。

这是 iOS 的限制——所有可执行代码都必须在应用程序中(并且必须是本机代码,这就是我们使用 AOT 在编译时生成本机代码的原因)。

于 2012-09-13T08:05:37.147 回答