版本發布
M1.使用WinRar創建安裝文件;
S1.選擇Debug/Release目錄下所有文件,添加到壓縮文件
S2.創建自解壓格式壓縮文件
S3.自解壓選項設置
調試部分
代碼調試手段
S1.控制台輸出Log工具;
Console.WriteLine("Console log...");
Debug.WriteLine("Debug log...");
Trace.WriteLine("Trace log...");
S2. Assert終止運行彈窗顯示錯誤信息方式;
Debug.Assert(a < 50, "params error", "error code XCODE0023516");
Trace.Assert(a > 50, "params error", "error code XCODE0023536");
S3. try{}catch(e){e.XXX;e.Message}精確捕獲異常位置;
C#/JAVA/JS捕獲異常類似;
S4.本地LOG記錄日志;
備注:
using System.Diagnostics; // Debug/Trace
VS開發環境斷點調試
S1.調試相關快捷鍵;
|
功能 |
快捷鍵 |
調試 |
單步 |
F11 |
運行調試 |
F5 |
|
運行 |
CTRL + F5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其他調試手段
S1.進程停止運行;
啟動任務管理器 => 進程 => 相應進程 => 創建轉存文件
生成.dump的轉存文件,可以用VisualStudio打開分析。
C#測試代碼筆記
CMD命令工具類

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace ConsoleApp.Utils { /// <summary> /// C#命令工具類,執行CMD命令 /// /// </summary> class CmdUtils { public static void TestCmdApi() { //ExecuteCMD(@"C:\Windows\System32\cmd.exe","ipconfig &exit"); //ExecuteCMD(@"C:\Windows\System32\calc.exe", ""); //ExecuteCMD("ipconfig &exit"); // 殺死進程 // http://www.cnblogs.com/klchang/p/6257434.html //ExecuteCMD("taskkill /im calc.exe -f &exit"); // 殺死指定名稱進程 //ExecuteCMD("taskkill /pid 16620 -f &exit"); // 殺死指定PID進程 // KillProcess("calc"); } // ----------------------------------CMD命令執行API // http://www.cnblogs.com/babycool/p/3570648.html // http://www.cnblogs.com/njl041x/p/3881550.html // http://www.cnblogs.com/vaevvaev/p/7115721.html /// <summary> /// 執行cmd命令 /// 多命令請使用批處理命令連接符: /// <![CDATA[ /// &:同時執行兩個命令 /// |:將上一個命令的輸出,作為下一個命令的輸入 /// &&:當&&前的命令成功時,才執行&&后的命令 /// ||:當||前的命令失敗時,才執行||后的命令]]> /// </summary> /// <param name="cmdExe">指定應用程序的完整路徑</param> /// <param name="cmdStr">執行命令行參數</param> public static bool ExecuteCMD(string cmdExe, string cmdStr) { bool result = false; try { using (Process myPro = new Process()) { //指定啟動進程是調用的應用程序和命令行參數 ProcessStartInfo psi = new ProcessStartInfo(cmdExe); psi.UseShellExecute = false; psi.RedirectStandardInput = true; psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.CreateNoWindow = true; // 不顯示程序窗口 myPro.StartInfo = psi; myPro.Start(); myPro.StandardInput.WriteLine(cmdStr); myPro.StandardInput.AutoFlush = true; //string res = myPro.StandardOutput.ReadToEnd(); //Console.WriteLine(res); //myPro.WaitForExit(); result = true; } } catch (Exception e) { Console.WriteLine(e.Message); } return result; } /// <summary> /// 運行cmd命令 /// 不顯示命令窗口 /// </summary> /// <param name="cmdStr">執行命令行參數</param> public static bool ExecuteCMD(string cmdStr) { bool result = false; try { using (Process myPro = new Process()) { myPro.StartInfo.FileName = "cmd.exe"; myPro.StartInfo.UseShellExecute = false; myPro.StartInfo.RedirectStandardInput = true; myPro.StartInfo.RedirectStandardOutput = true; myPro.StartInfo.RedirectStandardError = true; myPro.StartInfo.CreateNoWindow = true; myPro.Start(); myPro.StandardInput.WriteLine(cmdStr); myPro.StandardInput.AutoFlush = true; string res = myPro.StandardOutput.ReadToEnd(); Console.WriteLine(res); myPro.WaitForExit(); result = true; } } catch(Exception e) { Console.WriteLine(e.Message); } return result; } /// <summary> /// C#殺死指定名稱進程 失敗 /// </summary> /// <param name="proName"></param> public static void KillProcess1(string proName) { Process[] ps = System.Diagnostics.Process.GetProcessesByName(proName); foreach(Process p in ps) { p.Kill(); } } /// <summary> /// C#殺死指定名稱進程 /// http://blog.csdn.net/daliaojie/article/details/17244283 /// </summary> /// <param name="processName"></param> public static void KillProcess(string processName) { //獲得進程對象,以用來操作 System.Diagnostics.Process myproc = new System.Diagnostics.Process(); //得到所有打開的進程 try { //獲得需要殺死的進程名 foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcessesByName(processName)) { //立即殺死進程 thisproc.Kill(); } } catch (Exception Exc) { throw new Exception("", Exc); } } } }
JSON解析

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; namespace ConsoleApp.FrameLib { /// <summary> /// JSON數據解析測試 /// Newtonsoft.Json /// https://github.com/JamesNK/Newtonsoft.Json /// http://www.newtonsoft.com/json /// http://json.codeplex.com/ /// /// http://www.cnblogs.com/ambar/archive/2010/07/13/parse-json-via-csharp.html /// </summary> class FrameJson { private static void TestJsonParseApi() { // 對象轉成string測試 Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Sizes = new string[] { "Small" }; string resJson = JsonUtils.ObjectToJsonString(product); Console.WriteLine(resJson); // json string轉對象測試 Object obj = JsonConvert.DeserializeObject<Product>(resJson); Console.WriteLine(obj); } public static void DebugJsonApi() { TestJsonParseApi(); } } class JsonUtils { // 對象轉為JSON字符串 public static string ObjectToJsonString(Object obj) { string jsonStr = JsonConvert.SerializeObject(obj); return jsonStr; } // JSON字符串轉對象 public static Object ObjectToJsonString(String jsonStr) { Object obj = JsonConvert.DeserializeObject<Object>(jsonStr); return obj; } } class Product { public string Name{get;set;} public DateTime Expiry; public string[] Sizes; } }
WPF基礎
1.XAML命名空間

<Window x:Class="WpfApp.Library.Basic.Ba01XamlNamespace" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="Ba01XamlNamespace" Height="300" Width="300"> <!-- WPF命名空間 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" XAML命名空間 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 系統名稱空間 xmlns:sys="clr-namespace:System;assembly=mscorlib" --> <!-- 使用系統命名空間聲明一個數字字符串 --> <Window.Resources> <ResourceDictionary> <x:Array Type="sys:String" x:Key="localArray"> <sys:String>"AAA"</sys:String> <sys:String>"BBB"</sys:String> <sys:String>"CCC"</sys:String> </x:Array> </ResourceDictionary> </Window.Resources> <Grid> </Grid> </Window>