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

时间:2015-01-21 16:14:06

标签: c# wpf xaml windows-phone-8 windows-phone-8.1

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

我一直在接受一个神秘的例外,在找出如何修复它时根本没有帮助:

  1. 从模板Visual C#>创建一个新项目。商店应用> Windows Phone应用程序>空白应用程序(Windows Phone)。
  2. 构建和部署,效果很好。 MainPage.xaml的属性声明Build Action是Page,这是正确的。
  3. 根据包含原始项目的解决方案中相同类别的类库(Windows Phone)模板创建一个新项目,将其命名为 MyApp.Views
  4. 使用剪切和粘贴命令将MainView.xaml文件移动到新创建的项目。
  5. MyApp.Views 的引用添加到原始项目中。
  6. 构建,部署,查看应用程序启动和找不到视图,只是为了将此异常传播回开发人员框:ComException错误HRESULT E_FAIL已从通话中返回一个COM组件。这并没有说任何有用的东西,顶部堆栈框架是Windows.UI.Xaml.Controls.Frame.Navigate(Type sourcePageType, Object parameter)跟随第一个,TheOriginalProject.App.OnLaunched(LaunchActivatedEventArgs e)
  7. 解决方案是不要将NavigationService与包URI一起使用,因为它似乎在Windows Phone 8中不存在,或者至少默认情况下在Blank App模板中没有引用包含它的程序集。无论如何,我非常喜欢强类型视图名称而非包URI。

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

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

    我现在看到的是Windows.UI.Xaml.Markup.XamlParseException,其中包含解析器内部错误的WinRT信息:对象编写器'%0' 以及无法加载的其他信息。 x:Class属性出现在异常对话框窗口提示的位置128,this thread似乎相关,但我无法解决问题。

    请注意,我也会在确认没有收到错误的人身上找到值。如果您已经尝试过重现并且无法重现问题的步骤,请写下评论,以便我可以确定导致我遇到的错误的原因。

1 个答案:

答案 0 :(得分:-1)

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

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