Вопрос

Я хочу загрузить сборку во время выполнения, используя поток или массив байтов.

В .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 ни один из этих методов не является доступным.

Это было полезно?

Решение

Ну, как вы в значительной степени обнаружили; Вы не можете этого сделать. Дизайн не позволяет вам загрузить сборку, которая не поставляется в ваш XAP. Это дизайн безопасности, так как они не хотят, чтобы вы загружали и запускали произвольный код, который не прошел инспекцию на рынке.

Это наравне с тем, как Apple контролирует свой магазин приложений. Почему этой функции нет, и почему я сомневаюсь, что она будет добавлена:

  1. Рынок. Microsoft требует, чтобы все приложения проходили проверку Blackbox. Скорее всего, они ищут ряд вещей, такие как производительность, крупные ошибки, рискованные материалы и согласованность пользовательского интерфейса. Позволяя разработчику загружать и запустить любую сборку, полностью обойти рынок. Это больно пользователю несколькими способами. Во -первых, у разработчика будет соблазн использовать его в качестве средства распространения обновлений за пределами рынка или подкрастья к функциям (например, порно), которые Microsoft не допускает на своем рынке.
  2. Безопасность. Возможность загружать сборку - это мощная особенность, которая может быть как хорошей, так и плохой. Если разработчик внедрил его неправильно, возможно, его можно использовать. Во -вторых, это могло быть техническим ограничением (или ограничением времени) на Microsoft за то, как это повлияет на песочницу приложений. Или, что еще хуже, казалось бы, безобидное приложение загружает другую сборку после того, как она уже прошла проверку, а затем начинает делать что -то гнусное; как журнал клавиш и загружать его где -нибудь. Поскольку он обошел рынок, Microsoft никогда бы не смогла поймать его, прежде чем она пошла к публике.

То, что вы можете сделать, как предложил OJ в комментариях, - это сделать сборки как часть вашего XAP и использовать один из Assembly.Load перегрузки, которые позволяют загружать его по имени. Ты Можно Динамически загружая сборки, они просто должны быть частью вашего XAP.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top