2012年1月28日 星期六

C# FAQ


C# FAQ
1.      什麼是方案?
方案就是指專案的集合,一個方案下會有多個專案,附檔名為.sln的檔案即為方案檔,C#的專案當附檔名為.csproj
2.      VSS可否只加入專案,不加方案?
答案是可以。
3.      在己加入VSS的方案中,再加入一個專案,是否需要手動將該專案加入VSS?
答案是不需要,因為VisualStudio2008會自動將該專案加入VSS中。
4.      c#中的app.config,exe.config,Settings.settings三個檔他們之間有什麼聯繫,各自的作用是什麼?
前兩個是應用程式配置檔,app.config在程式生成後變為與程式exe檔同名的.config文件,即在.exe後面加上.config,如:mytest.exe.cofig。就是說app.configexe.config內容相同,是程式配置檔在設計時和運行時的不同表現形式而已。
Settings.settings
是用於保存應用程式設置的檔,可以讀取或寫入不同變數,檔或一般會自動保存在document and setttings、用戶名、application data 下面的目錄
è所以app.configSettings.settings需要加入VSS,exe.config不需要
5.      c# bin\debug資料夾下的.pdb檔用途為何?
.pdb
調試資訊檔,用於調試器出錯的代碼在原始檔案的哪一行,那一行是什麼內容。所以在打包的時候也可以拋棄它。
è不需要加入VSS
6.      c# bin\debug資料夾下的 .vshost.exe是做什麼用的?
宿主程序,發佈時可以刪除!
去掉這個程式的方法是:
工程-》屬性-》調試-Visual Studio Host Process
Project->Property->Debug->Visual Studio Host Process
(
專案--》屬性--》調試--》右邊最後一個核取方塊)
去掉前面的勾。
è不需要加入VSS
7.      c# bin\debug\.vshost.exe.config.vshost.exe.manifest是做什麼用的?
我猜應該是跟.vshost.exe有相關的檔案,即然.vshost.exe不需要被加入VSS,我想這兩個檔案應該也不需要,.vshost.exe的用途及含意,需要再查查清楚!
è不需要加入VSS
8.      C# bin\debug\.suo檔是做什麼用的?
c#中的suo檔每次在編譯的時候都會出現,刪除沒有任何影響, *.suo 解決方案用戶選項 記錄所有將與解決方案建立關聯的選項,以便在每次打開時,它都包含您所做的自定義設置。比如你的VS佈局,你的專案最後編譯的而又沒有關掉的檔(下次打開時用)
è不需要加入VSS
9.      為何將簡體PC開發的專案加入繁體PC建立的VSS_DB ,Visual Studio會提示可能因為語系不同的關係造成VSS_DB無法正常運作?
10.  為何一般的Word檔案無法保存歷史版本?
11.  C# 編譯的執行檔如何記錄版本編號?
版本編號格式:主版本號. 次版本. 內部版本. 內部修訂號
C#的每一個工程都有一個AssemblyInfo.cs檔,裏邊包含對版本號的控制,主要是 [assembly: AssemblyVersion( "1.0.* ")]這一行,你可以按需求修改,默認情況下內部版本. 內部修訂號是自動產生的,內部修訂版本號的位置出現的是200011到編譯日期的天數,內部修訂號是當天從0點到當前時間的刻度數,所以『內部版本號+內部修訂號』一定會唯一(即每一次編譯一定會對應不同的『內部版本號+內部修訂號』)
12.  如何確認EXE檔中的SourceCode內容?
前提1:存放VSS的電腦系統時間必須準確!(VSS電腦系統時間必須與編譯電腦的系統時間一致)
==>
以免記錄了錯誤的時間,造成版本追溯錯誤!
前提2:編譯前必須全部簽入!
==>
以免在VSS中找不到對應的程式碼!
前提3:編譯前必須取得最新版本!
==>
以免編譯的版本是舊的程式內容,造成追溯錯誤!
前提4: 內部版本號及內部修訂號必須由C# 編譯器自動生成(版本編號是使用系統時間自動生成的,每次做編譯一定會不同,即每次的編譯對應的內部版號一定唯一)
==>
以免手動填寫版本編號的機制下忘記修改版本編號或寫錯版本編號。
前提5:EXE檔在建立後檔案內容不可以被修改(中毒或是被Hacker修改了檔案內容,其『修改時間』會變化,即會造成編譯時間不等於『修改時間』的狀況,但如果被修改了,還可以從自動建立的內部版本編號知道編譯的時間點)
==>
以免造成編譯時間的誤判!
在符合以上5個前提的狀況下,由編譯的時間點即可找出該EXE檔對應的程式碼(即在編譯時間前的最後一個版本,即是EXE中的程式碼)
13.  如何判定某個EXE檔被編譯的時間點?
方法1:從自動生產的內部版本編號,可以換算出編譯的時間點。
方法2:Windows系統中『修改時間』即代表第一次建立或是最後一次內容內變動的時間點,修改檔名及搬移檔案並不會造成『修改時間』的變化!由於基本上EXE檔的內容除了使用編譯之外,應該不會被修改,除非是非正常方式進行修改內容(比如中毒!),這就不列在討論範圍中,正常狀況下,應該是不會發生,所以結論是:在正常的狀況下,編譯的時間點就是檔案資訊中『修改時間』記錄的時間,在編譯前取得最新程式碼的前提之下,就可以得知某執行檔的程式碼內容(VSS中,在『修改時間』之前的最後一個版本,即是該檔案的程式碼)