【问题标题】:How to make a solution level nuget package file in .NET core project如何在 .NET 核心项目中制作解决方案级别的 nuget 包文件
【发布时间】:2019-09-28 19:56:05
【问题描述】:

我有一个包含多个项目的解决方案,每个项目都有自己的 nuget 包。我想找到一种方法为整个解决方案制作一个 nuget 文件,以避免相同二进制文件的不同版本问题。

任何人以前都这样做过并且可以分享指针会有所帮助。

【问题讨论】:

  • 在项目级别引用的 NuGet 包,您将无法更改它。但是 Visual Studio 提供了一次将所有项目的相同 nuget 包更新到相同版本的可能性。从用户的角度来看,这就是您想要的。
  • 将程序集编译到一个地方,然后使用 .nuspec 文件生成您自己的包。
  • @TusharJ 你的问题解决了吗?

标签: .net .net-core nuget-package


【解决方案1】:

如果你已经安装了不同版本的 nuget 包,你可以使用Consolidate tab in package manager 来合并它们。

虽然这不会强制团队成员使用统一版本,但仍然有人可以安装另一个版本。如果您有一个小团队,自动执行可能会有点过头了,您可以通过教育您的团队和在代码审查期间执行相同的版本。如果您有一个大项目并且有多个团队在处理它,我强烈建议您编写一个测试或构建前/后构建步骤,以扫描您的解决方案并使用相同版本的包强制所有项目。

我不知道是否有任何现有的包/工具,这就是为什么请在下面找到几个可能的解决方案:

通过解析文件查找包

只需在csproj 文件中搜索PackageReference 元素并解析package.config(如果存在)以查找所有引用的项目,然后确保没有不同的版本。

这是一个简单的选项,但由于传递依赖关系,您仍然可能会遇到 dll 地狱。例如:您将Newtonsoft.Json 12.0.0 安装到您的解决方案中,然后将Hangfire.PostgreSql 1.6.3 添加到某个项目中,该项目会传递Newtonsoft.Json 10.0.1

dotnet 列表包报告

您可以使用dotnet list package 生成包含所有已安装软件包的报告。如果您使用--include-transitive 标志,那么您可以识别传递依赖项的潜在不兼容版本。不幸的是,在这种情况下您无能为力:要么使用另一个版本的根包,它使用您在解决方案中使用的相同包,要么放松并依赖在包安装期间自动生成的BindingRedirects。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2012-12-08
    • 2011-09-21
    • 2017-03-21
    • 2020-07-20
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多