Perché l'aggiunta di un assembly in un file XAML darebbe un errore?
-
07-07-2019 - |
Domanda
Ho un'applicazione che legge dinamicamente i file XAML in questo modo:
StreamReader sr = new StreamReader(pathAndFileName);
this.Content = XamlReader.Load(sr.BaseStream);
In uno di quei file XAML che vengono caricati (a tutti è stato rimosso il codice), funziona:
<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>
Ma questo dà l'errore " Il tag 'FieldEmailView' non esiste nello spazio dei nomi XML 'clr-namespace: 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>
Se tralascio il riferimento all'assembly, viene visualizzato l'errore
Message=""XmlNamespace", "Assembly" oder "ClrNamespace"
durante la lettura in XAML.
Perché non posso includere qui il riferimento dell'Assemblea, cosa devo cambiare / controllare per farlo funzionare?
Soluzione
Quando lo carichi, devi essere in grado di risolvere i riferimenti di assieme. In altre parole, questo assembly deve essere disponibile affinché l'applicazione possa fare riferimento: un modo per farlo sarebbe distribuire DynamicXaml123 nel GAC.
Altri suggerimenti
Suggerirei di uscire monitor di processo e di vedere dove la tua app sta cercando dynamicxaml123. Controlla anche il log di fusione . Immagino che il comportamento in XamlSerializer sia diverso se includi lo spazio dei nomi rispetto a quando non lo fai, e tale modifica influisce sul runtime del runtime per il tuo assembly.
Nota, potrebbe esserci un certo ritardo tra la configurazione di fuslogvw e l'avvio effettivo della registrazione.