如何在修改基础文件后以编程方式刷新/重新加载VS项目?

Mar*_*tyn 5 vsx visual-studio-2010 vspackage visual-studio vsix

我正在开发一个Visual Studio包,并且我编写了一些代码,这些代码将使解决方案资源管理器中的文件依赖于另一个文件.

这意味着它为它们提供了与代码隐藏文件或设计器文件相同的关系,它们出现在父文件下,并带有加号/减号图标.

+ MainForm.cs


- MainForm.cs
   MainForm.Designer.cs
   MainForm.resx
Run Code Online (Sandbox Code Playgroud)

我已成功编写并正确修改底层项目文件的代码,但在项目关闭并重新打开之前,更改不会反映在解决方案资源管理器中.

我正在寻找一些代码来刷新或重新加载项目,以便在解决方案资源管理器中立即显示更改.

更多的信息.​​..

这是sudo代码,演示了我创建依赖文件的机制.

IVsBuildPropertyStorage vsBuildPropertyStorage = GetBuildPropertyStorage();
vsBuildPropertyStorage.SetItemAttribute(projectItemIdentifier, "DependentUpon", parentFileName);
Run Code Online (Sandbox Code Playgroud)

我也尝试添加它以试图让项目重新加载,但它没有任何效果.

project.Save();
VSProject obj = project.Object as VSProject;
obj.Refresh();
Run Code Online (Sandbox Code Playgroud)

Dan*_*lan 9

AFAIK执行此操作的唯一方法是通过Solution Explorer工具窗口的自动化:

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");
Run Code Online (Sandbox Code Playgroud)

请注意,如果尚未保存项目,则用户将在"Project.UnloadProject"调用之前获得一个对话框.