在Visual Studio中使用 .NETStandard 项目时,我们可以选择使用以下标记来指定其他平台:
<TargetFrameworks>net45;net46;netstandard1.0;netstandard1.3</TargetFrameworks>
在上面你可以看到类库项目的目标是4个平台。当我编译项目确实构建。但是,我担心的是目标net45
和net46
中的许多代码都使用Win32 API并为基于WPF的应用程序提供实用程序功能。
我希望在Mono平台中使用一些宏来引用类库(通过NuGet)来隔离这些实用程序,如果可能的话,因为在Mono环境中使用的类库中具有WPF实用程序显然会导致前所未有的后果
是否有任何可以帮助我明确指定仅限Windows平台的目标的标记?可能来自Windows 8及更高版本。
答案 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。