裝好VS2015後,陸續將VS2013維護的專案改用VS2015開啟,原以為可完全無痛移轉,踩到小刺一根。
某個用VS2013開發多時的專案,移到VS2015出現編譯錯誤!以下面的程式為例:
Console.WriteLine那行發生Unrecoginzed escape sequence錯誤。
看到Unrecongized escape又看了看問題字串,程式老骨頭心中警鈴聲大作:
我被「許功蓋」偷襲了?
使用Notepad++開啟C#原始檔,果不其然,檔案編碼被設成BIG5(ANSI)。
依開發規範,程式檔都該存成UTF8編碼,避免中文難字或非中文的Unicode字元變成亂碼。出問題的.cs檔案有點歷史,漏了修改,但從VS2005時代至今多年,相安無事。由此推論,VS2013面對BIG5編碼原始碼檔案有較高的包容性,VS2015的處理邏輯改變(可能是編譯器改用Roslyn的緣故),遇到許功蓋等包含"\"字元的BIG5中文字,發生解析錯誤。而依文字出現位置的不同,產生的錯誤也可能不同,例如:若將以上程式改成Console.WriteLine("測試成功"),錯誤訊息則會變成:
1>e:\L1\Lab1\Program.cs(13,31,13,31): error CS1010: Newline in constant
1>e:\L1\Lab1\Program.cs(13,43,13,43): error CS1003: Syntax error, ',' expected
1>e:\L1\Lab1\Program.cs(14,27,14,28): error CS1026: ) expected
【結論】VS2015處理ANSI編碼程式檔邏輯與VS2013不同,若專案搬移至VS2015後出現Unrecoginzed escape sequence或字串結尾識別失敗等相關錯誤,請優先檢查是否程式檔被存成ANSI(BIG5)編碼,轉為UTF8即可排除。