从Visual Studio扩展中找出ProjectItem的源代码控制状态

时间:2015-12-23 17:55:24

标签: c# visual-studio version-control vsx

我目前正在开发Visual Studio扩展。对于一个新功能,我需要找出一个给定的ProjectItem(文件)是否被修改(自上次提交以来有“Pending Changes”)。为此,我想查询源代码控制提供程序。

  • 我已经尝试搜索ProjectItem的所有属性,但那里没有任何隐藏。
  • 我还尝试从Package.cs获取与源代码​​管理相关的服务。我尝试了IVsSccManager2,IVsSccManager3和IVsSccGlyphs。全部返回null(测试项目受源代码管理)。 编辑:我尝试通过在 Package.cs 中调用 GetService(typeof(IVsSccManager2))来获取这些服务。调试会话的源代码控制插件在调用此函数时正确显示已更改的文件。

我似乎无法在网上找到有关此主题的任何内容。我怎样才能找到修改后的状态?它甚至可能吗?

1 个答案:

答案 0 :(得分:1)

在让这个话题搁置一段时间之后,我最近又回到了它,并在我的同事的帮助下找到了解决方案。问题是我没有按位比较的经验,所以我不知道如何正确处理响应。幸运的是,我的同事给了我正确的提示。

解释状态的结果(感谢@ simon-mourier获取有关此代码的帮助):

uint[] sccStatus = new uint[] { 0 };
if (VSConstants.S_OK == manager.GetSccGlyph(1, new[] { filePath }, new[] { VsStateIcon.STATEICON_NOSTATEICON }, sccStatus))
{
    __SccStatus status = (__SccStatus)sccStatus[0];
}

必须与您正在寻找的__SccStatus状态进行按位比较,例如:

if ((sccStatus[0] & (uint)__SccStatus.SCC_STATUS_RESERVED_2) != 0)
    return true;

如果设置了状态,则比较返回true。如果您需要有关具体状态组合的帮助,请在此处发表评论,我可以提供帮助。