如何创建多目标但针对每个框架的不同 dll 的 .NET Core 库?

How to create a .NET Core library that is Multi-Targeting but targets different dll's per framework?

我正在尝试将当前针对 .NET4.0 的库更新为:

使用多目标。

我使用的依赖库是Microsoft.Build.Framework。它出现在两个地方:

因为nuget包最低级别在4.5.2以上,我不能在452目标中使用那个nuget包。

那么,是否可以这样说: - 使用NS20时,请使用nuget包。 - 使用NET4.5.2时,请使用GAC版本。

谢谢!

诀窍是修改您的csproj手动指定要在任一特定框架下使用的包。

这就是我最终所做的。注意事项:

  • PackageReference:从 NuGet 获取。
  • Reference:从您的 GAC 获取。

.

<PropertyGroup>
  <TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
  <PackageReference Include="Microsoft.Build.Framework" Version="15.7.179" />
  <PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.7.179" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net452' ">
  <Reference Include="Microsoft.Build.Framework" Version="15.7.179" />
  <Reference Include="Microsoft.Build.Utilities.v4.0" Version="15.7.179" />
</ItemGroup>

所以在这里,如果框架是 NS20,我们从 NuGet 获取包,而如果是 NET452.

,我们尝试从 GAC 获取它们

胜者胜者,吃鸡大餐!

您可以根据当前项目正在构建的目标框架,有条件地定义您的依赖项。为此,您将调整项目文件以在一种情况下使用 NuGet 依赖项,或在另一种情况下使用标准的非 NuGet 引用。

看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- other properties -->
    <TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <!-- common references -->
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net452'">
     <Reference Include="Microsoft.Build.Framework" />
  </ItemGroup>
  <ItemGroup Condition="'$(TargetFramework)' != 'net452'">
     <PackageReference Include="Microsoft.Build.Framework" Version="15.7.179" />
  </ItemGroup>

</Project>

因此 net452 将获得带有 Reference element, which can be resolved from the GAC or the local directory, and other frameworks will resolve it from NuGet using a PackageReference 的正常程序集引用 Microsoft.Build.Framework