VS2010 調試警告 解決方法

突然心血來潮,把vs2010的代碼規則設置爲微軟所有規則,分析過後,獲益匪淺,特此記錄。下面前半部分是網上另外一位兄弟的成果,轉載過來的:

一、網頁方面警告:

1、象link meta br img這樣的空元素必須以“/>”結束,img要有alt屬性
如:<meta http-equiv="Content-Type" content="text/html; charset=gb2312
"/>
  <img src="/homeimg/a_05.gif" alt="1" width="9" height="9" 
/>
  2、height不是table的有效屬性
         解決方法:可以把height下放到td中。
  3、background 不是td的有效屬性
       如: <td width="75" 
background="/homeimg/hg_2.gif">高老莊</a></td>
  解決方法:<td style="width:75px; height:25px;
background:url(/homeimg/hg_1.gif)">
  參  考:background與background-image的區別和應用
      
http://www.qujingwang.com/Show.aspx?bookID=365
  4、警告內容:驗證 (XHTML 1.0 Transitional): 此名稱包含大寫字符,而名稱中不允許使用大寫字符。
  如:“<
IMG height=29 alt=電信用戶下載地址 ... ...”

  5、驗證(XHTML 1.0 Transitional): 不支持元素“marquee”、不支持的還有embed
  6、驗證 (XHTML 1.0 Transitional): 屬性值必須用引號括起來。
        如:height
="29"
  7、驗證 (XHTML 1.0 Transitional): 元素“script”缺少必需的屬性“type”。
  8、驗證 (XHTML 1.0 Transitional): 屬性“width”被視爲已過時。建議使用較新的構造。
  解決方法: 放到style裏面去,<div   
style   ="width:100px"   ></div>   
          過時的屬性列表:width,border,height,align,bgcolor,font,name
  9、align的屬性值不包括“absmiddle”
  10、驗證 (XHTML 1.0 Transitional): 元素“form”不能嵌套在元素“table”中、元素“tr”不能嵌套在元素“form”中。


二、程序方面警告:

1、關於字符串爲空或不爲空

  1) if(strTitle=="")
  2)if(strTitle==String.Empty)
        應改爲 if(String.IsNullOrEmpty(strTitle))
  3)if(strTitle!="")
  4)if(strTitle!=String.Empty)
        應改爲 if (!String.IsNullOrEmpty(txtSeach.Text))

  警告內容:CA1820 : Microsoft.Performance : 使用“String.IsNullOrEmpty”調用來替換 'Header.ImbtnSeach_Command(object, CommandEventArgs)' 中的 'string.operator !=(string, string)' 調用

2、字符串或整數在定義時,系統都會自動初始化,不需要賦值
  string strTitle=“”;
        int       iHIght=0;
        private SqlConnection con = null;
  以上三種初始化沒必要,請去掉。
  警告內容:將類型爲 'int' 的字段 'UserOperate.age' 初始化爲 0。由於此初始化過程將由運行時自動完成,因此請移除它。

3、關於DataTable 和DataSet 的定義
  警告內容:CA1306 : Microsoft.Globalization : 只要 創建了 DataTable 類型的實例,就必須設置這一 Locale 屬性。
  警告指向:
   a) DataTable table = new DataTable();
             table = userAccount.getUserMoneyList(strUserID);
   b)DataSet ds = new DataSet();
            ds = expertopic.FindTopicByUserID("ExperTopic", strUserID);
  解決方法: 
          a) table.Locale = CultureInfo.InvariantCulture;
   b) ds.Locale = CultureInfo.InvariantCulture;
             在該cs文件中添加引用using System.Globalization;
  相關內容: DataTable中不區分全角數字和半角數字的問題,在一個項目中突然客戶反映原來使用得好好的功能現在不能用了,問現象也說不出什麼。只是說提示數據重複了。到現場後發現原來DataTable中將全角數字和半角數字認爲是相同的。故本來不同的數據也認爲是相同的數據了。
       網上查資料得知,添加如下代碼可以解決:
       DataTable.Locale = CultureInfo.InvariantCulture;
       DataTable.CaseSensitive = true;
       參考:
http://msdn.microsoft.com/en-us/system.data.datatable.locale(zh-tw).aspx

4、IndexOf()和LastIndexOf()
  警告內容: CA1307 : Microsoft.Globalization : 調用不顯式提供 StringComparison 的 'string.IndexOf(string)'。應將其替換爲對 'string.IndexOf(string, StringComparison)' 的調用。

  解決方法:在indexof中加一參數:int pos = s.IndexOf("bb", StringComparison.OrdinalIgnoreCase); (該參數是要忽略大小寫的,參數意義看下文)
  參考內容:
http://www.qujingwang.com/Show.aspx?bookID=385

5、警告內容: CA1822 : Microsoft.Performance : 從未使用 'IdAuthenticate.CheckidCard(string)' 的“this”參數(Visual Basic 中爲“Me”)。根據需要,將成員標記爲 static (Visual Basic 中爲“Shared”),或者在方法體或至少一個屬性訪問器中使用“this”/“Me”。
  解決方法:在方法定義前加 static 

6、警告內容: 聲明瞭變量“exp”,但從未使用過
                 變量“sql”已賦值,但其值從未使用過 

7、Page.RegisterStartupScript("openwin ", "<script>alter('請輸入要搜索的內容!')</script>"); 
  警告內容: “System.Web.UI.Page.RegisterStartupScript(string, string)”已過時:“The recommended alternative is ClientScript.RegisterStartupScript(Type type, string key, string script). 
http://go.microsoft.com/fwlink/?linkid=14202

8、Convert轉換警告
  警告內容:CA1305 : Microsoft.Globalization : 由於 'Convert.ToInt32(string)' 的行爲可能因當前用戶的區域設置不同而不同,請將 'DataOperate.DllBind(參數s)' 中的此調用替換爲對'Convert.ToInt32(string, IFormatProvider)' 的調用。如果要向用戶顯示 'Convert.ToInt32(string, IFormatProvider)' 的結果,請將“CultureInfo.CurrentCulture”指定爲“IFormatProvider”參數;另外,如果軟件將存儲和訪問此結果(例如,要將它保留到磁盤或數據庫中),則指定“CultureInfo.InvariantCulture”。

 labTPage.Text = Convert.ToString(ps.PageCount);
 private DateTime leavetime = Convert.ToDateTime(DateTime.Now.ToShortDateString());
 int bookID = Convert.ToInt32(Request.QueryString.Get("bookID"));
 iFileSize =(float) Convert.ToDouble(lblFileSize.Text);
  以上四例會出同樣的問題
       解決方法是:在ToDouble、ToString的參數中增加參數CultureInfo.InvariantCulture,如上例可改爲iFileSize =(float) Convert.ToDouble(lblFileSize.Text,CultureInfo.InvariantCulture);
       需引用 using System.Globalization;

  int.ToString();可改爲int.ToString(CultureInfo.InvariantCulture);
  String.ToLower();可改爲String.ToLower(CultureInfo.InvariantCulture);
  int.Parse(Wi[i]) 可改爲 int.Parse(Wi[i],CultureInfo.InvariantCulture) ;
但並不是所有的ToString和ToLower改了以後都正確,看調試提示吧。

三、名稱命名規範警告:

1、     int       intHight;
  警告內容:不好的變量定義 ,變量名字中不要包含int。

2、當變量定義中包含ID,OK時,D要小寫,K要小寫,即寫成Id,Ok
  如 string UserId

3、定義方法(函數)時,首字母要大些,    如:
a) protected void 
BtnFind_Click(object sender, EventArgs e){   ... ...   }
b) protected void 
GVsearch_RowDataBound(object sender, GridViewRowEventArgs e){}
   c)protected void 
GvlWordInfo_PageIndexChanging(object sender, GridViewPageEventArgs 
  注:首字母大寫,後邊第一個是小寫,第二個是大寫不行的。如:protected void
GvLWordInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)

4、警告內容: Microsoft.Naming : 從命名空間名稱“NetShop.App_Code”中移除下劃線。 命名空間或類名稱中不允許下劃線。

5、CA1709 : Microsoft.Naming : 更正命名空間名稱“NetShop.usrgl_files”中“files”的大小寫,將其改爲“Files”。 
  說明:在此usrgl_files是個文件夾。這個命名有兩個問題,使用了下劃線和首字母沒大寫。

6、命名中不要出現login、logout,要 用 logOn和logOff替代。

7、方法(函數)的參數定義要用小寫。

8、錯誤所指:
BooksDetails booksDetails = new BooksDetails();
  警告內容:CA1500 : Microsoft.Maintainability : 'booksDetails' ('SubmitExperPassed.BindInfo()' 中聲明的變量與該類型的某一實例字段同名。請更改其中一項的名稱。
  修改方法:實例名稱和類或命名空間同名,方法中定義的變量與方法同名,修改之。

9、定義方法的參數名稱不能和類的全局變量同名。

四、未解決問題:

1、警告內容:CA1020 : Microsoft.Design : 考慮將“NumberTwoNetShop.WebService”中定義的類型與另一個命名空間合併。 

2、警告內容:CA2210 : Microsoft.Design : 用強名稱密鑰對 'NumberTwoNetShop.dll' 進行簽名。

3、警告內容:CA1014 : Microsoft.Design : 使用 CLSCompliant(true)來標記 'NetShop.dll',因爲它公開外部可見的類型。  

4、警告內容:CA1001 : Microsoft.Design : 在 'DataBase' 上實現 IDisposable,因爲它創建下列 IDisposable 類型的成員: 'SqlConnection'。如果以前提供過 'DataBase',對於現有使用者來說,向此類型添加用於實現 IDisposable 的新成員屬於重大更改。 
  警告所指:   public class DataBase{}

5、警告內容:CA1822 : Microsoft.Performance : 從未使用 'DataBase.MakeInParam(string, SqlDbType, int, object)' 的“this”參數(Visual Basic 中爲“Me”)。根據需要,將成員標記爲 static (Visual Basic 中爲“Shared”),或者在方法體或至少一個屬性訪問器中使用“this”/“Me”。
       在本類中調用方法,在方法名稱前加上static即可,但若在別的類中定義實例再調用,加上static就會出錯。

6、警告內容:CA1502 : Microsoft.Maintainability : 'BookDetails.BindData()' 的圈複雜度爲 31。重寫或重構該方法,以便將複雜度降低到 25。
  警告原因:我的方法行數太多,邏輯是複雜點,變成小函數就應該OK了。

7、警告內容:CA1031 : Microsoft.Design : 修改以下內容 以便捕捉比 'object' 更具體的異常,或者再次引發該異常。
  警告所指:
            try
            {
                bookID = .....;
            }
            catch
            {
                bookID = 0;
            };
            catch 後邊的參數沒用,我就不想要。

8、警告內容:CA1031 : Microsoft.Design : 修改 'IdAuthenticate.BtnUpload_Click(object, EventArgs)' 以便捕捉比 'Exception' 更具體的異常,或者再次引發該異常。
  警告所指:try
                        {
                            System.IO.Directory.CreateDirectory(path);
                        }
                        catch (Exception ex)
                        {
                            Response.Write("<script language=javascript>alert('文件上傳失敗原因:"+ex.Message+"!')</script>");
                            return;
                        }

9、警告內容:CA1304 : Microsoft.Globalization : 由於 'string.ToLower()' 的行爲可能因當前用戶的區域設置不同而不同,請將 'Remark.TakeRemark(string)' 中的此調用替換爲對 'string.ToLower(CultureInfo)' 的調用。如果要向用戶顯示 'string.ToLower(CultureInfo)' 的結果,請將“CultureInfo.CurrentCulture”指定爲“CultureInfo”參數;如果軟件將存儲和訪問此結果(例如,要將它保留到磁盤或數據庫中),則指定“CultureInfo.InvariantCulture”。 
          我改成string.ToLower(CultureInfo.InvariantCulture)後,又報警告:
           Microsoft.Globalization : 在方法 'IdAuthenticate.BtnUpload_Click(object, EventArgs)' 中,將對 'string.ToLower(CultureInfo)' 的調用替換爲 String.ToUpperInvariant()。

10、警告內容:CA1819 : Microsoft.Performance : 將 'GetValidateCode.Colors' 更改爲返回集合或將其轉換爲方法。 
  警告所指: 
      public Color[] Colors
        {
            get { return colors; }
            set { colors = value; }
        }

11、警告內容:CA2234 : Microsoft.Usage : 修改 'BookDetails.BindData()' 以調用 'WebRequest.Create(Uri)' 而不調用 'WebRequest.Create(string)'。
  警告所指:myReq = (HttpWebRequest)WebRequest.Create(url);        
                             url我定義成了string類型

12、警告內容:CA0060 : 無法找到間接引用的程序集“System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”。此程序集不是分析所必需的,但是分析結果可能不完整。此程序集已由 'AjaxControlToolkit.dll' 引用。 

  以上警告還沒解決,望高人通過評論指點。其他警告和解決方法望達人補充!

補充:警告 8 CA1824 : Microsoft.Performance : 由於程序集 'ComTopGisEx.exe' 包含基於 ResX 的資源文件,因此請使用 NeutralResourcesLanguage 特性來標記它,並指定該程序集內的資源所採用的語言。這會改進首次檢索資源時的查找性能。

[assembly: NeutralResourcesLanguage("zh-CN", UltimateResourceFallbackLocation.Satellite)]

警告 8 CA2210 : Microsoft.Design : 用強名稱密鑰對 'ComTopGisEx.exe' 進行簽名。

解決方法 屬性 程序集 簽名 爲程序集簽名

警告 8 CA1014 : Microsoft.Design : 使用 CLSCompliant(true)來標記 'ComTopGisEx.exe',因爲它公開外部可見的類型。 ComTopGisEx

[assembly: CLSCompliant(true)]  AssemblyInfo.cs

警告 35 CA1306 : Microsoft.Globalization : 只要 'DataTableTemplete.GetEquipmentTypesDTTemplate()' 創建了 DataTable 類型的實例,就必須設置這一 Locale 屬性。 E:/Document/Visual Studio 2005/Projects/ComTopGisExWPF/ComTopGisEx/Common/DataTableTemplete.cs 43

dtResult.Locale = CultureInfo.InvariantCulture;

警告 10 CA1305 : Microsoft.Globalization : 由於 'string.Format(string, object, object, object)' 的行爲可能會因當前用戶的區域設置不同而不同,請將 'OracleUtil.OracleUtil(string, string, string)' 中的此調用替換爲對 'string.Format(IFormatProvider, string, params object[])' 的調用。如果要向用戶顯示 'string.Format(IFormatProvider, string, params object[])' 的結果,請指定 'CultureInfo.CurrentCulture' 作爲“IFormatProvider”參數。或者,如果軟件將存儲和訪問此結果(例如,當將此結果保留到磁盤或數據庫中時),則指定 'CultureInfo.InvariantCulture'。 E:/Document/Visual Studio 2005/Projects/ComTopGisExWPF/ComTopGisEx/Common/OracleUtil.cs 63          試用string.format(CultureInfo("zh-cn"),...)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章