你可以在monotouch中使用assembly.load吗?

时间:2012-09-13 07:39:45

标签: xamarin.ios

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

要做到这一点,我在我的应用程序项目中引用了插件dll,将limker设置为'sdk',然后当我需要插件时,我正试图在我的应用程序中调用Assembly.Load(filename)。 / p>

这与我之前在monodroid中成功使用的方法相同。但是目前,这在使用FileLoadException的monotouch中失败了。

这种方法在单音中是否可行?是否需要包含特殊的文件路径?或者在aot环境中不支持这个吗?


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

2 个答案:

答案 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生成本机代码的原因。)