Pourquoi l'ajout d'un assemblage dans un fichier XAML génère-t-il une erreur?
-
07-07-2019 - |
Question
J'ai une application qui lit les fichiers XAML de manière dynamique, comme ceci:
StreamReader sr = new StreamReader(pathAndFileName);
this.Content = XamlReader.Load(sr.BaseStream);
Dans l'un de ces fichiers XAML qui sont chargés (leur code derrière ont tous été supprimés), cela fonctionne:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DynamicXaml123">
<StackPanel Margin="10" HorizontalAlignment="Left">
<TextBox Height="23" Width="100" Text="{Binding FirstName}" />
<TextBox Height="23" Width="100" Text="{Binding LastName}" />
<TextBox Height="23" Width="100" Text="{Binding Age}" />
<local:FieldEmailView></local:FieldEmailView>
</StackPanel>
</UserControl>
Mais ceci donne l’erreur "La balise 'FieldEmailView" n’existe pas dans l’espace de nommage XML' espace de nom clr-: DynamicXaml123; assembly = DynamicXaml123 '".
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DynamicXaml123;assembly=DynamicXaml123">
<StackPanel Margin="10" HorizontalAlignment="Left">
<TextBox Height="23" Width="100" Text="{Binding FirstName}" />
<TextBox Height="23" Width="100" Text="{Binding LastName}" />
<TextBox Height="23" Width="100" Text="{Binding Age}" />
<local:FieldEmailView></local:FieldEmailView>
</StackPanel>
</UserControl>
Si je laisse de côté la référence d'assemblage, l'erreur sera générée
Message=""XmlNamespace", "Assembly" oder "ClrNamespace"
lors de la lecture du XAML.
Pourquoi ne puis-je pas inclure la référence de l'Assemblée ici, que dois-je changer / vérifier pour que cela fonctionne?
La solution
Lorsque vous chargez cela, vous devez pouvoir résoudre les références d'assemblages. En d’autres termes, cet assemblage doit être disponible pour que l’application puisse être référencée. Une solution consiste à déployer DynamicXaml123 sur le GAC.
Autres conseils
Je suggère de sortir du moniteur de processus et de voir où. Votre application recherche DynamicXaml123. Consultez également le journal de fusion . J'imagine que le comportement de XamlSerializer est différent si vous incluez l'espace de noms, mais cette modification affecte l'emplacement d'exécution de votre assemblage par le moteur d'exécution.
Remarque, il peut y avoir un certain décalage entre la configuration de fuslogvw et le moment où il commence réellement à se connecter.