从Visual Studio扩展中查找ProjectItem的源代码管理状态
本文关键字:源代码 管理 状态 ProjectItem 查找 Visual Studio 扩展 | 更新日期: 2023-09-27 18:27:57
我目前正在开发一个Visual Studio扩展。对于一个新功能,我需要了解给定的ProjectItem(文件)是否被修改(自上次提交以来有"挂起的更改")。为此,我想查询源代码管理提供程序。
- 我已经尝试搜索ProjectItem的所有属性,但其中没有隐藏任何内容
- 我还尝试从Package.cs中获取与源代码管理相关的服务。我尝试获取IVsSccManager2、IVsSccManager 3和IVsSccGlyphs。所有返回null(测试项目受源代码管理)编辑:我试图通过调用Package.cs中的GetService(typeof(IVsSccManager2))来获取这些服务。调试会话的源代码管理插件在调用时正确显示更改的文件
我似乎在网上找不到关于这个话题的任何信息。如何查找修改后的状态?这可能吗?
在让这个话题静置一段时间后,我最近又回到了这个话题,并在同事的帮助下找到了解决方案。问题是我没有比特比较的经验,所以我不知道如何正确处理响应。幸运的是,我的同事给了我正确的小费。
要解释状态的结果(感谢@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
。如果你需要关于特定状态组合的含义的帮助,请在这里发表评论,我可以提供帮助。