2011-06-13 5 views
7

런타임시 스트림 또는 바이트 배열을 사용하여 어셈블리를로드하려고합니다.WP7에서 스트림 또는 바이트 []에서 어셈블리를로드하는 방법은 무엇입니까?

.NET에서는 이러한 방법이 사용 가능한 있습니다 7도의 AssemblyPart.Load()http://msdn.microsoft.com/en-us/library/cc190521%28v=VS.96%29.aspx

를 사용하지만, 윈도우 폰에서 수있는 표준 실버 라이트에서 Assembly.Load(Byte[], Byte[])http://msdn.microsoft.com/en-us/library/twt16z2x.aspx

를 사용할 수 있습니다.

답변

10

글쎄, 당신은 꽤 많이 발견했다. 너는 그것을 할 수 없다. 이 디자인에서는 XAP에 포함되지 않은 어셈블리를로드 할 수 없습니다. 이는 마켓 플레이스 검사를 통과하지 않은 임의의 코드를 다운로드하여 실행하지 않기를 원하는 보안 디자인입니다.

이것은 Apple의 App Store 제어 방식과 같습니다. 왜이 기능이 없으며 왜 추가 될지 의심 스럽습니다.

  1. 마켓 플레이스. Microsoft는 모든 응용 프로그램이 블랙 박스 검사를 통과해야합니다. 이들은 성능, 주요 버그, 불규칙한 소재 및 UI 일관성과 같은 여러 가지 요소를 찾습니다. 개발자가 어셈블리를로드하고 실행하도록 허용하면 마켓 플레이스를 완전히 우회합니다. 그것은 몇 가지 점에서 사용자에게 상처를줍니다. 첫 번째는 개발자가이를 마켓 플레이스 외부에서 업데이트를 배포하는 수단으로 사용하거나, 마켓 플레이스에서 허용하지 않는 기능 (포르노와 유사)을 몰래 사용하는 방법으로 사용하려고하는 것입니다.
  2. 보안. 어셈블리를로드 할 수 있다는 것은 강력한 기능이며, 좋고 나쁘다. 개발자가 잘못 구현 한 경우이를 악용 할 수 있습니다. 둘째, 앱 샌드 박스에 미치는 영향에 대한 Microsoft의 기술적 제한 (또는 시간 제한)이었을 수 있습니다. 또는 겉으로보기에 무해한 응용 프로그램이 이미 검사를 통과 한 후에 다른 어셈블리를 다운로드 한 다음 악의적 인 작업을 시작합니다. 키 로깅과 어딘가에 업로드 같은. MS는 마켓 플레이스를 돌아 다녔기 때문에 일반인에게 공개되기 전에이를 잡지 못했습니다. OJ는 코멘트에 제안 할 수있는 일

은, 당신의 XAP의 일환으로 어셈블리를 만들고, 당신이 이름을로드 허용 Assembly.Load 오버로드 중 하나를 사용합니다. 동적으로 어셈블리를로드 할 수 있습니다. 단지 XAP의 일부 여야합니다.

+1

대답이 정확하다고 생각하십시오. 그러나 그 기능을 제거하는 것은 근시안적이다. 사람들이 어셈블리를 임베디드 리소스로 제공 한 다음 런타임에로드 할 리소스를 선택하여 선택할 수있는 경우가 많습니다. – Simon

+0

하나의 어셈블리에 포함하지 않고 XAP로 모두 보내고 필요할 때로드하십시오. –

+3

@Simon 예 동의합니다. 그러나 궁극적으로 Microsoft가 만드는 것이 올바른 결정이라고 생각합니다. 이러한 종류의 기능과 관련된 네거티브 (최종 사용자의 경우)가 너무 많습니다. – vcsjones

관련 문제