2011-12-07 2 views
1

템플릿으로 생성 된 새로운 솔루션에 기존 프로젝트를 추가하고 싶습니다. vstemplate 파일을 통해이 작업을 수행 할 수 있습니까? 아니면 IWizard를 사용해야합니까? 그리고 IWizard를 사용해야한다면 어떻게 제대로 작동 할 수 있습니까? 일부 솔루션 폴더를 추가템플릿 마법사를 통해 기존 프로젝트를 Visual Studio 프로젝트에 추가하는 방법

  1. 멀티 프로젝트 템플릿과 하나 개의 프로젝트 정의 wizarddata와
  2. 마법사 : 현재 나는 다음 시도했다. $ wizarddata $에는 이미 하드 드라이브에있는 프로젝트에 대한 상대 경로가 포함되어 있습니다. 마법사에서이 프로젝트의 기본 경로를 선택합니다. 이 프로젝트를 내 솔루션에 어떻게 추가 할 수 있습니까?

    var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0"); 
    var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type); 
    var solution = (EnvDTE100.Solution4)dte2.Solution; 
    var projects = dte2.ActiveSolutionProjects; 
    

    프로젝트 모든 프로젝트가 포함되어 있지 않습니다 :

주요 문제는 해결 객체가 아무것도 포함하지 않는 것 같다. dte2.Solution.Projects도 마찬가지입니다. 이 코드는 IWizard 구현의 RunFinished 함수에서 호출됩니다. 또는 :

var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0"); 
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type); 
dte2.ExecuteCommand("File.AddExistingProject", "X:\\Path\\To\\Project\\ProjectName.csproj"); 

은 COM 예외를 발생시킵니다. 비주얼 스튜디오의 매크로에서 ExecuteCommand를 실행하면 정상적으로 작동합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

확인 문제가 발견되었습니다. DTE-Object 생성과 함께 위의 코드 스 니펫이 올바르게 작동하지 않습니다. RunStarted 함수에서 automationObject를 기억하고 RunFinished 함수에서 사용하면 모든 것이 예상대로 작동합니다.

public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
{ 
    // ... 
    dte = automationObject as DTE; 
} 

public void RunFinished() 
{ 
    // ... 
    // projects will automatically added relative 
    dte.ExecuteCommand("File.AddExistingProject", "\""+path+"\""); 
} 
+0

또한이 접근 방식을 사용하여 서버 탐색기 연결 관리자를 얻습니다. 이 코드를 사용 : var dte = automationObject as DTE; Microsoft.VisualStudio.Shell.ServiceProvider sp = new Microsoft.VisualStudio.Shell.ServiceProvider ((IOleServiceProvider) dte); IVsDataExplorerConnectionManager seConnectionsMgr = (IVsDataExplorerConnectionManager) sp.GetService (typeof (IVsDataExplorerConnectionManager) .GUID); 바라기를 이것은 누군가 다른 사람에게 약간 시간을 절약한다. – gab

관련 문제