В настоящее время я создаю сборку .NET, которая должна работать в .NET 4.5 и как минимум в двух версиях .NET Core (.NET Core 2.1 и .NET Core 3.0).
Я использую условную компиляцию, напримерИтак:
#if NET45
//Use as System.Web.HttpContext
isHttps = context.Request.IsSecureConnection;
IPAddress fromIp = IPAddress.Parse(context.Request.UserHostAddress);
string path = context.Request.Path;
#elif NETCOREAPP2_1
//Use as Microsoft.AspNetCore.Http.HttpContext
isHttps = context.Request.IsHttps;
IPAddress fromIp = context.Request.HttpContext.Request.HttpContext.Connection.RemoteIpAddress;
string path = context.Request.Path;
#elif NETCOREAPP3_0
//Use as Microsoft.AspNetCore.Http.HttpContext
isHttps = context.Request.IsHttps;
IPAddress fromIp = context.Request.HttpContext.Request.HttpContext.Connection.RemoteIpAddress;
string path = context.Request.Path;
#endif
Поскольку код для NETCOREAPP2_1 и NETCOREAPP3_0 одинаков, интересно, могу ли я использовать что-то вроде:
#if NET45
//...
#elif NETCOREAPP2_1 [OR] NETCOREAPP3_0
//...
#endif
Однако этот синтаксис не работает.
Существует ли допустимый синтаксис для использования оператора OR в условной компиляции, подобной этой?
Примечание. Так как это включает конвейер запросов ASP.NET, я полагаю .NET Standardэто не вариант. Возможно, вы захотите взглянуть на код вовремя: https://github.com/suterma/SqlSyringe/blob/f7df15e2c40a591b8cea24389a1ba8282eb02f6c/SqlSyringe/Syringe.cs