nuget 库中的预处理器指令

preprocessor directive in nuget library

我真的不明白我要写的那些预处理器指令。 我正在开发一个适用于许多框架的库,例如.net framework 4.5, 4.6,... 以及我使用 framework .NETStandard Version 1.5 运行的应用程序 -> 所以我猜这是 dnxcore50?

public class MyClass
{
#if DOTNET5_4
    // do nothing
#else
    public void MyMethod()
    {
        Console.WriteLine("framework is supported");
        // and do anything with libraries available in the framework :)
    }
#endif
}

所以这就是我现在得到的,但是 MyMethod 不适用于任何其他框架。使用 #if DOTNETCORE50 也不起作用。

我也尝试过定义约束,但是当我尝试这个时我的项目加载失败。

知道什么是正确的解决方案吗?

不再需要在 project/solution-file 中定义它们。

所以,我只是 post 一个与当前状态匹配的答案(一些仍然缺失,如 net47 等等,但你知道我的意思):

#if (NET45 || NET451 || NET46 || NET461)
#define NetFramework
#endif

#if (NETSTANDARD1_0 || NETSTANDARD2_0 || NETSTANDARD1_5 || NETSTANDARD1_3 || NETSTANDARD1_6 || NETCOREAPP1_0 || NETCOREAPP1_1 || NETCOREAPP2_0)
#define NetCore
#endif

它们现在以何种方式兼容或冗余,我不知道。但这是我现在知道的名字。

那你可以

public class MyClass
{

#if NetFramework
    public void MyMethod()
    {
        Console.WriteLine("framework is supported");
        // and do anything with libraries available in the framework :)
    }
#endif

}