与 WPF .NET 的差异

本文介绍了 .NET 与 .NET Framework 上的 Windows Presentation Foundation (WPF) 之间的差异。 WPF for .NET 是一个开放源代码框架,它从原始 WPF for .NET Framework 源代码派生而来。

.NET Framework 有一些 .NET 不支持的功能。 关于不支持的技术的详细信息,请参阅在 .NET 上不可用的 .NET Framework 技术

SDK 样式项目

.NET 使用 SDK 样式的项目文件。 这些项目文件与 Visual Studio 管理的传统 .NET Framework 项目文件不同。 要将 .NET Framework WPF 应用迁移到 .NET,必须转换项目。 有关详细信息,请参阅如何将 WPF 桌面应用升级到 .NET 7

NuGet 包引用

如果 .NET Framework 应用在 packages.config 文件中列出其 NuGet 依赖项,请迁移为 <PackageReference> 格式:

  1. 在 Visual Studio 中,打开“解决方案资源管理器”窗格。
  2. 在 WPF 项目中,右键单击“packages.config”>“将 packages.config 迁移到 PackageReference”

Visual Studio 中解决方案资源管理器的上下文菜单,其中显示了“Migrate packages.config”项。

将出现一个对话框,显示计算出的顶级 NuGet 依赖关系,并询问应将其他哪些 NuGet 包提升到顶级。 选择“确定”,然后将“packages.config”文件从项目中删除,并将 <PackageReference> 元素添加到项目文件中。

当项目使用 <PackageReference> 时,包不会存储在本地“Packages”文件夹中,而是全局存储。 打开项目文件,删除任何引用到“Packages”文件夹的 <Analyzer> 元素。 这些分析器会自动包含在 NuGet 包引用中。

代码访问安全性

.NET 不支持代码访问安全性 (CAS)。 在完全信任的前提下,处理所有与 CAS 相关的功能。 WPF for .NET 会删除与 CAS 相关的代码。 这些类型的公共 API 表面仍然存在,以确保对这些类型的调用成功。

公开定义的 CAS 相关类型被移出 WPF 程序集,并移入 Core .NET 库程序集中。 WPF 程序集将类型转发设置为移动类型的新位置。

源程序集 目标程序集 类型
WindowsBase.dll System.Security.Permissions.dll MediaPermission
MediaPermissionAttribute
MediaPermissionAudio
MediaPermissionImage
MediaPermissionVideo
WebBrowserPermission
WebBrowserPermissionAttribute
WebBrowserPermissionLevel
System.Xaml.dll System.Security.Permissions.dll XamlLoadPermission
System.Xaml.dll System.Windows.Extension.dll XamlAccessLevel

注意

为了最大限度地减少移植摩擦,XamlAccessLevel 类型中保留了用于存储和检索与以下属性有关的信息的功能。

  • PrivateAccessToTypeName
  • AssemblyNameString