1

我正在通过 DGML API 生成一个自定义工作流程图,其中每个节点对应一个 C# 类。我希望能够使用内置的“转到定义”功能,但缺少文档。

4

3 回答 3

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; }
}
于 2015-02-13T15:12:27.070 回答
1

您不能修改 goto 定义,但可以使用“goto reference”代替。如果您在文本编辑器中手动编辑 DGML 文件,您可以将“参考”属性添加到节点,如下所示:

<Node Id="Boomerang" Reference="Boomerang.dgml"/>

然后,当您在 VS 中右键单击此节点时,您将看到一个名为“Go To Reference”的新菜单出现,其中包含一个包含“Reference”的子菜单,如果您单击它,它将打开引用的 DGML 文件。

有关更多详细信息,请参阅https://msdn.microsoft.com/en-us/library/ee842619.aspx#AddReferences

于 2016-05-02T01:36:50.080 回答
0

Visual Studio 拥有自己的属性“SourceLocation”

您应该在属性中声明它

<Properties>
...
<Property Id="SourceLocation" Label="Start Line Number" DataType="Microsoft.VisualStudio.GraphModel.CodeSchema.SourceLocation" />
...
</Properties>

然后在 Node 元素 fe 中使用它

<Node Id="class1" Label="FirstClass" SourceLocation="(Assembly=file:///D:/Prj/TestApp/AppConsole/Program.cs StartLineNumber=8 StartCharacterOffset=1 EndLineNumber=8 EndCharacterOffset=1)"/>
于 2017-05-16T11:47:51.197 回答