如何从WP7中的Stream或byte []加载程序集?

时间:2011-06-13 02:49:14

标签: windows-phone-7 assemblies .net-assembly

我想在运行时使用Stream或Byte数组加载程序集。

在.net中,您可以使用Assembly.Load(Byte[], Byte[]) http://msdn.microsoft.com/en-us/library/twt16z2x.aspx

在标准Silverlight中,您可以使用AssemblyPart.Load() http://msdn.microsoft.com/en-us/library/cc190521%28v=VS.96%29.aspx

但在Windows Phone 7中,这些方法都不可用。

1 个答案:

答案 0 :(得分:10)

好吧,正如你几乎发现的那样;你不能这样做。该设计不允许您加载未在XAP中发布的程序集。这是一种安全设计,因为他们不希望您下载和运行未通过Marketplace检查的任意代码。

这与Apple控制其App Store的方式不相上下。为什么这个功能不存在,为什么我怀疑它会被添加:

  1. 市场。 Microsoft要求所有应用程序都通过黑盒检查。他们可能会寻找一些东西,例如性能,主要错误,冒险材料和UI一致性。允许开发人员加载和运行任何程序集都会完全绕过Marketplace。这会以一些方式伤害用户。首先,开发人员会试图将其用作在市场之外分发更新的手段,或者偷偷摸摸微软在其市场上不允许的功能(如色情)。
  2. 安全。能够加载组件是一个强大的功能,可以是好的也可以是坏的。如果开发人员错误地实现了它,则可能会利用它。其次,对于它如何影响应用程序的沙盒,可能是微软的技术限制(或时间限制)。或者更糟糕的是,一个看似无害的应用程序在已经通过检查后会下载不同的程序集,然后开始做一些邪恶的事情;像密钥记录和上传它。由于它围绕着市场,微软在上市之前就永远无法抓住它。
  3. 正如OJ在评论中所建议的那样,你可以做的是将程序集作为XAP的一部分,并使用允许你按名称加载的Assembly.Load重载之一。您可以动态加载程序集,它们只需要成为XAP的一部分。