UWP:从DLL加载页面

UWP:从DLL加载页面,uwp,prism,portable-class-library,uwp-xaml,Uwp,Prism,Portable Class Library,Uwp Xaml,我使用VS2015(更新3)创建了一个“空白应用程序(通用Windows)” 然后,我将“类库(通用Windows)”项目添加到同一解决方案中,并将MainPage.xaml从“空白应用程序”项目移动到“类库”项目中的“视图”文件夹中(我还更改了xaml和CS中的名称空间,以包括“视图”) 最后,我引用了“Blank Application”项目中的“类库”项目,在app.xaml.cs中添加了“Views”命名空间的“using”,并尝试运行“Blank Application”项目 由于Sy

我使用VS2015(更新3)创建了一个“空白应用程序(通用Windows)”

然后,我将“类库(通用Windows)”项目添加到同一解决方案中,并将MainPage.xaml从“空白应用程序”项目移动到“类库”项目中的“视图”文件夹中(我还更改了xaml和CS中的名称空间,以包括“视图”)

最后,我引用了“Blank Application”项目中的“类库”项目,在app.xaml.cs中添加了“Views”命名空间的“using”,并尝试运行“Blank Application”项目

由于System.AccessViolationException:“试图读取或写入受保护的内存。这通常表示其他内存已损坏”

“空白应用程序”项目和“类库”项目的目标都是通用Windows,目标版本为“10.0(10586)”,最低版本为“10.0(10240)”。这两个项目还参考了PRISM以及“可移植类库”targeting.NET Framework 4.5、“ASP.NET Core 1.0”、“Windows 8”、“Windows Phone 8.1”、“Windows Phone Silverlight 8”、“Xamarin.Android”、“Xamarin.iOS”和“Xamarin.iOS(Classic)”——与PRISM.Core中的目标列表相同


我是否在尝试做一些不被允许的事情?我所希望的就是能够根据功能组将我的视图分解为单独的DLL。

我能够复制这个问题。这很有趣,我打算将我所有的XAML页面移动到一个DLL中,这样我就有了一个干净的解决方案并构建了不同的应用程序层,今天我看到了这个问题。这对我来说是个危险信号,所以我开始寻找文档和解决方法。经过3个小时的研究,我认为与其在线搜索,不如自己找到一种方法,然后在我的主页上通过UWP解决方案创建一个内容控件

<Page
    x:Class="App8.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App8"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <ContentControl x:Name="MainControl" />
</Page>

你能告诉我们你是怎么导航的吗?使用Prism?@Bart,还没有使用Prism-只是添加了一个参考,这样我就可以开始使用它了。对启动的唯一更改是将视图命名空间添加到app.xaml.cs,以便运行默认启动(rootFrame.Navigate(typeof(MainPage),e.Arguments);)代码。我随后删除了对PRISM的所有引用,问题依然存在。哇!现在快2019年了,微软还没有解决这个问题。他们是否期望每个UWP开发人员都不知道良好的软件实践?
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.Loaded += MainPage_Loaded;
    }

    private void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        MainControl.Content = new ClassLibrary1.MainPage();
    }
}