同一包的不同版本如何/在哪里存储在构建输出中?

问题描述 投票:0回答:1

我试图找出构建项目时不同版本的 NuGet 包的存储位置。特别是如何考虑包的不同版本。想象一下以下设置:

  • ClasslibA.csproj
    • 版本A.cs
  • ClasslibB.csproj
    • 版本B.cs
  • 消费者.csproj
    • 程序.cs

ClasslibA 和 ClasslibB 都被构建到 NuGet 包中。对于 ClasslibA,有可用的版本 1.0.0 和 1.1.0 包。

VersionA 有一个

public const string Current
,其中包含包的版本号(1.0.0 或 1.1.0)。 VersionB 引用 ClasslibA v1.0.0 并具有
public const string Current = $"I'm relying on VersionA v{VersionA.Current}."
。 Consumer 项目是一个引用 ClasslibA v1.1.0 和 ClasslibB 的控制台应用程序。 Program.cs只写了两条语句:

Console.WriteLine($"Consumer VersionB: {VersionB.Current}");

Console.WriteLine($"Consumer VersionA: {VersionA.Current}");

我在公司存储库中创建了该设置(这就是为什么我无法共享它,抱歉),运行消费者应用程序,并将其打印出来

消费者版本B:我依赖版本A v1.0.0。
消费者版本A:1.1.0

很明显这两个版本都在使用。但当我查看构建文件夹时,只有一个 ClasslibA.dll 和一个 ClasslibB.dll。将构建输出复制到仅安装 .Net 运行时的新 VM 会产生与从 Visual Studio 运行相同的结果。

同一包的不同版本如何/在哪里存储在构建输出中?

https://learn.microsoft.com/en-us/nuget/concepts/dependency-resolution状态

当多个包具有相同的依赖项时,相同的包 ID 可能会多次出现在图中,并且可能具有不同的版本约束。但是,项目中只能使用给定包的一个版本,因此 NuGet 必须选择使用哪个版本。

如果我的设置清楚地表明最终输出中使用了多个不同的包版本,那么如何只能使用单个版本?

另外 - 它在 .Net 和 .Net Framework 中的工作方式都相同吗?

在互联网上阅读,它回答了我的第一个问题,但提出了新的问题。我还设置了上述实验设置。

c# .net .net-core nuget nuget-package
1个回答
0
投票

您的输出中只有一个版本,即 ClasslibA 的 1.1.0 版本。

由于您将字符串声明为

const
,因此这些是 编译时常量,这意味着 C# 编译器将使用库 B(恰好是版本 1.0.0)的编译时引用来解析您在编译期间声明的字符串库 A)。

如果您将声明更改为例如

public static string
行为应该有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.