OnDemand Prism模块的加载应该在OOB scenerio中工作吗?如果是这样,我似乎无法使其工作。一切正在浏览器中正常工作,没有任何问题。具体地说I: 登记自己的模块中的代码:Prism OnDemand模块加载在OOB scenerio中工作吗?
protected override IModuleCatalog GetModuleCatalog() {
var catalog = new ModuleCatalog();
Uri source;
if(Application.Current.IsRunningOutOfBrowser) {
source = IsolatedStorageSettings.ApplicationSettings[SOURCEURI] as Uri;
}
else {
var src = Application.Current.Host.Source.ToString();
src = src.Substring(0, src.LastIndexOf('/') + 1);
source = new Uri(src);
IsolatedStorageSettings.ApplicationSettings[SOURCEURI] = source;
IsolatedStorageSettings.ApplicationSettings.Save();
}
if(source != null) {
var mod2 = new ModuleInfo { InitializationMode = InitializationMode.OnDemand,
ModuleName = ModuleNames.mod2,
ModuleType = "mod2.Module, mod2.Directory, '1.0.0.0', Culture=neutral, PublicKeyToken=null"),
Ref = (new Uri(source, "mod2.xap")).AbsoluteUri };
catalog.AddModule(mod2);
}
// per Jeremy Likeness - did not help.
Application.Current.RootVisual = new Grid();
return (catalog);
}
用于待加载的模块由后面的请求:
mModuleManager.LoadModule(ModuleNames.mod2);
,并等待到该装载的初始化过程中公布的一个事件的响应模块。
该模块似乎永远不会被加载,并且当应用程序在调试器下运行时,会出现一个消息框,指出Web服务器返回了“未找到”错误。我可以将该模块的请求url并输入到Firefox并下载模块,没有任何问题。
我一直没有找到任何可以实际操作的参考,但它似乎应该如此。我在这个主题上找到的最多的是blog entry by Jeremy Likeness,它涵盖了MEF中的加载模块,但是在这里应用他的知识并没有帮助。
服务器是本地主机(我听说它提到这可能会导致问题)。该服务器有一个clientaccesspolicy.xml文件 - 虽然我不指望这是必要的。 我使用的客户端堆栈和注册它应用在施工期间:
WebRequest.RegisterPrefix(Current.Host.Source.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped), WebRequestCreator.ClientHttp);
后续问题:
可以将所有xaps的安装以某种方式在客户端桌面 - 或者只在主应用程序XAP?以某种方式在appmanifest.xml中指定它们?
如果只安装了application.xap并且必须下载其余的xaps,是否值得使用这个工作?
我也很想知道这个答案 - 我正在OOB工作,需要分解我的项目... – Rodney 2010-09-09 00:47:24