如何通知编辑器有关文档更改的信息

时间:2014-05-23 10:10:56

标签: visual-studio-2012 visual-studio-extensions vsix vsx vspackage

我在自定义项目系统上工作,我在重命名项目时遇到问题。项目系统实施基于MPF,并通过解决方案资源管理器重命名项目或多或少地工作,没有任何问题,但......

当项目被重命名时,我还会更新存储在文件本身中的信息。如果代码编辑器打开文档,编辑器中的文本不会刷新(只有文档窗口的标题更改为新文件名)。如果我保存打开的文档,重命名操作所应用的所有更改都会被覆盖,当然。

如何强制编辑器重新加载文档,以便显示自动更改?

1 个答案:

答案 0 :(得分:1)

假设它是一个文本文件而不是某个自定义设计器,请使用IVsRunningDocumentTable接口获取当前打开的文件的文本缓冲区。接口的fourth iteration是托管代码中最容易使用的接口。您可以调用IsMonikerValid(其中“名字对象”是文件名)以查看文件是否已打开,如果是,则调用GetDocumentData以获取文件的IVsTextBuffer。该类型本身使用起来相当烦人,因此如果您只支持Visual Studio 2010或更高版本,请将其传递给this function以获取更新的编辑器API版本。

至于“为什么”这样做是个好主意:如果您在磁盘上编辑文件然后尝试强制重新加载,则可能会遇到各种问题。如果在重命名之前未保存文件,则可能会意外丢失未保存的编辑内容。重新加载可能会导致文件的撤消历史记录丢失,并且使用编辑器跟踪跨度或标记在文件中跟踪点的任何其他扩展/功能可能会丢失他们正在跟踪的点。如果文件是一个大文件,性能也应该更好。