2012-09-07 2 views
5

Visual Studio 패키지를 개발 중이며 솔루션 탐색기에서 파일을 다른 파일에 종속되게 만드는 코드를 작성했습니다.기본 파일을 수정 한 후 VS 프로젝트를 프로그래밍 방식으로 새로 고치거나 다시로드하는 방법은 무엇입니까?

이 의미는 코드 숨김 파일 또는 디자이너 파일과 동일한 관계를 제공하며 부모 파일 아래에 +/- 아이콘이 중첩 된 것처럼 보입니다. 프로젝트가 닫히고 다시 열릴 때까지

+ MainForm.cs 


- MainForm.cs 
    MainForm.Designer.cs 
    MainForm.resx 

내가 성공적으로 기록하고 올바르게 기본 프로젝트 파일을 수정 한 코드는, 그러나 변화는 솔루션 탐색기에 반영되지 않습니다.

솔루션 탐색기에서 즉시 변경 내용을 볼 수 있도록 프로젝트를 새로 고치거나 다시로드하는 코드를 찾고 있습니다.

추가 정보 ...

는 여기에 종속 파일을 생성하는 메커니즘을 보여 sudo는 코드입니다.

IVsBuildPropertyStorage vsBuildPropertyStorage = GetBuildPropertyStorage(); 
vsBuildPropertyStorage.SetItemAttribute(projectItemIdentifier, "DependentUpon", parentFileName); 

또한 프로젝트를 다시로드하려고 시도했지만이를 추가하려고 시도했지만 효과가 없습니다.

EnvDTE.DTE dte = ...; 

string solutionName = Path.GetFileNameWithoutExtension(dte.Solution.FullName); 
string projectName = project.Name; 

dte.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Activate(); 
((DTE2)dte).ToolWindows.SolutionExplorer.GetItem(solutionName + @"\" + projectName).Select(vsUISelectionType.vsUISelectionTypeSelect); 

dte.ExecuteCommand("Project.UnloadProject"); 
dte.ExecuteCommand("Project.ReloadProject"); 

주 프로젝트가 저장되어 있지 않은 경우, 사용자가 대화 상자를 얻을 것이다 :이 일을하는 유일한 방법 AFAIK

project.Save(); 
VSProject obj = project.Object as VSProject; 
obj.Refresh(); 
+0

projectItemIdentifier에 사용한 값을 어떻게 찾았습니까? 그리고 프로젝트를 언로드하지 않아도 새로 고치기위한 좋은 해결책이 떠 올랐습니까? – Colin

+0

@Colin 이것은 프로젝트 파일의 XML을 수동으로 조작하여 프로젝트 내에서 변경하는 다소 무거운 강요 방법입니다. 재 장전이 필요할 것이지만 나는 이것을 할 수있는 좋은 방법을 찾지 못했다. 더 나은 방법은 VS API (EnvDTE) 내에서 올바른 연산을 찾아 대신 호출하는 것입니다. API를 통해 진행하는 것이 훨씬 강력하며 VS가 필요한 모든 재로드를 처리합니다. 어떤 작업을 수행하려고합니까? 파일에 종속 파일을 추가하면 그 파일을 도울 수 있습니다. – Martyn

+0

@Colin 죄송합니다. projectItemIdentifier에 대한 도움을 드릴 수 없습니다. 나는이 코드 나 다른 유사한 코드를 사용하지 않게되었다. VS API는 개체 지향적이며 식별자 문자열 대신 ProjectItem 개체를 제공함으로써 작동합니다. ProjectItems (효과적으로 프로젝트의 파일과 폴더)는 Project.ProjectItems 속성을 반복하여 검색 할 수 있습니다. projectItemIdentifier가 정말로 필요한 경우에는 디버깅을 제안하고 ProjectItem 객체의 속성을 살펴 보겠습니다. – Martyn

답변

8

솔루션 탐색기 도구 - 윈도우의 자동화를 통해입니다 상자에 "Project.UnloadProject"호출 이전에.