【发布时间】:2020-12-08 10:45:32
【问题描述】:
如何复制(我们将以 Windows 终端为例):
-
克隆 Windows 终端存储库并获取子模块
-
使用带有一些随机控件的
UserControl在解决方案中创建一个 C# Windows 运行时组件 -
从您要在其中托管
UserControl的项目中引用 C# WinRT 组件 -
在 Windows 终端项目之一中打开 Xaml 页面(我们将使用来自
TerminalAppLib项目的TerminalPage.xaml作为示例) -
将
UserControl添加到该页面 -
编译并运行(您可能需要将生成的
UserControl到pch.h文件的 Xaml 编译文件包含在内,以便在没有 Xaml 编译器错误的情况下进行编译) -
你会发现应用会因为
class not registered异常而崩溃
我尝试过的:
-
使用
Class Library代替WinRT Component -
https://github.com/asklar/WinRTComponent/blob/master/README.md
-
在
WindowsTerminal.manifest文件中注册课程,像这样(当我尝试使用Class Library时,我使用.dll而不是.winmd):
<file name="myWinRTComponent.winmd" hashalg="SHA1" xmlns:winrt="urn:schemas-microsoft-com:winrt.v1">
<winrt:activatableClass name="Namespace.UserControlClass" threadingModel="both" />
</file>
- 在
AppxManifest.xml文件中手动注册课程
【问题讨论】:
-
您可以尝试将 xmlns 语句
xmlns:runtimecom="using:RuntimeComponent"添加到 MainPage.xaml 文件中。 -
@YanGu-MSFT 这实际上是我用来将 C# WinRT 组件中的
UserControl添加到 C++/WinRT Xaml Islands 项目中的页面中 -
您可以尝试将 C# 组件的最低版本设置为 Windows 10 版本 1703 (Build 15063) 或更低版本:在您的 C# 项目中,转到 Properties、Library,然后在 Targeting 下将 Min version 设置为Windows 10 创意者更新(10.0;内部版本 15063)或更低版本。
-
@YanGu-MSFT 没用,同样的错误
标签: c# c++ xaml c++-winrt xaml-islands