myButton.Click += new RoutedEventHandler(myButton_Click); void myButton_Click(object sender, RoutedEventArgs e) { WebClient client = new WebClient(); client.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); //打开打包的xap文件 client.OpenReadAsync(new Uri("Binglang.ExternalProject.xap", UriKind.Relative)); } void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { //通过AppManifest.xaml文件取出动态库的信息 Assembly asm = LoadAssemblyFromXap(e.Result, "Binglang.ExternalProject.dll"); 使用反射创建相关的实例,并在页面上加载 holder.Children.Clear(); UIElement element = asm.CreateInstance("Binglang.ExternalProject.MainPage") as UIElement; this.holder.Children.Add(element); } /// <summary> /// 通过AppManifest.xaml文件取出动态库的信息 /// </summary> /// <param name="packageStream">OpenReadCompletedEventArgs e.Result</param> /// <param name="assemblyName">动态库文件名</param> /// <returns></returns> Assembly LoadAssemblyFromXap(Stream packageStream, string assemblyName) { //解包,读取AppManifest.xaml文件信息 string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(packageStream, null), new Uri("AppManifest.xaml", UriKind.Relative)).Stream).ReadToEnd(); //------------解析AppManifest.xaml信息内容 XElement deploymentRoot = XDocument.Parse(appManifest).Root; List<XElement> deploymentParts = (from assemblyParts in deploymentRoot.Elements().Elements() select assemblyParts).ToList(); Assembly asm = null; foreach (XElement xElement in deploymentParts) { string source = xElement.Attribute("Source").Value; AssemblyPart asmPart = new AssemblyPart(); StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(packageStream, "application/binary"), new Uri(source, UriKind.Relative)); if (source == assemblyName) { asm = asmPart.Load(streamInfo.Stream); } else { asmPart.Load(streamInfo.Stream); } } return asm; } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/manimanihome/archive/2009/08/29/4498244.aspx