C# 源代码生成器诊断文档页面链接

3
我编写了一个源代码生成器,但是它创建了一个错误,我希望能够通过转到文档页面为用户提供有关特定错误的更多信息。
幸运的是,DiagnosticDescriptor 具有描述为“helpLinkUri”的字段:

可选超链接,提供有关诊断信息的更详细描述。

但是当我尝试将helpLinkUri设置为像google.comhttp://google.comhttps://google.comwww.google.com这样的测试网站时,我会被重定向到https://learn.microsoft.com/en-us/visualstudio/ide/not-in-toc/default,这不是我设置的。这是在使用Visual Studio并单击错误面板中的错误代码时发生的。

如何打开用于源生成器诊断的自定义网页?文档中是否有未提及的任何限制?这是在Visual Studio内存在的一个限制吗?

CodeExample:

private static void ErrorMessage(SourceProductionContext _arg1, AttributeSourceWithContext _arg2)
{
    DiagnosticDescriptor errorType = new DiagnosticDescriptor(
        id: "Error1",
        title: "Incorrect line",
        messageFormat: "This is complex, open help link for good explanation",
        helpLinkUri: "google.com", // <----- this is not opened when inspecting the error
        defaultSeverity: DiagnosticSeverity.Warning,
        isEnabledByDefault: true);

    Diagnostic errorInstance = Diagnostic.Create(errorType, _arg2.GetLocation());
    _arg1.ReportDiagnostic(errorInstance);
}

你能分享更多关于目标页面不准确重定向的信息吗?例如,这个模块的关键代码。 - undefined
1
@wenbingeng-MSFT,我不理解这个问题。如果我提供Google.com的帮助网址,并打开错误的帮助页面,我会被发送到与问题相关的微软网站,而不是我指定的具有错误信息帮助的网站。 - undefined
程序运行出错后,此页面才会弹出。根据您的描述,代码可能存在问题。能否分享一些您的代码? - undefined
1
@wenbingeng-MSFT,这不是在执行过程中,我希望当我双击Visual Studios的“错误列表”窗格中的错误消息时,页面能够打开。如果您点击错误代码“Error1”(例如),我期望浏览器会打开到“google.com”,但实际上并没有。由于这是我的自定义代码生成器,所以我希望能够指向自己的域名而不是MSDN。 - undefined
我遇到了相同的问题。我的代码生成器对装饰枚举成员的属性感兴趣。如果我的代码生成器诊断出一个格式错误的属性,就会在属性下方出现红色或蓝色的波浪线,这是预期的行为。如果用户将鼠标悬停在波浪线上方,就会出现一个工具提示,其中包含来自DiagnosticDescriptor的预期诊断文本(ID和描述),例如:"AS101 The foo attribute is messed up." 如果描述符的helpLinkUri指定了一个URI,那么在工具提示中AS101将成为一个链接,并且将导航到预期的网站。但是在错误列表面板中,AS101将导航到微软的网站。 - undefined
1个回答

1
我遇到了同样的问题。
还有一个问题,链接会在消息后的描述列中写入。如果你点击它,Visual Studio会崩溃。
如你所知,在Visual Studio中使用源代码生成器时,它们并不总是按照编码的方式运行。 不用担心 -

尝试清理你的解决方案,构建,重新启动Visual Studio,然后重新构建你的解决方案。

这些就是源代码生成器的四骑士。
第一次构建或重新构建时,会发生某种生成器的缓存。 如果你开始编码并编辑生成器中的LiteralString值,你有时会注意到这一点,最终文档中的更改不会立即发生。 然而,如果在生成器所定位的文件中进行编辑,当生成器工作时,最终结果几乎会立即改变。

In the end i got it to work with:

new DiagnosticDescriptor(
    "ErrorCodeXXXX", 
    "Dumb code title", 
    "The code right here is dumb and dont always work as intended.", 
    "DumbFeatureError", 
    DiagnosticSeverity.Error, 
    true, 
    helpLinkUri: "https://DocLink.Domain/InternalDoc")

Edit: Now that i look at your code again , it might also be because you dont have "https://" in your URL.


我在上面的代码示例中提到了我尝试过的域名样式,其中包括 https:// 前缀,所以我不认为那是修复的方法。可能是 Visual Studio 的更新修复了这个问题?我使用的是 17.4.5 版本。 - undefined
我不知道任何更新。我只能说我之前也遇到了同样的问题(和其他问题),但是在“清理、构建、重启和重新构建”之后,问题就解决了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接