[英]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:
所以,我的问题是: #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.43
, NugetVersion表示Product Version 7.0.0.43
。 而且它们也可以在 VS 之外访问。
================================================== ==
在我这边,我创建了一个名为ClassLibrary1
的net standarad
类库项目。
右键单击您的net standard
类库项目,右键单击您的项目属性-->包
1)
在Logging.Client, Version=6.0.1.0, Culture=neutral, PublicKeyToken=null
下使用Assembly 版本。
当您在主项目上安装该包时,在主项目上,单击References上的 dll,您将在“属性”窗口下看到内部版本6.0.1.0
。
当您使用packages.config
在net 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.