问题描述
在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:
所以,我的问题是: 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外部访问。
因此,它们都是由作者根据需要定义的。
他们在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
类库项目上,右键单击,在您的项目属性-> 包装
1)
程序集版本在net standard
下使用。
在主项目上安装该软件包时,在主项目上,单击参考上的dll,您将在属性下看到内部版本Logging.Client,Version=6.0.1.0,Culture=neutral,PublicKeyToken=null
。 窗口。
当您使用6.0.1.0
在net 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软件包。