.net Net7.0项目引用Net7.0-windows包

zqdjd7g9  于 2023-03-31  发布在  .NET
关注(0)|答案(1)|浏览(264)

我有一个可以在Windows或Linux上运行的Net7.0项目。我希望它引用Net7.0-windows nuget包,并决定是否在运行时使用它包含的程序集/类型:例如

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
    // use Net7.0-windows package functionality
}
else
{
    // can't use it - do something else
}

因此,Windows专用的包将始终被部署(复制到bin),但仅在Windows上“执行”(忽略有关JIT,静态初始化器等的问题)。
有没有什么方法可以使用标准的工具来实现这一点?
我以为我可以添加PackageReference并忽略NU 1701。不幸的是,nuget帮助解析到软件包的NetFramework版本,而不是Net6.0-windows版本。即使我设置<AssetTargetFallback>net6.0-windows</AssetTargetFallback>
我怀疑唯一明智的答案是将myproject多目标为net6.0;net6.0-windows(将关于包的决定推到编译时),但出于各种原因,我不喜欢这样做。

2q5ifsrm

2q5ifsrm1#

您可以在.csproj文件中引用您的包时指定条件。请查看以下示例:

<PackageReference Include="yourpackage-linux" Version="1.0.0" Condition="$([MSBuild]::IsOsPlatform('Linux'))" />
<PackageReference Include="yourpackage-windows" Version="1.0.0" Condition="$([MSBuild]::IsOsPlatform('Windows'))" />

操作系统平台应在OSPlatform结构[docs]中:

  • FreeBSD
  • Linux操作系统
  • OSX操作系统
  • windows

相关问题