2014-03-26 4 views
2

VSIX 프로젝트를 작성 중입니다. 코드를 사용하여 업데이트를 사용할 수 있는지 여부를 결정할 수 있습니다.코드에서 현재 VSIX 패키지의 버전을 감지하십시오.

Visual Studio에서 업데이트를 확인할 수 있다는 것을 알고 있지만 확장 프로그램에서 사용자 (개발자)에게 좀 더 자세한 내용을 묻는 메시지를 표시하고 싶습니다.

  1. 확장 프로그램이 어떻게 패키지 매니페스트에서 자체 버전을 읽을 수 있는지 궁금합니다.

감사합니다.

+0

직접 어셈블리에서 버전 정보를 가져올 수 없습니까? – Lloyd

+0

@Lloyd, 답장을 보내 주셔서 감사합니다. 즉각적인 어셈블리의 버전 정보는 vsix의 버전 정보와 동기화되지 않습니다. 동기화 상태를 유지하는 것도 좋은 생각 일 수 있습니다. 감사. – Nordin

+0

[Visual Studio 2010 생산성 도구] (http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef)는 확장 프로그램 업데이트에 대한 상태 트레이 알림을 제공합니다. 이것은 [Visual Studio 2012의 표준 기능] (http://blogs.msdn.com/b/visualstudio/archive/2012/04/06/improving-how-we-update-visual-studio.aspx)이되었습니다. ** 비표준 방식으로이 기능을 다시 구현하지 마십시오 **; 오히려 사용자에게 기존 기능에 대해 알리십시오. –

답변

6

매니페스트 XML 파일에서 직접 버전 정보를 읽을 수 있다는 것을 알게되었습니다.

 var doc = new XmlDocument(); 
     doc.Load(manifestPath); 
     var metaData = doc.DocumentElement.ChildNodes.Cast<XmlElement>().First(x => x.Name == "Metadata"); 
     var identity = metaData.ChildNodes.Cast<XmlElement>().First(x => x.Name == "Identity"); 
     var version = identity.GetAttribute("Version"); 

위의 코드를 캡슐화 한 gist C# class code도 작성했습니다. 게다가, 버전,이 기술은 매니 페스트 파일에 의해 제공되는 다른 정보를 얻기 위해 사용될 수 있습니다.

+1

고마워요, 그 문제에 대한 해결책을 찾고자했습니다. 당신은 나를 위해 많은 시간을 절약했습니다. – Artiom

+0

'manifestPath'를 어떻게 얻습니까? –

+1

@AliSharabiani 위 답변에서 내가 제공 한 요지를 검토해보십시오. Path.Combine (assemblyDirectory, "extension.vsixmanifest") – Nordin

4

Nordin의 솔루션은 훌륭하게 보이지만 확장 기능의 최신 버전을 얻는 방법이 하나 더 있다는 것을 말씀 드리고 싶습니다. 이 솔루션을 사용하는 클라이언트에서 매니페스트에 대한 경로를 모르는 경우 솔루션이 더 나은지 어떤 상황인지 전혀 알 수 없습니다.

// get ExtensionManager 
IVsExtensionManager manager = GetService(typeof(SVsExtensionManager)) as IVsExtensionManager; 
// get your extension by Product Id 
IInstalledExtension myExtension = manager.GetInstalledExtension("ProductId-1234-1234-1234-123456789012"); 
// get current version 
Version currentVersion = myExtension.Header.Version; 

나는 내 Initialize() 내 패키지의 방법이라고합니다.

+0

고마워, 나는이 해결책을 시도 할 것이다. – Nordin

+2

한 가지 빠진 것이 있습니다.이 DLL은 추가 할 참조로 표시되지 않으므로 다음 위치에서 찾아보기를 통해 추가해야합니다. C : \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio. ExtensionManager \ {사용할 버전} \ Microsoft.VisualStudio.ExtensionManager.dll – Skuld

+0

챔피언처럼 작동합니다! 감사! _Visual Studio Experimental Instance_ 및 패키지를 배포 한 후 테스트되었습니다. –

관련 문제