繁体   English   中英

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

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

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

当它生成这个文件时,它会在它的顶部放置一个#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

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

Logging.Client.dll 的属性

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

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

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

它来自 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表示也可以在 VS 外部访问的 nuget 包版本。

所以,它们都是由作者定义的。

有关这些属性的功能,请参阅此官方文档:使用 AssemblyVersion 和 AssemblyFileVersion 属性

他们在VS中都有专业术语:

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

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

在我这边,我创建了一个名为ClassLibrary1net standarad类库项目。

右键单击您的net standard类库项目,右键单击您的项目属性-->

包属性对话框包括包版本、程序集版本和程序集文件版本。

1)

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

当您在主项目上安装该包时,在主项目上,单击References上的 dll,您将在“属性”窗口下看到内部版本6.0.1.0

当您使用packages.confignet framework项目上安装此包时,它将显示在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)

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

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 的属性中,它显示为Product Version

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM