Windows + NET Framework 版本的 TargetFrameworks Moniker

TargetFrameworks Moniker for Windows + NET Framework Version

在 Visual Studio 中,当使用 .NETStandard 项目时,我们可以选择使用以下名字对象指定其他平台:

<TargetFrameworks>net45;net46;netstandard1.0;netstandard1.3</TargetFrameworks>

在上面您可以看到 class 库项目针对 4 个平台。当我编译项目时确实会构建。但是,我担心的是目标 net45net46 中的许多代码都使用 Win32 API 并为基于 WPF 的应用程序提供实用函数。

我希望为在 Mono 平台中引用 class 库(通过 NuGet)的项目隔离这些实用程序,如果可能的话使用一些宏作为 class 库中的 WPF 实用程序在Mono环境下使用显然会导致前所未有的后果。

是否有任何名字可以帮助我明确指定 Windows-only .NET 平台的目标?可能从 Windows 8 开始。

目前这是不可能的。有一个 proposal to add mono-specific target framework identifiers 与您想要的相反。如果实现了这一点,您可以创建一个单声道特定版本,该版本将由单声道而不是 net* 特定构建使用。

但是,您可以创建特定于运行时的构建,这些构建会被放入 runtimes/win/lib/net46/windows-specific.dll 中,以便在从 windows 上的 .NET Framework 项目中使用时使用。这需要创建自定义包布局,甚至可能需要引用程序集以放入 ref/net46。此 dll 也可能被 mono 运行 windows.

使用

但请注意,net461也是 .NET Core 2.0 库的后备框架,因此如果 NuGet 包仅包含 net46 构建,它将用于 .NET Core 2.0申请。

最好的方法可能是在库中包含这两个实现并确定 via Reflection if it the runtime being used is mono