【问题标题】:Visual Studio - inject hard coded number / identifier in to codeVisual Studio - 将硬编码的数字/标识符注入代码
【发布时间】:2020-02-06 00:17:02
【问题描述】:

这方面的事情可能吗? 使用 Visual Studio(我猜这是一种与语言无关的语言,但我使用的是 C#),预编译,我想以某种方式注入和替换具有唯一 ID(或数字很好!)的值。

例如

public void HelloWorld (
{
    {VARIABLE_FOR_UNIQUE_ID_REPLACED_AT_COMPILE_TIME}
    var someVar = "Error Code#";

    console.print(someVar + {VARIABLE_FOR_UNIQUE_ID_REPLACED_AT_COMPILE_TIME})

}

因此,对于每个函数,我都会有 {VARIABLE_FOR_UNIQUE_ID_REPLACED_AT_COMPILE_TIME} 并且它将是该函数的唯一 ID,在整个解决方案中的每个文件中。 它不需要像 GUID 这样复杂的东西,理想情况下它只是添加时的增量数字,但添加后不会更改。此数字用于识别错误代码的功能 - 因此即使消息是通用的“出现问题”,我也可以跟踪错误源自何处,例如“错误代码 #445 出现问题”、“错误代码 #6778 出现问题”。

【问题讨论】:

    标签: visual-studio compile-time compiler-services


    【解决方案1】:

    我认为你应该自己管理。

    想一想:

    如果您收到“错误代码 #445 出现问题”的错误报告,那么您要做的第一件事就是在您的代码库中搜索“445”以找到原始代码 - 但您找不到任何与您所描述的方案,因为错误的实际来源只会说 {VARIABLE_FOR_UNIQUE_ID_REPLACED_AT_COMPILE_TIME}。

    另一方面,如果您只是自己管理它并编写如下内容:

    int errorCode = 445;
    

    ...并始终在代码中保持相同的模式,然后在需要查找 445 的调试情况下,您实际上可以在代码库中搜索 445 并找到错误的来源。

    【讨论】:

    • 谢谢,我确实按照您的建议考虑了这一点。问题是,在有很多文件和错误代码的环境中,这是相当困难的,并且可能很难找到最后一个数字,并且许多开发人员可能同时使用相同的数字。是否可以编写脚本或一些第三方工具来追溯扫描和注入这些值?
    • @Questioner 为什么不为每个源文件分配一个编号,并使用从一个开始的源文件对消息进行编号。那么错误号可能类似于sourceFileNumber * 1000 + errorNumberWithinFile。这样每个文件都是独立的,许多开发人员只需使 errorNumberWithinFile 在文件中唯一。
    【解决方案2】:

    在 C# 中,您可以从代码中获取方法名称,例如:

    public void HelloWorld()
    {
        ShowError();
    }
    
    static void ShowError([System.Runtime.CompilerServices.CallerMemberName] string caller = null)
    {
        Console.WriteLine("Error Code for " + caller);
    }
    

    它将打印:“HelloWorld 的错误代码”。

    【讨论】:

    • 谢谢。这很有用,但不是我需要的。不公开函数名称的短值将是理想的。这就是为什么递增数字甚至短 GUID 会很棒的原因。如果它可以自动硬编码而不是动态编码,那么它是理想的,因为开发人员可以找到相应的行。实际上可以插入行号+文件名吗?!
    • @Questioner 是的,使用 CallerLineNumberAttribute 和 CallerFilePathAttribute:docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
    猜你喜欢
    • 2018-05-24
    • 2020-03-15
    • 2014-01-29
    • 1970-01-01
    • 2021-10-01
    • 2016-12-26
    • 2015-08-28
    • 2010-12-23
    • 2023-02-02
    相关资源
    最近更新 更多