Visual studio 2012 如何通知编辑器文档更改
我在自定义项目系统上工作,在重命名项目时遇到问题。该项目系统的实施是基于MPF和通过解决方案资源管理器重命名项目或多或少没有任何问题,但 当一个项目被重命名时,我也会更新存储在文件本身中的信息。如果代码编辑器打开文档,编辑器中的文本不会被刷新(只有文档窗口的标题更改为新文件名)。当然,如果保存打开的文档,重命名操作应用的所有更改都将被覆盖Visual studio 2012 如何通知编辑器文档更改,visual-studio-2012,visual-studio-extensions,vsix,vsx,vspackage,Visual Studio 2012,Visual Studio Extensions,Vsix,Vsx,Vspackage,我在自定义项目系统上工作,在重命名项目时遇到问题。该项目系统的实施是基于MPF和通过解决方案资源管理器重命名项目或多或少没有任何问题,但 当一个项目被重命名时,我也会更新存储在文件本身中的信息。如果代码编辑器打开文档,编辑器中的文本不会被刷新(只有文档窗口的标题更改为新文件名)。当然,如果保存打开的文档,重命名操作应用的所有更改都将被覆盖 如何强制编辑器重新加载文档,以便显示自动更改?假设它是文本文件,而不是某个自定义设计器,请使用IVsRunningDocumentTable界面获取当前打开的
如何强制编辑器重新加载文档,以便显示自动更改?假设它是文本文件,而不是某个自定义设计器,请使用
IVsRunningDocumentTable
界面获取当前打开的文件的文本缓冲区。接口的名称是托管代码中最容易使用的名称。您可以调用IsMonikerValid
(其中“名字对象”是文件名)查看文件是否打开,如果打开,则调用GetDocumentData
获取文件的IVsTextBuffer
。使用这种类型本身相当烦人,因此,如果您只支持Visual Studio 2010或更高版本,请将其传递到以获取其更新的编辑器API版本
就他们“为什么”而言,这样做是个好主意:如果您编辑磁盘上的文件,然后尝试强制重新加载,您可能会遇到各种问题。如果文件在重命名之前未保存,则可能会意外丢失那些未保存的编辑。重新加载可能会导致文件的撤消历史丢失,并且使用编辑器跟踪跨距或标记跟踪文件中的点的任何其他扩展名/功能可能会丢失它们正在跟踪的点。如果文件是大文件,性能也会更好。如何编辑文件?只是更改磁盘上的位或通过一些编辑器API进行编辑?我有一个可以修改的AST模型;所以,是的,我更改了磁盘上的位…最好的方法不是编辑磁盘上的位,而是通过VS API编辑文本。如果你能避免的话,强制重新加载并不是件好事;你能找到一些文件吗?解决这类问题的最佳方法是什么;我的意思是要重命名的文档可以在编辑器中打开,也可以不打开。。。如何确定文档是否已打开;如果它打开了,我应该如何与窗口交互?通过VS API修改文档的推荐方法是什么?
IVsRunningDocumentTable4
仅在Visual Studio 2013中提供,不是吗?我可能需要使用IVsRunningDocumentTable
GetDocumentInfo
,如果我也想支持Visual Studio 2012……在这种情况下,只需使用编号较低的界面,但需要注意的是,您必须调用一些不太友好的方法。对那些处理INTPTR的人要非常小心。如果使用错误,将导致内存泄漏。我使用了IVsRunningDocumentTable
中的finandlockdocument
,并试图将封送的结果安全地强制转换为IVsTextBuffer
。这很有效。最后,我发布了文档中提到的ppunkDocData。一旦我从IVsTextBuffer
获得了ITextBuffer
,应用更改就不再是什么大事了。非常感谢!