适用于Windows + .NET Framework版本的TargetFrameworks Moniker

时间:2017-06-11 17:48:03

标签: c# visual-studio mono cross-platform .net-standard

在Visual Studio中使用 .NETStandard 项目时,我们可以选择使用以下标记来指定其他平台:

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

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

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

是否有任何可以帮助我明确指定仅限Windows平台的目标的标记?可能来自Windows 8及更高版本。

1 个答案:

答案 0 :(得分:1)

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

但是,您可以创建放在runtimes/win/lib/net46/windows-specific.dll中的特定于运行时的构建,这些构建将在从Windows上的.NET框架项目中使用时使用。这需要创建自定义包布局,甚至可以引用要放入ref/net46的程序集。此dll也可能由单声道运行窗口使用。

但请注意,net461也是.NET Core 2.0库的回退框架,因此如果NuGet包仅包含net46版本,则它将用于.NET Core 2.0应用程序。

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