4

템플릿에서 프로젝트를 만들고 프로젝트가 확장 디렉터리에있는 프로젝트에 대한 참조를 추가해야하는 Visual Studio 마법사를 변경하고 있습니다. 그래서 <hintpath>을 설정해야합니다.Visual Studio 2010 확장명의 홈 디렉터리 찾기

나는 실행 VS 확장이 같은 디렉토리 이름의 확장 디렉토리에 발견 할 수있는 방법을 알아낼 수 없었던

:

%을 USERPROFILE % \의 AppData \ 로컬 \ 마이크로 소프트 \으로 VisualStudio \ 10.0 \ 확장 \ myCompany \ 내 Extension

사용 System.Reflection.Assembly.GetExecutingAssembly().CodeBase 수율 :

"C : \ WINDOWS \ Microsoft.Net \ 조립 \ GAC_MSIL \ myCompany.myExtension \ V 4.0_1.0.0.0____936015a19c3638eb \ myCompany.myExtension.dll "

불행히도 도움이되지 않습니다. GetCallingAssembly()을 사용하면 MSIL_GAC의 다른 디렉토리를 가리 킵니다.

이 정보를 반환하는 Visual Studio 인터페이스가 있습니까? 나는 그것을 발견 할 수 없었다.

가능하지 않은 경우 확장 프로그램이 실험 인스턴스에서 실행 중인지 아닌지를 실험적으로 실행 중인지 확인할 수 있습니까? 이 정보를 사용하여 확장 디렉토리를 찾을 수 있습니다.

답변

4

어쩌면 IInstalledExtension.InstallPath을 확인하십시오. IVsExtensionManager을 통해 IInstalledExtension을받을 수 있습니다.

불행하게도, 발언의 메시지가이없는 것을 할 수있는 올바른 방법입니다 제안 :이 API는 확장 관리자 인프라를 지원하지만

을, 우리는 대상이 있기 때문에 당신이 그것을 사용하지 않는 것이 좋습니다 변화.

편집 :

static IVsExtensionManager GetExtensionManager() 
    { 
     return myPackage.GetService(System.typeof(IVsExtensionManager)) as IVsExtensionManager; 
    } 
    static IInstalledExtension GetExtension(string identifier) 
    { 
     return GetExtensionManager().GetInstalledExtension(identifier); 
    } 
    static string GetExtensionDirectory(string identifier) 
    { 
     return GetExtension(identifier).InstallPath; 
    } 

stringidentifier 당신이 당신의 확장의 source.extension.vsixmanifest 파일의 "ID"필드에 넣어 뭐든 : 여기에 코드입니다. 기본값은 패키지 GUID입니다.

+0

감사합니다! 나는 그것에게 약간의 온전한 점검과 함께 시험을 줄 것이다. 나는 지금 내가 사용하고있는 kludge로 돌아갈 수있다. – UweBaemayr

+0

아마도 유용한 반환합니다 Package.GetGlobalService (typeof (IVsExtensionManager)) IVsExtensionManager로; – Kiquenet

1

... 오래된 대답 질문을 파고 죄송합니다

나는 비슷한 문제로보고되었고, 확장 관리자 구현,하지만 당신은 사용하고 싶지 않으면 비록이, 그냥 아주 끔찍 결정

그것은 이러한 링크는 도움이 될 것입니다

http://blog.ninlabs.com/2011/04/auto-update-visual-studio-extensions/

https://stackoverflow.com/a/24294185

는 그러나, 나는 Asp.Net.Scaffolding에서 CodeGenerator 템플릿 파일을 액세스하는 방법을 조사하기로 결정했다. 매우 쉽게 밝혀졌습니다.

var path = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "MyPath"); 

단일체