Por que a adição de uma montagem em um arquivo XAML dar um erro?
-
07-07-2019 - |
Pergunta
Eu tenho um aplicativo que lê em XAML dinâmica de arquivos como este:
StreamReader sr = new StreamReader(pathAndFileName);
this.Content = XamlReader.Load(sr.BaseStream);
Em um desses arquivos XAML que é carregado em (todos eles tiveram o seu código por trás removido), isso funciona:
<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>
Mas isso dar o erro "A tag 'FieldEmailView' não existe no namespace XML 'clr-namespace: DynamicXaml123; montagem = 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 eu deixar de fora a referência de montagem, em seguida, ele recebe o erro
Message=""XmlNamespace", "Assembly" oder "ClrNamespace"
na leitura do XAML.
Por que não posso incluir a referência Assembléia aqui, o que eu tenho que alterar / verificar para chegar a este trabalho?
Solução
Quando você carregar este, você precisa ser capaz de resolver as referências de montagem. Em outras palavras, esta assembléia deve estar disponível para que o aplicativo de referência contra -. Uma maneira de fazer isso seria para implantar DynamicXaml123 ao GAC
Outras dicas
Eu sugiro sair processo de monitor e vendo onde seu aplicativo está procurando dynamicxaml123. Verifique o registo de fusão também. Eu acho que o comportamento na XamlSerializer é diferente se você incluir o namespace do que quando você não faz, e que a mudança está afetando onde o tempo de execução está picando em torno de sua montagem.
Note, pode haver algum atraso entre a criação de fuslogvw e quando ele realmente começa a registar.