C# 针对多框架

C# 针对多框架,c#,.net,core,csproj,C#,.net,Core,Csproj,到目前为止,我正在根据下载的框架制作这个标准库。 例如,对于.NET Core,它将下载适用于.NET Core的软件包 <!--Trageting .NET CORE (2.1, 3.0) && .NET STANDARD (2.0,2.1) --> <ItemGroup Condition="$(TargetFramework.StartsWith('netcore')) OR $(TargetFramework.StartsWith('netstan

到目前为止,我正在根据下载的框架制作这个标准库。 例如,对于.NET Core,它将下载适用于.NET Core的软件包

 <!--Trageting .NET CORE (2.1, 3.0) && .NET STANDARD (2.0,2.1) -->
  <ItemGroup Condition="$(TargetFramework.StartsWith('netcore')) OR $(TargetFramework.StartsWith('netstandard')) ">
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
    <PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.7" />
    <!--<PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.7" />-->
    <PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
    <PackageReference Include="NLog.WindowsEventLog" Version="4.6.7" />
    <PackageReference Include="System.Diagnostics.EventLog" Version="4.6.0" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.6.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.7.0" />
    <PackageReference Include="System.Linq" Version="4.3.0" />
    <PackageReference Include="Microsoft.Win32.Registry" Version="4.6.0" />
  </ItemGroup>

  <!--Targeting .NET FRAMEWORK (4.6.1 4.6.2)  -->
  <ItemGroup Condition="'$(TargetFramework)' == 'net461' OR '$(TargetFramework)' == 'net462'">
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="Microsoft.AspNet.WebApi.Client" version="5.2.3" />
    <PackageReference Include="Microsoft.AspNet.WebApi.Core" version="5.2.3" />
    <PackageReference Include="NLog.Extensions.Logging" Version="1.5.4" />
    <PackageReference Include="NLog.WindowsEventLog" Version="4.6.7" />
    <PackageReference Include="System.Diagnostics.EventLog" Version="4.5.0" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.6.1" />
    <PackageReference Include="System.Linq" Version="4.3.0" />
    <PackageReference Include="Microsoft.Win32.Registry" Version="4.5.0" />
  </ItemGroup>

   <!--Targeting .NET FRAMEWORK (4.7, 4.7.1, 4.7.2)-->
  <ItemGroup Condition="'$(TargetFramework)' == 'net47' &#xD;&#xA; OR '$(TargetFramework)' == 'net471'&#xD;&#xA; OR '$(TargetFramework)' == 'net472'">
    <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
    <PackageReference Include="Microsoft.AspNet.WebApi.Client" version="5.2.3" />
    <PackageReference Include="Microsoft.AspNet.WebApi.Core" version="5.2.3" />
    <PackageReference Include="NLog.Extensions.Logging" Version="1.5.4" />
    <PackageReference Include="NLog.WindowsEventLog" Version="4.6.7" />
    <PackageReference Include="System.Diagnostics.EventLog" Version="4.5.0" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.6.1" />
    <PackageReference Include="System.Linq" Version="4.3.0" />
    <PackageReference Include="Microsoft.Win32.Registry" Version="4.5.0" />
  </ItemGroup>


有没有更好的方法来执行上面提到的代码,比如使用DefineConstants

如果您想要更改的是具有一定通用性的版本,那么我可能会尝试执行以下操作:


5.2.3
5.2.7
这:

  • 允许最常用的值为简单默认值
  • 允许对每个目标框架进行清除覆盖
  • 不复制实际的包引用

  • 您不能在一个项目中针对多个框架。@GlennvanAcker是的,您可以;如果所有库都遵循相同的.Net标准规范,这对库来说是很正常的。@GlennvanAcker没有,对不起,这完全是错误的;多目标的整个要点是针对不兼容的框架(注意,您也可以使用它来针对子/超级TFM,在超级TFM中使用其他可用功能);严肃地说:
    是一件事;例如,展开“依赖关系”-这是一个单一的csproj,只构建一次,但有8个输出TFM,依赖关系中有许多差异chains@GlennvanAcker我们可以在这里推断,该项目已经瞄准了多个框架,根据TFM的不同(且不平凡)依赖链;问题的重点是简化每个TFM的过程configuration@AamirNaeem唯一缺少的是你似乎已经具备的条件?Marc Gravell这看起来很神奇,但请你给我提供与之相关的链接,或者请你对我上面提到的代码进行修改,以便我能有一个清晰的想法:)@Marc Gravell