![](/img/trans.png)
[英]How to create single VSIX extension for multiple Visual Studio version?
[英]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.