【问题标题】:Handle multiple target frameworks using directive preprocessor使用指令预处理器处理多个目标框架
【发布时间】:2019-02-03 05:33:09
【问题描述】:

我创建了一个针对Net Standard 2.0Net Framework 4.6.2 的Net Standard 类库来处理这两个框架。在 Net Framework 中,我需要区分它是 Web API 项目还是 Web 应用程序项目。这就是我想要的。

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 类继承不同的类时,是否可以使用预处理器指令创建单个类?如果是,如何完成这个场景?

【问题讨论】:

  • 为什么不为不同的框架创建不同的类?
  • ExceptionValidationAttribute的内容应该对所有类型的项目都一样吗?
  • @DmytroMukalov 是的

标签: c# visual-studio .net-core .net-standard


【解决方案1】:

你可以试试这样的

#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
    {
        ...
    }
}

【讨论】:

  • 我应该在哪里创建这些自定义指令? net mvc web app 和 net mvc web api 没有区别。
  • 唯一的选择是在项目的编译设置中手动提供它们(您的库将用于)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多