简体   繁体   English

我应该为 .NET Core 中的库项目选择哪个目标框架

[英]Which target framework should I choose for library project in .NET Core

My current mindset is to use .NET Standard xx for libraries and concrete frameworks for executable projects.我目前的想法是将 .NET Standard xx 用于可执行项目的库和具体框架。 So with this in mind let's say I have one common (fictional) project Common.csproj因此,考虑到这一点,假设我有一个常见的(虚构的)项目Common.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net5.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">
    <PackageReference Include="FluentValidation" Version="9.5.4" />
  </ItemGroup>
  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="FluentValidation" Version="8.6.0" />
  </ItemGroup>

One library project Lib.csproj一个库项目Lib.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
      <ProjectReference Include="Common.csproj" />
  </ItemGroup>

And one executable project Cli.csproj和一个可执行项目Cli.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
        <TargetFramework>net5</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
      <ProjectReference Include="Lib.csproj" />
  </ItemGroup>

So, in this case if FluentValidation library has different method signatures in different versions, compilation in some cases goes thru, but you get error at runtime.因此,在这种情况下,如果FluentValidation库在不同版本中具有不同的方法签名,则在某些情况下编译会通过,但在运行时会出错。

What are the recommendations for cases like this?对这种情况有什么建议? Should I just support all needed target frameworks in Lib.csproj ?我应该只支持Lib.csproj所有需要的目标框架吗?

I think that what you're after is using pre-processor directives with target frameworks:我认为您所追求的是在目标框架中使用预处理器指令:

#if NETSTANDARD
    // Code targeting .Net Standard
#elif NET
    // Code targetting .Net Core / .Net
#elif NETFRAMEWORK
    // Code targetting .Net Framework
#endif

You can get as specific as you like ie targeting .Net Standard 2.0 exactly:您可以随心所欲地获得具体目标,即准确定位 .Net Standard 2.0:

#if NETSTANDARD2_0
   // .Net Standard 2.0 specific code
#elif
   // anything else!
#endif

This will let Common.csproj use the correct method calls for the appropriate version of FluentValidation that you need.这将使Common.csproj使用正确的方法调用来调用您需要的相应版本的 FluentValidation。

Personally, I find it a little messy - but sometimes, needs must.就个人而言,我觉得它有点凌乱 - 但有时,需要必须。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 .Net Core库应该针对哪个.Net框架? - Which .Net framework should my .Net Core library target? .NET Core + Xamarin Android应用程序应使用哪种类型的类库项目? - Which type of Class Library project should I use for .NET Core + Xamarin Android App? ASP.Net Web API与WCF,我应该在我的项目中选择哪一个 - ASP.Net Web API vs WCF, which one should I choose in my project 我应该使用类库来定位.NET Framework和C#版本? - What .NET Framework and C# version should I target with my class library? 我应该为 VS 2019 选择哪个 WPF 项目模板? [等候接听] - Which WPF project template should I choose for VS 2019? [on hold] 在 .NET 核心项目中使用 .NET 框架 class 库 - Consume .NET Framework class library in .NET Core project 在哪种情况下我应该选择Silverlight或ASP.NET MVC - In which situation should I choose Silverlight or ASP.NET MVC 我在Core 1.0 RC2(.NET Framework)Web App中使用哪种类库类型 - Which class library type do I use with a Core 1.0 RC2 (.NET Framework) Web App 我应该添加哪个项目.Net Core Identity(Web API 或 Web 客户端)? - Which project should I add .Net Core Identity (Web API or in Web Client)? 从.NET Framework 4.6.2类库中定位.NET核心类库 - Target .NET Core Class Library From .NET Framework 4.6.2 Class Library
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM