从 Visual Studio 扩展中找出 ProjectItem 的源代码控制状态
Find out the source control state of a ProjectItem from a Visual Studio extension
我目前正在开发 Visual Studio 扩展。对于新功能,我需要查明给定的 ProjectItem(文件)是否已修改(自上次提交以来已 "Pending Changes")。为此,我想查询源代码管理提供程序。
- 我已经尝试搜索 ProjectItem 的所有属性,但没有任何隐藏内容。
- 我还尝试从 Package.cs 获取与源代码管理关联的服务。我尝试获取 IVsSccManager2、IVsSccManager3 和 IVsSccGlyphs。全部 return null(测试项目在源代码管理下)。 编辑: 我尝试通过在我的 Package.cs[ 中调用 GetService(typeof(IVsSccManager2)) 来获取这些服务=23=]。我的调试会话的源代码管理插件在调用时正确显示了更改的文件。
我似乎无法在网上找到有关此主题的任何信息。我怎样才能找到修改后的状态?有可能吗?
让这个话题搁置一段时间后,我最近又回到了这个话题,并在同事的帮助下找到了解决方案。问题是我没有按位比较的经验,所以我不知道如何正确处理响应。幸运的是我的同事给了我正确的建议。
解释状态结果(感谢@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;
比较returns true
情况下的状态是否设置。如果您需要帮助了解特定状态组合的含义,请在此处发表评论,我可以提供帮助。
我目前正在开发 Visual Studio 扩展。对于新功能,我需要查明给定的 ProjectItem(文件)是否已修改(自上次提交以来已 "Pending Changes")。为此,我想查询源代码管理提供程序。
- 我已经尝试搜索 ProjectItem 的所有属性,但没有任何隐藏内容。
- 我还尝试从 Package.cs 获取与源代码管理关联的服务。我尝试获取 IVsSccManager2、IVsSccManager3 和 IVsSccGlyphs。全部 return null(测试项目在源代码管理下)。 编辑: 我尝试通过在我的 Package.cs[ 中调用 GetService(typeof(IVsSccManager2)) 来获取这些服务=23=]。我的调试会话的源代码管理插件在调用时正确显示了更改的文件。
我似乎无法在网上找到有关此主题的任何信息。我怎样才能找到修改后的状态?有可能吗?
让这个话题搁置一段时间后,我最近又回到了这个话题,并在同事的帮助下找到了解决方案。问题是我没有按位比较的经验,所以我不知道如何正确处理响应。幸运的是我的同事给了我正确的建议。
解释状态结果(感谢@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;
比较returns true
情况下的状态是否设置。如果您需要帮助了解特定状态组合的含义,请在此处发表评论,我可以提供帮助。