Pregunta

Quiero cargar un ensamblaje en tiempo de ejecución usando una transmisión o una matriz de bytes.

En .net puedes usar Assembly.Load(Byte[], Byte[]) http://msdn.microsoft.com/en-us/library/twt16z2x.aspx

En Silverlight estándar puedes usar AssemblyPart.Load() http://msdn.microsoft.com/en-us/library/cc190521%28v=vs.96%29.aspx

Pero en Windows Phone 7 ninguno de estos métodos es avaliable.

¿Fue útil?

Solución

Bueno, como descubriste prácticamente; No puedes hacerlo. El diseño no le permite cargar un ensamblaje que no se envía en su XAP. Este es un diseño de seguridad, ya que no quieren que descargue y ejecute código arbitrario que no haya aprobado la inspección del mercado.

Esto está a la par con la forma en que Apple controla su App Store. Por qué esta funcionalidad no está allí, y por qué dudo que se agregue:

  1. Mercado. Microsoft requiere que todas las aplicaciones pasen una inspección de Blackbox. Es probable que busquen una serie de cosas, como rendimiento, errores importantes, material arriesgado y consistencia de la UI. Permitir que un desarrollador cargue y ejecute cualquier ensamblaje elude por completo del mercado. Eso duele al usuario de varias maneras. El primero es que un desarrollador estaría tentado a usarlo como un medio para distribuir actualizaciones fuera del mercado, o escabullirse en las características (como el porno) que Microsoft no permite en su mercado.
  2. Seguridad. Ser capaz de cargar un ensamblaje es una característica poderosa, que puede ser buena y mala. Si un desarrollador lo implementó incorrectamente, es posible explotarlo. En segundo lugar, podría haber sido una limitación técnica (o limitación de tiempo) en Microsoft sobre cómo afectaría el sandboxing de las aplicaciones. O peor, una aplicación aparentemente inofensiva descarga un ensamblaje diferente después de que ya pasó la inspección, luego comienza a hacer algo nefasto; Como registrar y cargarlo de llave en alguna parte. Desde que dio la vuelta al mercado, Microsoft nunca habría podido atraparlo antes de que fuera al público.

Lo que puede hacer, como sugirió OJ en los comentarios, es hacer que las asambleas sean parte de su XAP y use uno de los Assembly.Load sobrecargas que le permiten cargarlo por su nombre. Tú pueden Los conjuntos de carga dinámica, solo tienen que ser parte de su XAP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top