若要启用 ViewModel 和服务单元测试,请创建单独的类库项目。 需要此项目,因为 WinUI 单元测试项目不能直接引用 WinUI 应用项目。
了解 WinUI 类库模板
WinUI 类库项目模板创建专用于 WinUI 3 桌面应用程序的 .NET 托管类库(DLL)。 此模板是 Windows 应用 SDK 的一部分,提供标准 .NET 类库不包含的重要功能。
与 .NET 类库的主要区别
WinUI 类库模板与标准 .NET 类库在几个重要方面有所不同:
-
特定于 Windows 的目标:它面向特定于 Windows 的框架(例如
net8.0-windows10.0.19041.0),而不是跨平台 .NET 框架,从而授予对 Windows API 的访问权限。 -
Windows 应用 SDK 集成:它包括对 NuGet 包的
Microsoft.WindowsAppSDKMicrosoft.Windows.SDK.BuildTools引用,提供对 WinUI 3 和 Windows 应用 SDK API 的访问权限。 -
已启用 WinUI 支持:项目在其配置中包括
<UseWinUI>true</UseWinUI>,从而启用特定于 WinUI 的生成任务和 XAML 编译。 - Windows 运行时标识符:它配置为特定于 Windows 的运行时标识符(win-x86、win-x64、win-arm64)。
为何使用 WinUI 类库?
当你的库需要以下功能时,请使用 WinUI 类库 模板,而不是常规的 .NET 类库:
-
引用 WinUI 3 类型和控件:WinUI 类库模板允许你在库代码中使用命名空间和其他 Windows 应用 SDK API 中的类型
Microsoft.UI.Xaml。 - 包括 XAML 资源:如果库包含 UserControls、自定义控件或其他 XAML 资源,则需要 WinUI 类库模板来正确编译和打包这些资源。
- 与 WinUI 应用集成:该模板配置为与 WinUI 3 桌面应用无缝配合工作,确保与 Windows 应用 SDK 运行时和部署模型兼容。
- 支持 XAML 标记编译:该模板包含将 XAML 文件编译到库中所需的生成任务。
何时使用常规 .NET 类库
当您的库需要时,使用标准 .NET 类库 项目:
- 仅包含纯 .NET 代码(ViewModels、models、services、utilities)
- 不引用任何 WinUI 3 或 Windows 应用 SDK 类型
- 不包含任何 XAML 文件或与 UI 相关的代码
- 需要跨不同的应用程序类型共享(而不仅仅是 WinUI 应用)
- 面向多个平台(例如 .NET MAUI 或 ASP.NET Core)或作系统(例如 Linux 或 macOS)
有关将 .NET 类库添加到解决方案的教程,请参阅 Visual Studio 中的扩展 C# 控制台应用和调试。
对于本教程,请使用 WinUI 类库 模板,因为它允许将来根据需要引用 WinUI 类型,并且专门设计为与 WinUI 3 应用程序集成。 虽然 ViewModel 和服务当前不需要 WinUI 类型,但使用此模板可提供灵活性,并确保与 Windows 应用 SDK 环境正确集成。
创建 WinUINotes.Bus 项目
创建一个名为 WinUINotes.Bus 的新 WinUI 类库项目,用于在与 WinUI 应用项目相同的解决方案中存放 ViewModels、模型和服务。
在 Visual Studio 中,右键单击 解决方案资源管理器中的解决方案。
选择“ 添加新>项目...”。
选择 WinUI 类库 模板,然后选择“ 下一步”。
注释
请确保选择 WinUI 类库,而不仅仅是 类库。 WinUI 类库模板包括对 Windows 应用 SDK 和 WinUI 3 框架的引用。
** 将项目命名为
WinUINotes.Bus并选择 创建。删除默认
Class1.cs文件。
添加项目引用
项目引用使 WinUI 应用项目能够使用类库项目中定义的 ViewModels 和服务:
- 右键单击 WinUINotes 项目,然后选择“ 添加>项目引用...”。
- 检查 WinUINotes.Bus 项目,然后选择“ 确定”。
总线项目包含你的 ViewModels、模型和服务,因此你可以在不依赖 UI 层的情况下独立测试它们。
注释
术语“Bus”表示充当通信层或中介的项目。 它包含可独立于 UI 共享和测试的呈现逻辑(ViewModels)、业务逻辑(模型)和服务。