이럴쑤가~ 이렇게 이쁘게 붙여넣는 방법이 있었군요!! Load Dll from xap void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { StreamResourceInfo xapSri = new StreamResourceInfo(e.Result, null); StreamResourceInfo manifestSri = Application.GetResourceStream(xapSri, new Uri("AppManifest.xaml", UriKind.Relative)); using (XmlReader xmlReader = XmlReader.Create(manifestSri.Stream)) { //xml을 읽을 노드가 없을때까지 읽기 while (xmlReader.Read() == true) { //읽혀진 노드가 AssemblyPart로 시작 한다면 if (xmlReader.IsStartElement("AssemblyPart") == true) { //속성중에 Source를 읽어다가 source에다가 저장 string source = xmlReader.GetAttribute("Source"); //어셈블리 사전에 등록 _dicAssemblies.Add(source,LoadAssembly(xapSri, source)); } } //일단 IamXap안에 있는 MyControl을 읽기위한 함수(테스트용) LoadMyControl("IamXap.dll"); } } /// <summary> /// MyControl 읽기 /// </summary> /// <param name="dllName"></param> private void LoadMyControl(string dllName) { //Dll 에서 MyControl을 찾아다가 인스턴스로 만듬(이부분은 제가 미리 만들어 놓은 MyControl 이라는 UserControl 을 읽어 오는 과정 입니다. UIElement myContorl = (_dicAssemblies[dllName] as Assembly).CreateInstance("IamXap.MyControl") as UIElement; //LayoutRoot에 추가 LayoutRoot.Children.Add(myContorl); } /// <summary> /// 어셈블리 읽기 /// </summary> /// <param name="xapSri"></param> /// <param name="source"></param> /// <returns></returns> private Assembly LoadAssembly(StreamResourceInfo xapSri, string source) { //xapSri을 통해서 읽은 dll들 StreamResourceInfo sourceInfo = Application.GetResourceStream(xapSri, new Uri(source, UriKind.Relative)); AssemblyPart assemblyPart = new AssemblyPart(); //dll load return assemblyPart.Load(sourceInfo.Stream); }
Silverlight