“转到定义”版本号从何而来?

问题描述

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

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

#region

关键部分是它说#region Assembly Logging.Client,Version=6.0.1.0,Culture=neutral,PublicKeyToken=null // C:\Users\myUserId\.nuget\packages\logging.client\7.0.0.43\lib\netstandard2.0\Logging.Client.dll #endregion 。我打开了NuGet文件,在Logging.Client.dll的属性上,该版本显示为7.0.0.43:

Propertes for the Logging.Client.dll

所以,我的问题是: Version=6.0.1.0注释行中显示的版本号是从哪里获得的?

注意:我看了这个类似的问题,但是删除现有软件包,重新启动Visual Studio和重建的步骤不能解决我的问题:Latest version of nuget package still not up to date

解决方法

“转到定义”版本号从何而来?

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

请参阅以下解释。

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

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

这是nuget和组装机制的正常行为。这不是问题,它只是由包的作者以这种方式定义的。

这些是有意义的,并且是在创建nuget包时由作者定义的,并且可以由作者修改。只是它们在处理nuget的机制上彼此之间具有不同的功能。

Version=6.0.1.0是框架使用的dll的汇编版本。它是内置版本号,在构建过程中使用或在运行时使用。它只能由vs内部访问。 准确地说,这是它的真实版本号。

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

Product Version 7.0.0.43表示nuget软件包的版本,它也可以在VS外部访问。

因此,它们都是由作者根据需要定义的。

请参见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.43 NugetVersion 表示Product Version 7.0.0.43。他们也可以在VS外部访问。

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

在我的身边,我创建了一个名为net standarad的{​​{1}}类库项目。

在您的ClassLibrary1类库项目上,

右键单击,在您的项目属性-> 包装

The Package properties dialog includes the package version,assembly version,and assembly file version.

1)

程序集版本net standard下使用。

在主项目上安装该软件包时,在主项目上,单击参考上的dll,您将在属性下看到内部版本Logging.Client,Version=6.0.1.0,Culture=neutral,PublicKeyToken=null窗口。

当您使用6.0.1.0net framework项目上安装此软件包时,它将显示在packages.config文件中:

csproj

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

2)

汇编文件版本是文件名,它显示在dll的属性上,并且在VS外部显示为您在案例中描述的文件版本

3)

软件包版本是nuget软件包的版本,而不是程序集dll版本。他们是不同的概念。

在您的身边,它显示如下:

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

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

总体,这不是问题,它们每个都有有意义的特定功能。如果要更改此设置,则应按我上面所述更改nuget项目的属性-> 包装,并对其进行相同的修改。然后,将其重新打包为nuget软件包。