[英]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.