Обработка нескольких целевых фреймворков с использованием директивы препроцессора - PullRequest
0 голосов
/ 28 августа 2018

Я создаю библиотеку классов Net Standard, нацеленную на Net Standard 2.0 и Net Framework 4.6.2 для обработки двух платформ. В Net Framework мне нужно различать, является ли это проектом веб-API или проектом веб-приложения. Это то, что я хочу.

using System;
using System.Linq;

#if (netcoreapp2.0 || netcoreapp2.1)
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
#endif

//net462 || net47 || net471 || net472
#if (NETFX)
using System.Net.Http;
using System.Web;
using System.Web.Mvc;
#endif

namespace TestNetStandard
{
    //FOR NET MVC WEB
    public class ExceptionValidationAttribute : System.Web.Mvc.IExceptionFilter
    {
    }

    //FOR NET MVC API
    public class ExceptionValidationAttribute : System.Web.Http.Filters.ExceptionFilterAttribute
    {
    }

    //For NET CORE
    public class ExceptionValidationAttribute : Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute
    {
    }
}

Итак, возможно ли создать отдельный класс с помощью директивы препроцессора, в то время как класс ExceptionValidationAttribute наследует разные классы? Если да, как выполнить этот сценарий?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете попробовать что-то вроде этого

#if ASPNETMVC
using ExceptionValidationAttributeParent = System.Web.Mvc.IExceptionFilter;
#elif ASPNETWEBAPI
using ExceptionValidationAttributeParent = System.Web.Http.Filters.ExceptionFilterAttribute;
#elif ASPNETCORE
using ExceptionValidationAttributeParent = Microsoft.AspNetCore.Mvc.Filters.ExceptionFilterAttribute;
#else
// default case but maybe redundant 
using ExceptionValidationAttributeParent = SomeFakeParentClass;
#endif



namespace TestNetStandard
{
    public class ExceptionValidationAttribute : ExceptionValidationAttributeParent
    {
        ...
    }
}
...