Я создал три проекта: 2 консольных приложения, нацеленных на .NET Core 2.1 и .NET Framework 4.7.2 соответственно, и библиотеку .NET Standard (нацеленную как на .NET standard 2.0, так и .NET core 2.1, указав необходимые TFMв теге TargetFrameworks
файла .csproj):
Вот единственный класс в стандартной библиотеке .NET:
public class StdClass
{
public string GetCallingPlatform()
{
#if NETCOREAPP2_1
return "Core2.1";
#elif NETCOREAPP2_0
return "Core2.0";
#elif NETSTANDARD2_0
return "Standard2.0";
#elif NET472
return "NetFramework4.7.2";
#else
return "NotSpecified";
#endif
}
}
Затем я добавил ссылку на эту библиотеку издва консольных приложения и в методе Main
обоих я назвал GetCallingPlatform
:
static void Main(string[] args)
{
StdClass stdClass = new StdClass();
var platform = stdClass.GetCallingPlatform();
Console.WriteLine(platform);
Console.ReadLine();
}
Консольное приложение .NET Core 2.1, как и ожидалось, поразило препроцессор NETCOREAPP2_1
, но .NETКонсольное приложение Framework работает с препроцессором NETSTANDARD2_0
. Я ожидал, что он попадет либо в блок NET472
, либо в #else
, поскольку TFM net472
не указан в TargetFrameworks
.