1

我有一个像这样动态读取 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>

但这会给出错误“XML 命名空间 'clr-namespace:DynamicXaml123;assembly=DynamicXaml123' 中不存在标签 'FieldEmailView'”。

<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 中读取时。

为什么我不能在此处包含程序集参考,我必须更改/检查什么才能使其正常工作?

4

2 回答 2

1

当您加载它时,您需要能够解析程序集引用。换句话说,该程序集必须可供应用程序引用 - 一种方法是将 DynamicXaml123 部署到 GAC。

于 2009-09-16T12:29:34.320 回答
0

我建议退出进程监视器并查看您的应用程序在哪里寻找 dynamicxaml123。还要检查融合日志。我猜 XamlSerializer 中的行为如果包含命名空间与不包含命名空间时不同,并且该更改会影响运行时在哪里寻找程序集。

请注意,设置 fuslogvw 和它实际开始记录之间可能会有一些延迟。

于 2009-09-16T12:35:25.077 回答