2017-10-14 538 views
1

在Visual Studio中,我可以使用下面的代碼來獲取關於某個已安裝的擴展信息(VSIX)以前的版本:ExtensionManager空在Visual Studio 2017年

IVsExtensionManager manager = ServiceProvider.GlobalProvider.GetService(typeof(SVsExtensionManager)) as IVsExtensionManager; 
if (manager != null) 
{ 
    VsExtension extension = new VsExtension(); 
    IInstalledExtension info = manager.GetInstalledExtension(cExtensionProductId); 
} 

在新的Visual Studio 2017年的版本,「 manager'變量始終爲空。微軟改變了檢索信息的方式(他們不再使用系統註冊表),但我找不到另一種方式來檢索信息。

你知道我在哪裏可以找到更多信息和/或提供新實施的樣本嗎?

預先感謝您!

回答

1

請檢查VS 2016是否使用VS 2017對擴展管理器的特定引用。它應該是Microsoft.VisualStudio.ExtensionManager.dllMicrosoft.VisualStudio.ExtensionEngine.dll

對於工作示例見https://vlasovstudio.com/visual-commander/commands.html#ExtensionsList

+0

在「System.InvalidCastException:」中使用示例結果的代碼無法投射「Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService」類型的對象以鍵入「Microsoft.VisualStudio.ExtensionManager.IVsExtensionManager」。 「 – Odrai

+0

添加這兩個DLL,ExtensionManager.dll和ExtensionEngine.dll導致以下錯誤:CS0433 \t類型'IInstalledExtension'存在於'Microsoft.VisualStudio.ExtensionEngine,Version = 15.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a」和 'Microsoft.VisualStudio.ExtensionManager,版本= 11.0.0.0,文化=中性公鑰= b03f5f7f11d50a3a' – Odrai

+0

Microsoft.VisualStudio.ExtensionManager應該版本= 15.0.0.0爲好。 –

0

是在ServiceProvider.GlobalProvider.GetService(typeof運算(SVsExtensionManager))返回null?或「作爲IVsExtensionManager」變爲空?

+0

'as IVsExtensionManager'返回null。 – Odrai