OnDemand PrismモジュールのロードはOOBシーンリオで機能する必要がありますか?もしそうなら、私はそれを機能させることができないようです。現在、すべてが問題なくブラウザで動作しています。具体的には、モジュールをコードに登録します。
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に入力し、問題なくモジュールをダウンロードできます。
私はこれが実際に実行可能であるという言及を見つけることができませんでしたが、そうあるべきであるように思われます。このテーマで私が最も見つけたのは、Jeremy Likenessによるブログエントリです。これは、MEFでのモジュールのロードをカバーしていますが、ここで彼の知識を適用しても役に立ちませんでした。
サーバーはローカルホストです(これにより問題が発生する可能性があるとのことです)。サーバーにはclientaccesspolicy.xmlファイルがあります-それが必要だとは思いませんが。クライアントスタックを使用しており、アプリの構築中に登録します。
WebRequest.RegisterPrefix( Current.Host.Source.GetComponents( UriComponents.SchemeAndServer, UriFormat.UriEscaped ), WebRequestCreator.ClientHttp );
フォローアップの質問:
すべてのxapを何らかの方法でクライアントデスクトップにインストールできますか?それともメインアプリケーションのxapのみをインストールできますか?どういうわけかappmanifest.xmlでそれらを指定しますか?
application.xapのみがインストールされ、残りのxapをダウンロードする必要がある場合は、これを機能させる価値がありますか?