public class XapLoader{ public event XapLoadedEventHandler Completed; private string _xapname; public XapLoader(string xapname) { if (string.IsNullOrWhiteSpace(xapname)) throw new ArgumentException("InvalID module name!"); else _xapname = xapname; } public voID Begin() { Uri uri = new Uri(_xapname,UriKind.relative); if (uri != null) { WebClIEnt wc = new WebClIEnt(); wc.OpenReadCompleted += onXapLoadingResponse; wc.OpenReadAsync(uri); } } private voID onXapLoadingResponse(object sender,OpenReadCompletedEventArgs e) { if ((e.Error == null) && (e.Cancelled == false)) initXap(e.Result); if (Completed != null) { XapLoadedEventArgs args = new XapLoadedEventArgs(); args.Error = e.Error; args.Cancelled = e.Cancelled; Completed(this,args); } } private voID initXap(Stream stream) { string appManifest = new StreamReader(Application.GetResourceStream( new StreamResourceInfo(stream,null),new Uri("AppManifest.xaml",UriKind.relative)).Stream).ReadToEnd(); XElement deploy = Xdocument.Parse(appManifest).Root; List<XElement> parts = (from assemblyParts in deploy.Elements().Elements() select assemblyParts).ToList(); foreach (XElement xe in parts) { string source = xe.Attribute("Source").Value; AssemblyPart asmPart = new AssemblyPart(); StreamResourceInfo streamInfo = Application.GetResourceStream( new StreamResourceInfo(stream,"application/binary"),new Uri(source,UriKind.relative)); asmPart.Load(streamInfo.Stream); } }}public delegate voID XapLoadedEventHandler(object sender,XapLoadedEventArgs e);public class XapLoadedEventArgs : EventArgs{ public Exception Error { get; set; } public bool Cancelled { get; set; }}@H_403_7@上面的代码工作正常;我可以通过以下方式加载任何xap: @H_403_7@
XapLoader xapLoader = new XapLoader("Sales.xap");xapLoader.Completed += new XapLoadedEventHandler(xapLoader_Completed);xapLoader.Begin();@H_403_7@现在,我在Sales.xap项目中有一个名为InvoiceVIEw的UserControl,所以我想实例化该类.在当前项目(Main.xap)中,我添加了对Sales.xap项目的引用,但是,因为我手动加载它,所以设置“copy Local = False”.但是在执行时,以下代码抛出TypeLoadException: @H_403_7@
Sales.InvoiceVIEw vIEw = new Sales.InvoiceVIEw();@H_403_7@似乎代码找不到InvoiceVIEw类.但我检查了XapLoader的initXap()方法是否成功执行.那么为什么代码找不到InvoiceVIEw类呢?有人可以帮我解决这个问题吗?解决方法 这是基于提问者在下面的自我回答,而不是问题. @H_403_7@ @H_403_7@如果删除项目/模块,输出DLL / XAP文件会挂起.如果单击“显示所有文件”按钮,您将在相关项目的clIEntbin,bin和obj文件夹中看到一些这些遗留输出文件. @H_403_7@您可以从项目中单独删除它们,或者,如果有疑问,搜索所有BIN和OBJ(例如使用桌面浏览器)并删除所有这些文件夹.将在需要时重新创建BIN / CLIENTBIN / OBJ文件夹(这是Visual Studio中“clean”选项应该完成的工作!) @H_403_7@希望这可以帮助. 总结
以上是内存溢出为你收集整理的silverlight 4,动态加载xap模块全部内容,希望文章能够帮你解决silverlight 4,动态加载xap模块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)