代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

如何创建一个多目标的.NET核心库,但目标是每个框架的不同dll?

  •  2
  • Pure.Krome  · 技术社区  · 6 年前

    我正在尝试将当前目标为.net4.0的库更新为:

    • NetStandard 2.0版
    • 网4.5.2

    使用多目标。

    我使用的从属库是 Microsoft.Build.Framework . 它可以在两个地方找到:

    • NuGet 最低级别为net4.6
    • 通过完整框架的GAC(例如 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.Build.Framework.dll )

    因为nuget包的最小级别高于4.5.2,所以我不能在452目标中使用该nuget包。

    那么,是否可以说: -使用NS20时,请使用Nuget软件包。 -使用Net4.5.2时,请使用GAC版本。

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  1
  •   poke    6 年前

    您可以有条件地定义依赖项,具体取决于 现在的 正在构建项目的目标框架。为此,您可以调整项目文件,在一种情况下使用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 将得到正常的程序集引用 Microsoft.Build.Framework Reference element ,可以从GAC或本地目录解析,其他框架将使用 PackageReference .

        2
  •  1
  •   Pure.Krome    6 年前

    诀窍是修改你的 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 当我们试图从GAC那里得到它们的时候 NET452 .

    大吉大利,晚上吃鸡!