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

Sim*_*mon 7 assemblies .net-assembly windows-phone-7

我想使用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中,这些方法都不可用.

vcs*_*nes 10

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

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

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

正如OJ在评论中建议的那样,你可以做的是将程序集作为XAP的一部分,并使用Assembly.Load允许你按名称加载它的一个重载.您可以动态加载程序集,它们只需要成为XAP的一部分.

  • @Simon是的我同意,但我认为最终这是微软做出的正确决定.与此类功能相关的负面消息(对于最终用户)太多. (3认同)