在 WPF .NET Core 8.0 类型的项目中使用使用 Store API 的 .NET Standard 2.0 库时出现问题

问题描述 投票:0回答:1

各位 MSFT 开发人员大家好,

为了您的方便,我创建了一个示例项目,可在

获取

https://github.com/JiyaDesai-FandCo/WpfAppdotnet8

我们在库(.NET Standard 2.0 类型)中拥有大量使用 Store API、Addon 等内容的现有代码。我们在所有商店应用程序项目中重用这个库。目前该库用于 WPF (.NET 4.8) 和 UWP 项目,一切运行良好。

当我们决定使用 .NET Core 8.0 创建 WPF 项目时出现问题,这就是我们无法使用该库的地方。

现在让我解释一下 github 上的示例项目,您可以下载、探索并帮助我们识别问题或解决方法。目的是在所有类型的项目中重用库。 (带有 .NET 4.8 的 WPF、带有 .NET Core 8.0 的 UWP 和 WPF)。请记住,我们将在商店上发布它。

另请注意:调试时,请始终仅运行打包项目。

类库dotnetStandard2:

  1. 有参考Microsoft.Windows.SDK.Contracts版本10.0.22621.2428 nuget包
  2. 有一个调用Windows.ApplicationModel.Package.Current的函数;
  3. 公共字符串 LibraryFunctionToGetPackageName() { ... }
  4. 假设它还有与Store API相关的其他功能

xWpfApp1:带有 .NET Framework 4.8 的 WPF

  1. 参考类LibrarydotnetStandard2
  2. 调用函数:var s = c.LibraryFunctionToGetPackageName();
  3. (不要直接运行xWpfApp1,而是运行xWpfApp1_Package。)

xWpfApp1_Package : xWpfApp1 的打包项目

  1. 编译并运行。
  2. 点击按钮#1调用库函数
  3. 你应该看到,它确实成功了。

WpfAppdotnet8:带有 .NET Core 8.0 的 WPF

  1. 参考类LibrarydotnetStandard2
  2. 调用函数:this.Title = c.LibraryFunctionToGetPackageName();
  3. (同样,不要直接运行WpfAppdotnet8,而是在下面运行 包装项目。)

WPFdotnet8_PackageToPublishToStore:WpfAppdotnet8 的打包项目

  1. 编译并运行包项目
  2. 单击按钮#1
  3. 您将在库调用期间看到错误。例外: “系统.PlatformNotSupportedException”

我们希望解决此错误,以便我们可以在 WpfAppdotnet8 中成功使用库

希望我能够解释一下。

感谢与问候

非常好奇地等待您的回复。

wpf .net-core windows-runtime .net-standard-2.0 windows-application-packaging
1个回答
0
投票

.NET 6 及更高版本使用目标框架名字选项来使用 Windows 运行时 API:

在桌面应用程序中调用 Windows 运行时 API

这意味着您应该构建类库的多个版本:

<PropertyGroup>
  <TargetFrameworks>netstandard2.0;net6.0-windows10.0.17763.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
  <PackageReference Condition="'$(TargetFramework)' == 'netstandard2.0'"
                    Include="Microsoft.Windows.SDK.Contracts" Version="10.0.22621.3233">
    <PrivateAssets>All</PrivateAssets>
  </PackageReference>
</ItemGroup>

您还应该在 .NET 8 项目的 TFM 中包含操作系统版本:

<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
© www.soinside.com 2019 - 2024. All rights reserved.