Frame.Navigate到另一个程序集中的Page派生类

我想将Windows Phone 8基于空白应用程序模板的视图保存在与包含应用程序清单和App.xaml的程序集不同的程序集中。

我一直收到一个神秘的例外,它在弄清楚如何解决它时根本没有帮助:

  1. 从模板Visual C#> Store Apps> Windows Phone Apps> Blank App(Windows Phone)创建一个新项目。
  2. 构建和部署,效果很好。 MainPage.xaml的属性声明Build Action是Page,这是正确的。
  3. 基于包含原始项目的解决方案中相同类别的类库(Windows Phone)模板创建一个新项目,将其命名为MyApp.Views
  4. 使用剪切和粘贴命令将MainView.xaml文件移动到新创建的项目。
  5. 将对MyApp.Views的引用添加到原始项目。
  6. 构建,部署,查看应用程序启动和找不到视图只是为了将此exception传播回开发人员的框: ComException错误HRESULT E_FAIL已从调用COM组件返回。 这并没有说绝对任何有用的东西,顶部堆栈框架是Windows.UI.Xaml.Controls.Frame.Navigate(Type sourcePageType, Object parameter)紧跟第一个,即TheOriginalProject.App.OnLaunched(LaunchActivatedEventArgs e)

解决方案是不使用带有包URI的NavigationService ,因为它似乎在Windows Phone 8中不存在,或者至少默认情况下在Blank App模板中没有引用包含它的程序集。 无论如何,我非常喜欢强类型视图名称而不是包URI。

我想有人必须已经遇到这个问题,有什么问题? 是否有API或工具可以让我了解来自COM的最新E_FAIL是什么?

编辑:当使用Window.Current.Content = new MainPage()作为OnLaunched的唯一内容时,会弹出XAML解析器exception。 它无法填充exception消息,但绝对可以更好地提示正在发生的事情。 但是,仍然没有解决方案,问题只转移到MainPage构造函数中的this.InitializeComponent()

我现在看到的是Windows.UI.Xaml.Markup.XamlParseException ,包含Parser内部错误的 WinRT信息:对象编写器’%0′和无法加载的附加信息。 x:Class属性出现在exception对话框窗口提示的位置128, 这个线程似乎相关,但我无法弄清楚如何。

请注意,我也会在确认没有收到错误的人身上找到值。 如果您已经尝试了重现并且无法重现问题的步骤,请写一条评论,以便我可以确定导致我正在努力解决的错误。

将视图外部化到单独项目同时避免此问题的替代解决方案是使用共享项目项目类型,将视图放在那里并从主项目中引用它。

这不会为视图生成单独的程序集,而是将文件分组到其自定义项目中,但在编译期间表现得好像它们是主项目的一部分。 错误消失了,因为从编译器的角度来看,共享项目中的文件与主项目中的文件之间没有区别。 在运行时,视图的类型不需要从不同的程序集中解析,它就在同一个程序集中。