我创建了 VSIX 包,它在 VS2010 的解决方案资源管理器中将文件状态显示为字形。我实现了基本的 SccProvider(继承自 IVsSccProvider、IVsSccManager2、IVsSccGlyphs 等),包括 GetSccGlyph 方法。因此,当解决方案打开 vsix 包时,会成功加载整个解决方案的初始字形。但我找不到如何更新特定(或整个)解决方案项的字形的方法。适当的方式应该看起来像
var rgsiGlyphs = new VsStateIcon[1];
var rgdwSccStatus = new uint[1];
GetSccGlyph(1, new[] { itemFilePath }, rgsiGlyphs, rgdwSccStatus);
hierarchy.SetProperty(itemId, (int)__VSHPROPID.VSHPROPID_StateIconIndex, rgsiGlyphs[0]);
其中itemId - 是特定的项目项目 ID。不幸的是,这种方法仅适用于解决方案,但不会更新项目/类项目类型的字形。我读到有另一种方法如何强制所有项目子项的字形刷新
sccProject2.SccGlyphChanged(0, null, null, null);
但它也不起作用。我还读到字形状态可以缓存在 Scc 中,并且应该以某种方式强制刷新,但我还是没有找到任何正确的参考。
我知道这是可能的,因为 VisualSvn 和其他类似的插件会以某种方式动态更新字形。有没有人解决过这个问题?