如何将 UWP 类库链接到 WPF 应用程序?
Posted
技术标签:
【中文标题】如何将 UWP 类库链接到 WPF 应用程序?【英文标题】:How to link UWP Class Library into an WPF Application? 【发布时间】:2021-10-19 18:07:18 【问题描述】:
我创建了一个带有单个测试类的 UWP 类库。我有一个想要使用该类库的 WPF .NET 应用程序。我需要遵循哪些步骤?
在this tutorial 之后,我想在我的应用程序MyApp
中添加库MyLib
。但我发现以下编译器错误,
严重性代码描述项目文件行抑制状态 错误 NU1201 项目 MyLib 与 netcoreapp3.1 不兼容 (.NETCoreApp,版本=v3.1)。 MyLib 项目支持: uap10.0.19041 (UAP,Version=v10.0.19041) MyApp C:\Users....\MyApp.csproj
##更新
添加以下代码后,
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MyLib\MyLib.csproj" />
</ItemGroup>
</Project>
正如 TamBui 在答案中所建议的,我遇到了构建错误。但是,从一开始就有两个编译器警告。有什么线索就分享一下,
警告 NETSDK1137 不再需要使用 Microsoft.NET.Sdk.WindowsDesktop SDK。考虑更改 SDK 根 Project 元素的属性 'Microsoft.NET.Sdk'。 MyApp C:\Program Files\dotnet\sdk\5.0.103\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.targets 376
警告 MSB3270 处理器之间不匹配 正在构建的项目架构“MSIL”和处理器 参考架构 "C:\Users...\MyLib\bin\x64\Debug\MyLib.dll", “AMD64”。这种不匹配可能会导致运行时失败。请考虑 通过更改项目的目标处理器架构 配置管理器以调整处理器架构 在您的项目和参考之间,或依赖于 具有与目标相匹配的处理器架构的参考 项目的处理器架构。 MyApp C:\程序文件 (x86)\微软视觉 Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets 2123
【问题讨论】:
您的 UWP 类库是 .NET 5 库吗? .NET 标准?因为它应该与 .NET Standard 兼容,但可能与 .NET 5 不兼容。 @TamBui 如何查看? 我的错,我走错了方向。请阅读我的答案。 【参考方案1】:WPF 应用程序无法引用 UWP 类库。总之,两个不同的平台或框架是不兼容的。
您应该将类库的目标框架 (MyLib.csproj
) 更改为 .NET Standard 或 WPF 应用所针对的相同框架:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
【讨论】:
WPF 应用程序可以引用 UWP 类库,甚至可以在 WPF 应用程序中托管 UWP 控件。看看“XAML Islands”,你会发现它是可能的。当然,一旦 WinUI 3 出现,所有这些都应该越来越没有实际意义。 我知道可以在 WPF 应用中托管 UWP 控件,但您仍然不应该从桌面应用中引用 UWP 类库。【参考方案2】:您需要将与您的 UWP 项目的目标版本匹配的 AssetTargetFallback
添加到您的 WPF 项目的 PropertyGroup
。在解决方案资源管理器中选择您的 WPF 项目,您将能够编辑该项目的属性。
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_68824006</RootNamespace>
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
<UseWPF>true</UseWPF>
</PropertyGroup>
【讨论】:
请看我更新的帖子。遵循您的建议后不再出现编译器错误,但现在出现构建错误。 这些是警告,而不是错误。要摆脱第一个警告,请将项目中的第一行编辑为<Project Sdk="Microsoft.NET.Sdk"
。要消除第二个警告,您需要将 WPF 项目的平台体系结构与 UWP 项目的体系结构相匹配。为此,请在解决方案资源管理器中右键单击您的解决方案并选择“配置管理器...”
无论如何构建错误让我感到沮丧。无论如何要知道问题出在哪里?
您遇到的构建错误是什么?在您之前的评论中,您说“在遵循您的建议后不再存在编译器错误”。然后,您发布了两个警告。我没有看到您发布任何构建错误,除非我错过了它?以上是关于如何将 UWP 类库链接到 WPF 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章