ReSharper-Visual Studio中非活动文件的文档保存事件

时间:2019-03-20 15:58:06

标签: resharper vsix

我已经为Visual Studio设置了自己的源代码管理插件。

它已在Visual Studio中注册,并且可以从Source Control插件列表中选择。

我在Visual Studio中使用修改过的文件没有任何问题,因为我在保存之前用于捕获事件: IVsRunningDocTableEvents3

如果该文件未在Visual Studio中作为活动文档加载,则我在检测到它即将被编辑时遇到问题,因此可以从Source Control中检出它。

我尝试使用ReSharper事件-此处建议使用DocumentManagerOperations:

https://resharper-support.jetbrains.com/hc/en-us/community/posts/205991489-Document-Saved-Event

在检测是否需要检出这些类型的文件时遇到问题:

  • .DotSettings。 –保存ReSharper选项设置时

  • csproj –使用ReSharper添加Nuget软件包时。

  • 当使用ReSharper编辑未在VS中打开的文件时,即
  • .cs,即 修复项目中的命名。

编辑文件但未加载文件时会触发事件吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我使用了界面: IVsQueryEditQuerySave2

更多信息在这里: https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.shell.interop.ivsqueryeditquerysave2?view=visualstudiosdk-2017

并利用:

public int QueryEditFiles(uint rgfQueryEdit, int cFiles, string[] rgpszMkDocuments, uint[] rgrgf,
        VSQEQS_FILE_ATTRIBUTE_DATA[] rgFileInfo, out uint pfEditVerdict, out uint prgfMoreInfo)

并且:

public int QuerySaveFiles(uint rgfQuerySave, int cFiles, string[] rgpszMkDocuments, uint[] rgrgf,
        VSQEQS_FILE_ATTRIBUTE_DATA[] rgFileInfo, out uint pdwQsResult)

类似这样的东西:

if (rgfQueryEdit != (uint)tagVSQueryEditFlags.QEF_ReportOnly)
        {
            if (rgpszMkDocuments != null)
            {
                foreach (var doc in rgpszMkDocuments)
                {
                    //Do Something

希望对您有帮助。