突然心血來潮,把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 voidGvLWordInfo_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"),...)