我有一个可以在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
(将关于包的决定推到编译时),但出于各种原因,我不喜欢这样做。
1条答案
按热度按时间2q5ifsrm1#
您可以在
.csproj
文件中引用您的包时指定条件。请查看以下示例:操作系统平台应在
OSPlatform
结构[docs]中: