“UWP class 库 dll 中的 XamlParseException
"XamlParseException in UWP class library dll
我正在开发通用 class 库,旨在使用 UWP 应用程序。
在此尝试使用内容对话框获取一些用户输入。
在调试中一切正常,当我将我的库打包为 dll 并分发时,ContentDialog 没有从引用我的 dll 的应用程序中显示。
我收到 Windows.UI.Xaml.Markup.XamlParseException: XAML parsing failed
异常,我是通过日志文件得到的。
这是我的代码
内容对话框
<ContentDialog
x:Class="xxxx.yyyy.InputContentDialogue"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="dialog"
Title="Title">
<ContentDialog.Resources>
<Style x:Name="ButtonStyleNoTabFocus" TargetType="Button">
<Setter Property="FocusVisualPrimaryBrush" Value="Transparent" />
<Setter Property="Margin" Value="5"/>
</Style>
</ContentDialog.Resources>
<!-- Content body -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="0,20" MinWidth="550">
<StackPanel Orientation="Vertical">
<TextBlock TextWrapping="WrapWholeWords" Margin="5,0,0,10">
shkgdsakjfdhgsajkfdhkasd sadkfjahsdkj asdfjasfdja asdkfjasdf asdkjfnas asdkjfnasd
</TextBlock>
<TextBlock Margin="5,0,0,10">sjkdhfkjsdf sdajfakjdsb sadfkajsdfa.
</TextBlock>
<StackPanel Orientation="Horizontal">
<Button TabIndex="0"
HorizontalAlignment="Center"
Content="hey there"
Style="{StaticResource ButtonStyleNoTabFocus}"
x:Name="btn1"
Click="btn1_Click"
GotFocus="Btn_GotFocus"
LostFocus="Btn_LostFocus"/>
<Button HorizontalAlignment="Center"
Content="Hi"
x:Name="btn2"
Style="{StaticResource ButtonStyleNoTabFocus}"
Click="btn2_Click"
GotFocus="Btn_GotFocus"
LostFocus="Btn_LostFocus"/>
<Button HorizontalAlignment="Center"
Content="Hello"
Style="{StaticResource ButtonStyleNoTabFocus}"
x:Name="btn3"
Click="btn3_Click"
GotFocus="Btn_GotFocus"
LostFocus="Btn_LostFocus"/>
</StackPanel>
</StackPanel>
</Grid>
ContentDialog.cs
public sealed partial class InputContentDialogue : ContentDialog
{
public UserConsentContentDialogue()
{
this.InitializeComponent();
this.Result = -1;
this.Closing += ContentDialogue_Closing;
}
private void ContentDialogue_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
if (args.Result == ContentDialogResult.None && this.Result == -1)
{
args.Cancel = true;
}
}
public int Result { get; set; }
// Handle the button clicks from dialog
private void btn1_Click(object sender, RoutedEventArgs e)
{
this.Result = 0;
// Close the dialog
dialog.Hide();
}
private void btn2_Click(object sender, RoutedEventArgs e)
{
this.Result = 1;
// Close the dialog
dialog.Hide();
}
private void btn3_Click(object sender, RoutedEventArgs e)
{
this.Result = 2;
// Close the dialog
dialog.Hide();
}
private void Btn_GotFocus(object sender, RoutedEventArgs e)
{
Brush _blinkBrush = Application.Current.Resources["SystemControlHighlightAccentBrush"] as SolidColorBrush;
(sender as Button).BorderBrush = _blinkBrush;
}
private void Btn_LostFocus(object sender, RoutedEventArgs e)
{
(sender as Button).BorderBrush = new SolidColorBrush(Colors.Transparent);
}
}
我正在创建一个新实例并尝试显示对话框,就像这样
internal static async Task<int> ShowMyContentDialog()
{
try
{
InputContentDialogue dialogue = new InputContentDialogue();
await dialogue.ShowAsync();
return dialogue.Result;
}
catch(Exception e)
{
FileOperations.WriteToLogFile("ERROR occurred "+ e.ToString());
}
return -1;
}
一切正常,如果我在代码库中引用这个库。
如果我获得发布 dll 并从测试应用程序引用它,我会得到 xaml 解析异常。
任何人都可以帮助我。
提前致谢。
Everything works good , if I refer this library in code base. If I get release dll and refer it from a test app, am getting the xaml parse exception.
问得好,问题是你的 dll 文件缺少 Xaml 内容。当你编译一个包含xaml文件的dll时,它会被记录到xxxx.xr.xml个文件中,这些文件也必须复制到bin目录中( 但不是您的应用程序的 Obj 文件夹),具有相对路径。构建class库后,请检查bin文件夹是否包含dll、pdb、pri和dll资源文件夹,如下所示。
对于测试,如果您直接将 class 库 bin 文件夹中的 dll 文件添加到您的项目引用中,它将起作用。
终于,我找到了解决办法。
感谢@Nico 的回答,问题差不多就解决了
这是 link,它让您清楚地了解问题
步数
1) 在您的项目属性中检查 "Generate library layout"
2) 从 bin/release 文件夹复制你的 dll 时,也复制这些文件
Class库1(Class库名)文件夹
ClassLibrary1.xr.xml
2.UserControl.xaml(用户控件 XAML 文件)
ClassLibrary1.dll
ClassLibrary1.pri
将所有这些文件保存在您保存库 dll 的同一文件夹中。
只需将您的库 dll 单独引用到引用项目。
将自动引用所有其他文件。
我正在开发通用 class 库,旨在使用 UWP 应用程序。
在此尝试使用内容对话框获取一些用户输入。
在调试中一切正常,当我将我的库打包为 dll 并分发时,ContentDialog 没有从引用我的 dll 的应用程序中显示。
我收到 Windows.UI.Xaml.Markup.XamlParseException: XAML parsing failed
异常,我是通过日志文件得到的。
这是我的代码
内容对话框
<ContentDialog
x:Class="xxxx.yyyy.InputContentDialogue"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="dialog"
Title="Title">
<ContentDialog.Resources>
<Style x:Name="ButtonStyleNoTabFocus" TargetType="Button">
<Setter Property="FocusVisualPrimaryBrush" Value="Transparent" />
<Setter Property="Margin" Value="5"/>
</Style>
</ContentDialog.Resources>
<!-- Content body -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="0,20" MinWidth="550">
<StackPanel Orientation="Vertical">
<TextBlock TextWrapping="WrapWholeWords" Margin="5,0,0,10">
shkgdsakjfdhgsajkfdhkasd sadkfjahsdkj asdfjasfdja asdkfjasdf asdkjfnas asdkjfnasd
</TextBlock>
<TextBlock Margin="5,0,0,10">sjkdhfkjsdf sdajfakjdsb sadfkajsdfa.
</TextBlock>
<StackPanel Orientation="Horizontal">
<Button TabIndex="0"
HorizontalAlignment="Center"
Content="hey there"
Style="{StaticResource ButtonStyleNoTabFocus}"
x:Name="btn1"
Click="btn1_Click"
GotFocus="Btn_GotFocus"
LostFocus="Btn_LostFocus"/>
<Button HorizontalAlignment="Center"
Content="Hi"
x:Name="btn2"
Style="{StaticResource ButtonStyleNoTabFocus}"
Click="btn2_Click"
GotFocus="Btn_GotFocus"
LostFocus="Btn_LostFocus"/>
<Button HorizontalAlignment="Center"
Content="Hello"
Style="{StaticResource ButtonStyleNoTabFocus}"
x:Name="btn3"
Click="btn3_Click"
GotFocus="Btn_GotFocus"
LostFocus="Btn_LostFocus"/>
</StackPanel>
</StackPanel>
</Grid>
ContentDialog.cs
public sealed partial class InputContentDialogue : ContentDialog
{
public UserConsentContentDialogue()
{
this.InitializeComponent();
this.Result = -1;
this.Closing += ContentDialogue_Closing;
}
private void ContentDialogue_Closing(ContentDialog sender, ContentDialogClosingEventArgs args)
{
if (args.Result == ContentDialogResult.None && this.Result == -1)
{
args.Cancel = true;
}
}
public int Result { get; set; }
// Handle the button clicks from dialog
private void btn1_Click(object sender, RoutedEventArgs e)
{
this.Result = 0;
// Close the dialog
dialog.Hide();
}
private void btn2_Click(object sender, RoutedEventArgs e)
{
this.Result = 1;
// Close the dialog
dialog.Hide();
}
private void btn3_Click(object sender, RoutedEventArgs e)
{
this.Result = 2;
// Close the dialog
dialog.Hide();
}
private void Btn_GotFocus(object sender, RoutedEventArgs e)
{
Brush _blinkBrush = Application.Current.Resources["SystemControlHighlightAccentBrush"] as SolidColorBrush;
(sender as Button).BorderBrush = _blinkBrush;
}
private void Btn_LostFocus(object sender, RoutedEventArgs e)
{
(sender as Button).BorderBrush = new SolidColorBrush(Colors.Transparent);
}
}
我正在创建一个新实例并尝试显示对话框,就像这样
internal static async Task<int> ShowMyContentDialog()
{
try
{
InputContentDialogue dialogue = new InputContentDialogue();
await dialogue.ShowAsync();
return dialogue.Result;
}
catch(Exception e)
{
FileOperations.WriteToLogFile("ERROR occurred "+ e.ToString());
}
return -1;
}
一切正常,如果我在代码库中引用这个库。 如果我获得发布 dll 并从测试应用程序引用它,我会得到 xaml 解析异常。
任何人都可以帮助我。
提前致谢。
Everything works good , if I refer this library in code base. If I get release dll and refer it from a test app, am getting the xaml parse exception.
问得好,问题是你的 dll 文件缺少 Xaml 内容。当你编译一个包含xaml文件的dll时,它会被记录到xxxx.xr.xml个文件中,这些文件也必须复制到bin目录中( 但不是您的应用程序的 Obj 文件夹),具有相对路径。构建class库后,请检查bin文件夹是否包含dll、pdb、pri和dll资源文件夹,如下所示。
对于测试,如果您直接将 class 库 bin 文件夹中的 dll 文件添加到您的项目引用中,它将起作用。
终于,我找到了解决办法。
感谢@Nico 的回答,问题差不多就解决了
这是 link,它让您清楚地了解问题
步数
1) 在您的项目属性中检查 "Generate library layout"
2) 从 bin/release 文件夹复制你的 dll 时,也复制这些文件
Class库1(Class库名)文件夹
ClassLibrary1.xr.xml
2.UserControl.xaml(用户控件 XAML 文件)
ClassLibrary1.dll
ClassLibrary1.pri
将所有这些文件保存在您保存库 dll 的同一文件夹中。
只需将您的库 dll 单独引用到引用项目。
将自动引用所有其他文件。