簡體   English   中英

VSIX - 次要視覺工作室版本

[英]VSIX - Minor visual studio version

有人知道是否/如何從 VSIX 擴展中獲取當前正在運行的 Visual Studio 次要版本?

我已經找到了以下屬性,但我們想要更詳細的版本號(更多部分)。 https://docs.microsoft.com/en-us/dotnet/api/envdte._dte.version?view=visualstudiosdk-2017

以下代碼在我的 VS 2019 中顯示“16.0.29306.81 D16.2”:

var shell = (package as System.IServiceProvider).GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SVsShell)) as Microsoft.VisualStudio.Shell.Interop.IVsShell;
object ver = null;
shell.GetProperty((int)Microsoft.VisualStudio.Shell.Interop.__VSSPROPID5.VSSPROPID_ReleaseVersion, out ver);
System.Windows.MessageBox.Show(ver.ToString());

假設您可能想要像XYZ這樣的級別而不是X.0 or XY (例如:VS2017-15.9.13=>15.9=>15.0)。

如果XY格式對您來說足夠了, Sergey 的出色回答可以幫助您解決問題。 但是,如果您想獲得VS version+version number等完整詳細信息,則可以考慮使用注冊表項。

對於 VS2015 及更早版本,您可以看到這個 vsx 文檔和這個類似的問題,您可以嘗試使用 RegistryKey 從HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\DevDiv\\vs\\Servicing\\<version>訪問您想要的信息。 在此處輸入圖片說明

但是由於 VS2017 的安裝體驗已經更改為 vs installer.exe 我們無法再訪問該注冊表項下有關 VS2017 和 VS2019 的版本詳細信息。

對於 VS2017 和 VS2019 ,我發現我們可以在HKEY_CURRENT_USER\\Software\\Microsoft\\VSCommon\\15.0 or 16.0\\SQM\\PIDs\\訪問相關信息。

在此處輸入圖片說明

如果機器上只有一個版本的VS2017和VS2019,可以使用如下代碼獲取詳細信息:

            DTE dte = Package.GetGlobalService(typeof(DTE)) as DTE;
            string version = dte.Version;
            string editon = dte.Edition;

            RegistryKey key = Registry.CurrentUser;
            RegistryKey pidsKey = key.OpenSubKey("Software\\Microsoft\\VSCommon\\" + version + "\\SQM\\PIDs\\", true);
            string[] instances = new string[10];
            instances = pidsKey.GetSubKeyNames();

            RegistryKey instanceKey = key.OpenSubKey("Software\\Microsoft\\VSCommon\\" + version + "\\SQM\\PIDs\\" + instances[0], true);
            //read the details about VSManifestID
            string versionInfo = instanceKey.GetValue("VSManifestID").ToString();

versionInfo 的格式見這里:VisualStudio/15.9.13+28307.xxx(除了VSManifestID ,你也可以使用VSChanelID ...)

但是,如果您在 PC 上有多個相同 VS 版本的版本,這將不起作用。(VS20xx 社區和企業在同一台機器上)。 在這種情況下,你必須借助dte.Version and dte.Edition添加更多的判斷邏輯。

找到VS的次要部分的最簡單方法是從文件“devenv.exe”中獲取版本信息:

var devenvInfo = FileVersionInfo.GetVersionInfo(dte.FullName);
return new Version(devenvInfo.FileMajorPart, devenvInfo.FileMinorPart);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM