uwp xaml解析失败,类库为dll

时间:2019-01-09 18:14:30

标签: c# xaml uwp windows-runtime xamlparseexception

我有一个非常简单的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解析异常,而后台任务不是甚至在发生异常时注册

1 个答案:

答案 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的人们正在努力解决这个问题。