"Go To Definition" 版本号从何而来?

Where does the "Go To Definition" version number come from?

在 Visual Studio 2019 年,如果您右键单击一个符号,您可以 select “转到定义”。如果该符号未在您的代码中定义,它将尝试从 dll 生成代码。

当它生成这个文件时,它会在它的顶部放置一个 #region 注释。这是我的区域评论的示例:

#region Assembly Logging.Client, Version=6.0.1.0, Culture=neutral, PublicKeyToken=null
// C:\Users\myUserId\.nuget\packages\logging.client.0.0.43\lib\netstandard2.0\Logging.Client.dll
#endregion

关键部分是它说 Version=6.0.1.0。我打开了 NuGet 文件,在 Logging.Client.dll 的属性上,版本显示为 7.0.0.43:

所以,我的问题是:#region 评论行中显示的版本号是从哪里提取的?

注意:我查看了这个类似的问题,但是删除现有包、重新启动 Visual Studio 和重建的步骤并没有解决我的问题:

Where does the “Go To Definition” version number come from?

它来自 VS 上的 AssemblyVerion 属性,由 nuget 作者在您的 nuget 项目中设置。

请看下面的解读

=========================================== ======================

我假设logging.client nuget包是你自己的nuget包。(自己创建)

这是 nuget 和汇编机制的正常行为。这不是问题,包的作者就是这样定义的。

这些是有道理的,是作者在创建nuget包的时候定义的,作者可以修改。只是它们的处理功能不同而已与nuget的机制。

Version=6.0.1.0是框架使用的dll的汇编版本。它是一个 built-in 版本号,在构建期间使用或在运行时使用。只能被vs内部访问。 准确地说,这是它的真实版本号。

File Version 7.0.0.43是dll的版本,用于外显,可以被外部访问。

Product Version 7.0.0.43表示也可以在VS外访问的nuget包版本。

所以,都是作者自己定义的。

参见 this official document about the function of these attributes: Use AssemblyVersion and AssemblyFileVersion attributes

他们都有VS专业术语:

AssemblyVersion 表示 6.0.1.0,AssemblyFileVersion 表示 File Version 7.0.0.43NugetVersion 表示 Product Version 7.0.0.43。而且它们也可以在 VS 之外访问。

=========================================== =======

在我这边,我创建了一个名为 ClassLibrary1.

net standarad class 库项目

Right-click 在您的 net standard class 库项目上,right-click 在您的项目上 Properties-->套餐

1)

汇编版本Logging.Client, Version=6.0.1.0, Culture=neutral, PublicKeyToken=null下使用。

当你在主项目上安装那个包时,在主项目上,点击 References 上的 dll,你会在下面看到内部版本 6.0.1.0 属性 Window.

并且当您在 net framework 项目中安装此包时 packages.config,它会显示在 csproj 文件中:

<ItemGroup>
    <Reference Include="ClassLibrary1, Version=6.0.1.0, Culture=neutral, processorArchitecture=MSIL">
        <HintPath>..\packages\ClassLibrary1.7.0.0.43\lib\netstandard2.0\ClassLibrary1.dll</HintPath>
    </Reference>

该版本由内部框架使用,在构建或运行时使用,仅在 VS 中可见。

2)

Assembly File version 是文件名,它显示在 dll 的属性上,并在 VS 外部显示为您描述的 File Version关于案例。

3)

包版本是nuget包的版本而不是程序集dll版本。它们是不同的概念。

在你身边,显示是这样的:

<ItemGroup>
    <Reference Include="ClassLibrary1, Version=6.0.1.0, Culture=neutral, processorArchitecture=MSIL">
        <HintPath>..\packages\ClassLibrary1.7.0.0.43\lib\netstandard2.0\ClassLibrary1.dll</HintPath>
    </Reference>

并且在dll的属性中,它显示为产品版本

总的来说,这不是问题,每个都有一个有意义的特定功能。如果你想改变这个,你应该像我上面说的那样改变你的nuget项目的Properties-->Package,修改它们一样。然后,将其重新打包为 nuget 包。