gpt4 book ai didi

visual-studio-2017 - 如何在Visual Studio 2017 sdk中拦截项目保存事件?

转载 作者:行者123 更新时间:2023-12-02 03:47:42 25 4
gpt4 key购买 nike

是否可以在 Visual Studio 2017 sdk 中拦截项目保存事件?

更新

我目前正在开发 Visual Studio 2017 的扩展,我需要知道何时保留任何更改。

例如:当我在项目中添加新引用时(我知道添加/更改/删除引用时会发生一些事件,但不满足我的需要),该项目被标记为待保存。我需要在保存时拦截它(如果在保存之前拦截就更好了)。

我尝试了Dte.Events.DocumentEvents.DocumentSaved事件,但在保存项目中没有触发; DTE.Events.SolutionEventsDTE.Events.SolutionItemEvents 没有我需要的类型的事件。

可能吗?

最佳答案

在这种情况下,正确的方法是使用实​​现 IVsRunningDocTableEvents3 覆盖 OnBeforeSave 方法。

通过这种方式,我可以准确地知道何时保存项目并执行其需要的操作。

例如:

uint cookie;
var runningDocumentTable = (IVsRunningDocumentTable)GetGlobalService(typeof(SVsRunningDocumentTable));

runningDocumentTable.AdviseRunningDocTableEvents(new RunningDocTableEventsHandler(), out cookie);
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;

namespace YourProject
{
internal class RunningDocTableEventsHandler : IVsRunningDocTableEvents3
{

#region Methods

public int OnAfterFirstDocumentLock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)
{
return VSConstants.S_OK;
}

public int OnBeforeLastDocumentUnlock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)
{
return VSConstants.S_OK;
}

public int OnAfterSave(uint docCookie)
{
return VSConstants.S_OK;
}

public int OnAfterAttributeChange(uint docCookie, uint grfAttribs)
{
return VSConstants.S_OK;
}

public int OnBeforeDocumentWindowShow(uint docCookie, int fFirstShow, IVsWindowFrame pFrame)
{
return VSConstants.S_OK;
}

public int OnAfterDocumentWindowHide(uint docCookie, IVsWindowFrame pFrame)
{
return VSConstants.S_OK;
}

public int OnAfterAttributeChangeEx(uint docCookie, uint grfAttribs, IVsHierarchy pHierOld, uint itemidOld, string pszMkDocumentOld, IVsHierarchy pHierNew, uint itemidNew, string pszMkDocumentNew)
{
return VSConstants.S_OK;
}

public int OnBeforeSave(uint docCookie)
{
/////// MY CODE ////////
return VSConstants.S_OK;
}

#endregion Methods
}
}

关于visual-studio-2017 - 如何在Visual Studio 2017 sdk中拦截项目保存事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46249495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com