Почему при добавлении сборки в файл XAML выдается ошибка? - PullRequest
1 голос
/ 16 сентября 2009

У меня есть приложение, которое динамически читает в файлах XAML:

StreamReader sr = new StreamReader(pathAndFileName);
this.Content = XamlReader.Load(sr.BaseStream);

В одном из тех файлов XAML, который загружается (у всех их код удален), это работает:

<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>

Но это выдает ошибку "Тег 'FieldEmailView' не существует в пространстве имен 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>

Если я пропущу ссылку на сборку, она получит ошибку

Message=""XmlNamespace", "Assembly" oder "ClrNamespace"

при чтении в XAML.

Почему я не могу включить сюда ссылку на сборку, что мне нужно изменить / проверить, чтобы это заработало?

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Когда вы загружаете это, вам нужно разрешить ссылки на сборки. Другими словами, эта сборка должна быть доступна для приложения, на которую можно ссылаться - один из способов сделать это - развернуть DynamicXaml123 в GAC.

0 голосов
/ 16 сентября 2009

Я бы посоветовал достать монитор процесса и посмотреть, где ваше приложение ищет dynamicxaml123. Проверьте также fusion log . Я предполагаю, что поведение в XamlSerializer будет другим, если вы включите пространство имен, чем когда вы этого не сделаете, и это изменение влияет на то, где среда выполнения ищет вашу сборку.

Обратите внимание, что может быть некоторая задержка между настройкой fuslogvw и тем, когда он действительно начинает регистрироваться.

...