2010-08-12 10 views
3

J'ai un énorme problème avec MEF lorsque j'essaie de charger dynamiquement des fichiers XAP. Lorsque je télécharge le fichier catalogue/xap avec l'appel de la méthode dc.DownloadAsync(); Mon Internet Explorer va planter et me montrer le dialogue "IE a cessé de fonctionner". (voir image ci-dessus).Problème avec les fichiers XAP de chargement dynamique avec MEF. IE s'écrase

J'ai suivi plusieurs étapes par des guides d'étapes et je ne peux pas voir ce que je fais mal ou ce que j'ai manqué.

OverView de mon Explorateur de solutions (l'image Se à la fin du poste pour une vue plus détaillée):

Solution 'Appstation'

  • AppStation.Common
    • IApp.cs
  • AppStation.GUI
    • App.xaml
    • MainPage.xaml
  • Test2
    • HelloMefApp.cs

Interface:

public interface IApp 
{ 
    string Name { get; } 
    string Description { get; } 

    UserControl GetUserInterface(); 
} 

mise en œuvre:

[Export(typeof(IApp))] 
public class HelloMefApp : IApp 
{ 

    public string Name 
    { 
     get { return "Hello MEF"; } 
    } 

    public string Description 
    { 
     get { return "Adds a label with the text 'Hello MEF'"; } 
    } 

    public UserControl GetUserInterface() 
    { 
     UserControl uc = new UserControl(); 

     TextBlock textBlock = new TextBlock(); 
     textBlock.Text = "Hello MEF"; 

     uc.Content = textBlock; 

     return uc; 
    } 
} 

App.xaml.cs, Application_Startup, Dynamic chargement du XAP:

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    AggregateCatalog catalog = new AggregateCatalog(); 

    DeploymentCatalog dc = new DeploymentCatalog(new Uri("Test2.xap", UriKind.Relative)); 
    catalog.Catalogs.Add(dc); 
    dc.DownloadAsync(); //This will give the "Internet Explorer has stopped working" crash. 

    CompositionHost.Initialize(catalog); 

    this.RootVisual = new MainPage(); 
} 

MainPage:

public partial class MainPage : UserControl, IPartImportsSatisfiedNotification 
    { 
     [ImportMany(AllowRecomposition = true)] 
     public IApp[] Apps { get; set; } 

     public MainPage() 
     { 
      InitializeComponent(); 
      CompositionInitializer.SatisfyImports(this); 
     } 

     public void OnImportsSatisfied() 
     { 
      if (Apps != null) 
      { 
       foreach (IApp item in Apps) 
       { 
        LayoutRoot.Children.Add(item.GetUserInterface()); 
       } 
      } 
     } 
    } 

alt text http://www.colincochrane.com/image.axd?picture=WindowsLiveWriter/InternetExplorer8Beta1FirstImpressions_117C3/ie8-2_thumb.jpg

alt text http://www.freeimagehosting.net/uploads/cf93454c1a.jpg

Mise à jour après LJ réponse: Test2 est une application Silverlight, j'ai howeever enlevé le App.xaml et MainPage.xaml depuis que j'ai entendu dire qu'ils ne sont pas nécessaire. et quand je construis l'application, je reçois en effet deux fichiers .XAP. J'ai fait exactement les mêmes étapes que vous avez décrites ci-dessus et je reçois le même problème.

J'ai également essayé de déboguer un peu plus loin en ajoutant ces lignes de codes:

dc.DownloadCompleted += (s, args) => 
{ 
    int x = 10; 
}; 

dc.DownloadProgressChanged += (s, args) => { 
    int x = 10; 
}; 

Tout ce que je remarque est que mes points d'arrêt (i ajouté un à chaque événement) ne reçoit pas touché.

Mise à jour: Essayé avec l'opéra, et a obtenu un meilleur message Expetion:

Exception has been Thrown by the target of an invocation.  
at System.Windows.Navigation.PageResourceContentLoader.EndLoad(IAsyncResult asyncResult) 
     at System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(IAsyncResult result) 
    Caused by: Exception has been thrown by the target of an invocation. 

     at System.Windows.Navigation.PageResourceContentLoader.EndLoad(IAsyncResult asyncResult) 
     at System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(IAsyncResult result) 
+0

Vous mentionnez une image de l'erreur, mais je ne vois pas. –

+0

Quand j'ai fait le post pour la première fois j'ai essayé d'inclure des photos mais comme c'est mon premier article, je n'avais pas assez de réputation (?) Pour les poster. Cependant maintenant j'ai tellement maintenant ils sont ajoutés. – Tino

Répondre

1

J'ai réussi à créer une application métier Silverlight rapide et obtenir votre code en cours d'exécution en quelques minutes. Au lieu de mettre du code dans la MainPage, je l'ai mis dans la page d'accueil. Je ne pense pas que cela affecte quelque chose - la page principale de l'application commerciale est juste un peu trop de monde.

J'ai déplacé CompositionHost.Initialize (catalogue); avant le DownloadAsync, même si cela fonctionnait de toute façon comme vous l'aviez. La seule chose que je peux penser que vous faites peut-être mal, c'est que vous avez une bibliothèque de classe Silverlight pour le projet Test2 et que vous n'avez pas de projet d'application Silverlight qui génère un Test2.xap à mettre en votre ClientBin (pas développé dans votre image).

Désolé, cela ne fonctionne pas, mais votre code fonctionne.

J'ai même créé une deuxième application de projet avec l'ajout au catalogue et au téléchargement et les deux projets ont été téléchargés.

J'espère que vous avez découvert votre problème.

LJ

+0

Bonjour Test2 est une application Silverlight, j'ai cependant supprimé App.xaml et MainPage.xaml depuis que j'ai entendu dire qu'ils n'étaient pas nécessaires. et quand je construis l'application, je reçois en effet deux fichiers .XAP. J'ai fait exactement les mêmes étapes que vous avez décrites ci-dessus et je reçois le même problème. J'ai également ajouté un peu de code pour le déboguer plus mais sans succès. (Se poste principal). – Tino

+0

J'ai essayé de l'exécuter dans l'opéra et j'ai reçu un message d'erreur plus détaillé. Se poste principal pour plus de détails. – Tino

1

J'ai essayé de faire tout au-dessus de la première étape dans l'espoir que je manqué quelque chose. Comme jamais je ne l'ai pas fait. Même problème même dans un nouveau projet propre. J'ai ensuite utilisé Opera au lieu de IE. Et ça m'a donné une meilleure erreur.

J'ai décidé d'essayer d'exécuter l'application principale avec l'opéra et cela a fonctionné comme par magie. Cela m'a donné l'idée d'effacer mon cache IE et redémarrer l'application avec le redémarrage du serveur de développement ASP.NET. Et l'applikation a fonctionné avec IE aussi.

Tout cela sans changer une ligne de code. Donc, dans l'ensemble, je pense que IE et le cache ont été le problème tout le long.

Edit: Maintenant, je reçois la même vieille erreur dans IE (a cessé de fonctionner), mais il travaille dans l'opéra ....

+0

Pourquoi ne puis-je définir cette réponse comme ma réponse acceptée maintenant? je dois attendre 19 heures? – Tino