2009-09-16 2 views
1

I는 다음과 같이 동적으로 XAML에서 읽는 응용 프로그램을 파일있어 :XAML 파일에서 어셈블리를 추가하면 오류가 발생하는 이유는 무엇입니까?

에로드되는 그 XAML 파일 중 하나에서
StreamReader sr = new StreamReader(pathAndFileName); 
this.Content = XamlReader.Load(sr.BaseStream); 

(그들은 모두 뒤에 제거 자신의 코드를 가지고있다),이 작품 :

<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'"에 존재하지 않습니다. 내가 어셈블리 참조를 생략하면 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;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" 

을 가져옵니다.

여기에 어셈블리 참조를 포함 할 수없는 이유는 무엇입니까?이 기능을 사용하려면 무엇을 변경/확인해야합니까?

답변

1

로드 할 때 어셈블리 참조를 해결할 수 있어야합니다. 즉,이 어셈블리는 응용 프로그램에서 참조 할 수 있어야합니다.이를 수행하는 한 가지 방법은 DynamicXaml123을 GAC에 배포하는 것입니다.

+0

다른 방법이 있습니까? 나는이 어셈블리 참조에서 작동하는 GAC에 배포되지 않은 다른 유사한 응용 프로그램을 가지고 있습니다. 어떻게 다른 방법이있을 수 있습니까? –

+0

어셈블리를 GAC에 넣을 필요가 없다고 생각합니다. AppDomain에 어셈블리를로드하면 작동 할 것입니다. –

+0

@ 토마스 - 사실, 의도적으로 "한 가지 방법"으로 시도하여 이것이 유일한 방법이라는 인상을주지 마십시오. @Edward - 모델이 이미 앱 도메인에로드 된 경우 GAC에서 모델을 가져올 필요가 없습니다. XAML을로드하기 전에 참조 된 어셈블리를로드해야합니다. –

0

나는 process monitor을 알아 내고 앱에서 dynamicxaml123을 찾고있는 곳을 제안합니다. fusion log도 확인하십시오. 네임 스페이스를 포함하지 않으면 XamlSerializer의 동작이 다르다는 것을 추측 할 수 있습니다. 네임 스페이스를 포함하지 않을 때보 다 네임 스페이스를 포함하면 런타임에 어셈블리에서 파생되는 위치가 변경됩니다.

참고로 fuslogvw 설정과 실제로 로그하기 시작할 때 약간의 시간 차이가있을 수 있습니다.

+0

또한, 당신이 생각하는 것은 실제로 일어나지 않을 수도 있습니다 ... 자신을 두 번 확인하고 아무 것도하지 않는 것이 가장 좋습니다. – Will

관련 문제