我通过DGML API生成自定义工作流程图,其中每个节点对应一个C#类。我希望能够使用内置的“转到定义”'功能,但缺乏文档。
答案 0 :(得分:1)
如果您知道类的文件名和符号定义的位置,则可以使用VsShellUtilities
类打开文档并将代码工件滚动到视图中(通过设置插入符号位置)。在我的一个扩展中,我做了类似的事情......
如果我使用SourceInfo
类型存储文件名和文本范围......
void GotoDefinition(
IServiceProvider serviceProvider,
SourceInfo source)
{
IVsUIHierarchy hierarchy;
uint itemId;
IVsWindowFrame windowFrame;
IVsTextView view;
VsShellUtilities.OpenDocument(
serviceProvider,
source.Filename,
Guid.Empty,
out hierarchy,
out itemId,
out windowFrame,
out view);
if (view != null)
{
int line, column;
int pos = source.TextRange.Start;
if (view.GetLineAndColumn(pos, out line, out column) == VSConstants.S_OK)
{
view.SetCaretPos(line, column);
view.CenterLines(line, 1);
}
}
}
class SourceInfo
{
public string Filename { get; set; }
public TextRange TextRange { get; set; }
}
答案 1 :(得分:1)
您无法修改goto定义,但可以使用“goto reference”。如果在文本编辑器中手动编辑DGML文件,则可以向节点添加“Reference”属性,如下所示:
<Node Id="Boomerang" Reference="Boomerang.dgml"/>
然后当您在VS中右键单击此节点时,您将看到一个名为“Go To Reference”的新菜单,其中包含一个包含“Reference”的子菜单,如果单击此按钮将打开引用的DGML文件。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/ee842619.aspx#AddReferences。
答案 2 :(得分:0)
Visual Studio拥有自己的属性“SourceLocation”
您应该在属性中声明它
<Properties>
...
<Property Id="SourceLocation" Label="Start Line Number" DataType="Microsoft.VisualStudio.GraphModel.CodeSchema.SourceLocation" />
...
</Properties>
然后在Node element f.e。
中使用它<Node Id="class1" Label="FirstClass" SourceLocation="(Assembly=file:///D:/Prj/TestApp/AppConsole/Program.cs StartLineNumber=8 StartCharacterOffset=1 EndLineNumber=8 EndCharacterOffset=1)"/>