我在自定义项目系统上工作,我在重命名项目时遇到问题。项目系统实施基于MPF,并通过解决方案资源管理器重命名项目或多或少地工作,没有任何问题,但......
当项目被重命名时,我还会更新存储在文件本身中的信息。如果代码编辑器打开文档,编辑器中的文本不会刷新(只有文档窗口的标题更改为新文件名)。如果我保存打开的文档,重命名操作所应用的所有更改都会被覆盖,当然。
如何强制编辑器重新加载文档,以便显示自动更改?
答案 0 :(得分:1)
假设它是一个文本文件而不是某个自定义设计器,请使用IVsRunningDocumentTable
接口获取当前打开的文件的文本缓冲区。接口的fourth iteration是托管代码中最容易使用的接口。您可以调用IsMonikerValid
(其中“名字对象”是文件名)以查看文件是否已打开,如果是,则调用GetDocumentData
以获取文件的IVsTextBuffer
。该类型本身使用起来相当烦人,因此如果您只支持Visual Studio 2010或更高版本,请将其传递给this function以获取更新的编辑器API版本。
至于“为什么”这样做是个好主意:如果您在磁盘上编辑文件然后尝试强制重新加载,则可能会遇到各种问题。如果在重命名之前未保存文件,则可能会意外丢失未保存的编辑内容。重新加载可能会导致文件的撤消历史记录丢失,并且使用编辑器跟踪跨度或标记在文件中跟踪点的任何其他扩展/功能可能会丢失他们正在跟踪的点。如果文件是一个大文件,性能也应该更好。