2011-02-28 59 views
4

m在工作时做一个工具来检查编码标准意味着即时通知运行中的standered以检查该im是否创建了一个XML文件用于存储和检查整个项目中的XML文件。 我有其他功能在开始功能之前给予评论。用于c#和VB.NET的代码分析器

代码在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 

但当读音字implemnting在C#.net它不是做工精细,单读音混淆,检查C#功能编码standerd。

这里是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 

任何一个请帮我出这一点。

+0

“它不能正常工作”不是一个非常明确的问题描述。什么不起作用?你会得到例外(如果是这样,什么和在哪里)? – 2011-02-28 09:15:20

+0

您发布的代码都不在C#中。这里有什么问题? – 2011-02-28 09:20:01

+1

请将答案标为正确答案,即对您有帮助的答案。这将有助于其他谁会有相同的问题。谢谢 – 2011-02-28 09:29:35

回答

7

使用现有的分析工具而不是自行更新会更好吗?这些工具应该给你一些帮助:

0

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

+1

建议您使用自己的软件时,建议您将自己的关系作为帖子本身的一部分,而不是将其作为用户名的一部分,以避免它被标记为垃圾邮件。查看这些帖子获取更多信息[link1](http://meta.stackexchange.com/questions/15787/how-do-i-mention-my-own-products-in-answers)[link2](http:// meta.stackexchange.com/questions/55914/is-it-ok-to-push-your-own-product-on-so) – 2011-03-04 08:18:00