【问题标题】:code Analyser for c# and VB.NET用于 c# 和 VB.NET 的代码分析器
【发布时间】:2011-02-28 09:08:35
【问题描述】:

m 制作一个工具来在运行时检查编码标准意味着我在运行中提供标准以检查我正在为标准创建一个 XML 文件,并从该 XML 文件检查整个项目。 我还有其他功能可以在启动该功能之前发表评论。

代码在 VB 中工作正常以供注释

While oRead.Peek <> -1
                strLineIn = oRead.ReadLine().Trim
                intLineNo = intLineNo + 1
                Dim arr As String() = SplitWords(strLineIn)
                'To update the Progress Bar 
                setProgressBar(intLineNo, intLinesCount)

                If Not strLineIn.StartsWith("'") Then

                    If (strLineIn.Contains("Sub") Or strLineIn.Contains("Function")) _
                        And Not (strLineIn.Contains("End Sub") Or strLineIn.Contains("End Function")) _
                        And Not (strLineIn.Contains("Exit Sub") Or strLineIn.Contains("Exit Function")) _
                        And Not strLineIn.StartsWith("'") Then
                        Select Case Array.IndexOf(arr, "Sub")
                            Case 0, 1, 2
                                createErrorLog(strLineIn, fi.Name, intLineNo, "No Commnet Line for Sub Procedure", fi, strErroLogFile)
                        End Select
                        Select Case Array.IndexOf(arr, "Function")
                            Case 0, 1, 2
                                createErrorLog(strLineIn, fi.Name, intLineNo, "No Commnet line for Function", fi, strErroLogFile)
                        End Select
                    End If
                Else
                    'createErrorLog(processXMLComment(oRead), fi.Name, intLineNo, "No Commnet Line", fi)
                    strLineIn = processXMLComment(oRead, intLineNo)
                End If
                If Not strLineIn.Trim.StartsWith("'") Then
                    For intVar As Integer = 0 To DataType.Count - 1
                        If strLineIn.Contains(DataType(intVar).InnerText) Then
                            arr = SplitWords(strLineIn)
                            For inti As Integer = 0 To arr.Length - 1
                                If arr(inti) = DataType(intVar).InnerText Then
                                    If (arr(inti - 1) = "As") Then
                                        If strLineIn.LastIndexOf(",") = strLineIn.IndexOf(arr(inti - 2)) - 2 Then
                                            Dim intPosition As Integer = 2
                                            For Each c In strLineIn
                                                If Not arr(inti - intPosition).StartsWith(VarName(intVar).InnerText) Then
                                                    createErrorLog(strLineIn, fi.Name, intLineNo, arr(inti - intPosition), fi, strErroLogFile)
                                                End If
                                                intPosition = intPosition + 1
                                                If arr(inti - intPosition) = "Dim" Or arr(inti - intPosition) = "Private" Then
                                                    Exit For
                                                End If
                                            Next
                                        Else
                                            If Not arr(inti - 2).StartsWith(VarName(intVar).InnerText) Then
                                                If Not (strLineIn.Contains("Function") And _
                                                arr(arr.Length - 3) = arr(inti - 2)) Then
                                                    createErrorLog(strLineIn, fi.Name, intLineNo, arr(inti - 2), fi, strErroLogFile)
                                                End If
                                            End If

                                        End If
                                    End If

                                End If
                            Next
                        End If
                    Next
                End If
            End While
            oRead.Close()
            intLineNo = 0

但是当我在 c#.net 中实现时它不能正常工作,我很困惑检查 c# 函数编码标准。

这里是c#.net的代码

While oRead.Peek <> -1
                strLineIn = oRead.ReadLine().Trim
                intLineNo = intLineNo + 1
                setProgressBar(intLineNo, intLinesCount)
                If strLineIn.StartsWith("/*") Then
                    bCommentLine = True
                ElseIf strLineIn.StartsWith("*/") Then
                    bCommentLine = False
                End If
                Dim arr As String() = Splitline(strLineIn)

                ' code adding
                If Not strLineIn.StartsWith("//") Then
                    If Not strLineIn.Trim.EndsWith(";") And _
                        Not strLineIn.Trim.StartsWith("{") And _
                        Not strLineIn.Trim.StartsWith("}") And _
                        Not strLineIn.StartsWith("//") And _
                        Not strLineIn.Trim.ToString = "" And _
                        Not find(strLineIn.Trim) Then
                        createErrorLog(strLineIn, fi.Name, intLineNo, "No Commnet Line", fi, strErroLogFile)
                    End If
                Else
                    'createErrorLog(processXMLComment(oRead), fi.Name, intLineNo, "No Commnet Line", fi)
                    strLineIn = processXMLComment(oRead, intLineNo)
                End If

                If Not (strLineIn.StartsWith("//") Or strLineIn.StartsWith("///")) And bCommentLine = False Then
                    For intVar As Integer = 0 To DataType.Count - 1
                        If strLineIn.Contains(DataType(intVar).InnerText) Then
                            arr = Splitline(strLineIn)
                            For inti As Integer = 0 To arr.Length - 1

                                If arr(inti) = DataType(intVar).InnerText Then

                                    If strLineIn.IndexOf(c) = strLineIn.IndexOf(arr(inti + 1)) + 1 And _
                                    strLineIn.Trim.IndexOf(";") = strLineIn.Length - 1 Then
                                        Dim intPosition As Integer = 1
                                        For Each c In strLineIn
                                            If Not arr(inti + intPosition).StartsWith(VarName(intVar).InnerText) Then
                                                createErrorLog(strLineIn, fi.Name, intLineNo, arr(inti + intPosition), fi, strErroLogFile)
                                            End If
                                            intPosition = intPosition + 1
                                            If arr(inti + intPosition) = "" Then
                                                Exit For
                                            End If
                                        Next
                                    Else

                                        If Not arr(inti + 1).StartsWith(VarName(intVar).InnerText) Then
                                            createErrorLog(strLineIn, fi.Name, intLineNo, arr(inti + 1), fi, strErroLogFile)
                                        End If
                                    End If

                                End If

                            Next
                        End If
                    Next
                End If

            End While
            oRead.Close()
            intLineNo = 0

请任何人帮我解决这个问题。

【问题讨论】:

  • “它不能正常工作”不是一个非常清晰的问题描述。什么不工作?你有例外吗(如果有,是什么以及在哪里)?
  • 您发布的所有代码都不是 C# 代码。这里有什么问题?
  • 请将答案标记为正确答案,对您有帮助。这将帮助其他有同样问题的人。谢谢

标签: vb.net


【解决方案1】:

使用现有的分析工具比使用自己的分析工具更好吗?这些工具应该会给你一些帮助:

【讨论】:

    【解决方案2】:

    100% 同意 TWith2Sugars,为什么要在一些成熟的工具用于分析 .NET 应用程序的情况下重新发明轮子。你也可以看看NDepend这个工具。

    【讨论】:

    • 在推荐您自己的软件时,建议您在帖子本身中声明您的隶属关系,而不是仅将其作为用户名的一部分,以避免将其标记为垃圾邮件。有关更多信息,请参阅这些帖子link1link2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2011-02-23
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多