簡體   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