我有一个非常简单的uwp应用程序,其中引用了一个类库,该类库显然也是uwp项目,并具有一个Custom ContentDialog。当我直接将其作为项目引用时,它将正常工作,并且ContentDialog也将打开。但是,当我删除该项目并使用其生成的dll(用于调试模式的Debug和用于Release模式的Release)并引用该dll时,我在该ContentDialog的构造函数中得到了xaml Parse异常。
UWP客户端应用代码
public sealed partial class MainPage : Page
{
private async Task Test()
{
var exitNode = new ExitNodeCode.ExitNode();
await exitNode.AskForPermissionPopup();
}
public MainPage() => InitializeComponent();
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
await Test();
base.OnNavigatedTo(e);
}
}
在 Test()方法上引发了异常,但是堆栈跟踪(用breakpoint确认)导致该自定义contentDialog的构造函数中的InitializeComponent()方法。
类库项目中的方法
public async Task AskForPermissionPopup()
{
var dialog = new PermissionDialog();
await dialog.ShowAsync();
}
自定义内容对话框的xaml
<ContentDialog
x:Class="ExitNodeCode.PermissionDialog"
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"
PrimaryButtonText="I Agree!"
SecondaryButtonText="Maybe Later"
PrimaryButtonClick="PermissionDialog_PrimaryButtonClick"
SecondaryButtonClick="PermissionDialog_SecondaryButtonClick">
<Grid >
</Grid>
</ContentDialog>
对话框的CS代码
public sealed partial class PermissionDialog : ContentDialog
{
public PermissionDialog()
{
InitializeComponent();
}
}
类库项目由“ Windows运行时组件”项目引用,该项目是后台任务,客户端应用程序引用此后台任务,但是我认为这无关紧要,因为这是xaml解析异常,而后台任务不是甚至在发生异常时注册
答案 0 :(得分:1)
如果在ARM64目标上看到了这一点,则可以通过将其添加到项目中来解决:
<ProperytGroup>
<!-- ARM64 builds for managed apps use .NET Native. We can't use the Reflection Provider for that. -->
<EnableTypeInfoReflection Condition="'$(Configuration)' == 'ARM64'">false</EnableTypeInfoReflection>
</ProperytGroup>
从本质上讲,XAML / .NET层在ARM64上的工作方式有所不同,并且在该边界存在问题。我的理解是Windows SDK的人们正在努力解决这个问题。