代码之家  ›  专栏  ›  技术社区  ›  Tronald

Nuget库的多运行时目标

  •  2
  • Tronald  · 技术社区  · 8 年前

    我有一个目前用.NET 4.0构建并部署到Nuget的库。这个库没有太多的依赖项,在.NET标准和核心项目中似乎也可以正常工作。

    手动添加到标准或核心项目时,库正在引发兼容性错误。已通过修改.csproj文件以删除不需要的引用来解决此问题。现在看起来是这样。

    <ItemGroup>
       <Reference Include="System" />
       <Reference Include="System.Core" />
       <Reference Include="Microsoft.CSharp" />
    </ItemGroup>
    

    这个解决方案似乎使库的功能正确,既核心又标准。当手动将库添加到标准或核心项目时,兼容性警告现在已消失,即使库仍使用.NET 4.0构建。但是,在发布到Nuget,然后通过Nuget下载库之后,我仍然收到这个警告。

    “警告****包'*****'已使用'.NETFramework,Version=v4.6.1'而不是项目目标框架'.NETCoreApp,Version=v2.0'还原。”。此包可能与您的项目不完全兼容。”

    经过许多烦恼和调查,我意识到这个库似乎仍然在标准和核心项目中工作,但我不确定它是否使用.NET4.6.1来运行基于此警告的库。

    所以我的问题是,如何正确地将包部署到Nuget以正确地针对多个运行时?我是否需要在每个运行时生成多个项目?如果是这样的话,我可以把它打包成一个包吗?还是每个运行时都需要一个不同的版本?不知道这里的最佳做法是什么。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Marc Gravell    8 年前

    最简单的方法是将csproj更改为使用新的SDK格式,并使用 <TargetFrameworks> . 例如, here's Dapper's project file 为3个TFMs构建的版本-关键是:

    <TargetFrameworks>net451;netstandard1.3;netstandard2.0</TargetFrameworks>
    

    再加上一些决定 Condition 影响要为每个TFM添加哪个包或程序集引用的属性-您可以在nuget的“Dependencies”视图中看到这些条件的结果 here . 当你 dotnet pack -c Release ,或者在启用了“在生成时生成NuGet包”选项的IDE中生成(包选项卡,项目属性),它将生成 .nupkg 在生成输出中,它将在内部包含3个tfm。

    推荐文章