2009-09-16 2 views
1

У меня есть приложение, которое читает в XAML файлы динамически, как это:Почему добавление сборки в файл 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: 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.

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

ответ

1

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

+0

Есть ли другой способ сделать это? У меня есть другое подобное приложение, которое, как я знаю, не разворачивается в GAC, который работает с этой ссылкой на сборку. Как это могло быть, есть ли другой путь? –

+0

Я не думаю, что вам нужно поставить сборку в GAC ... это, вероятно, будет работать, если вы просто загрузите сборку в AppDomain –

+0

@Thomas. Это правда, я сознательно использовал формулировку «в одну сторону», чтобы попытаться не создавайте впечатление, что это единственный способ. @Edward - если ваша модель уже загружена в домен приложения, вам не нужно забирать ее из GAC. Просто убедитесь, что вы загрузили ссылку на сборку перед загрузкой XAML. –

0

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

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

+0

Кроме того, то, что вы считаете происходящим, на самом деле не может быть тем, что происходит ... лучше всего проверить себя и не предполагать ничего. – Will

 Смежные вопросы

  • Нет связанных вопросов^_^