今日讀書筆記(未整理):
1.控制IIS使用1.1還是2.0的工具名字叫做MMC Snapin一剛。同時可以選擇“編輯配置”,其實即使對Web.config的可視化設定。
2.aspnet_regiis命令重提,-i參數還是很重要的,再有就是對web.config和app.config敏感資訊進行加密。
3.aspnet_regsql將帳號註冊放入統一SQLServer中,參數配製用的時候再查。
4.ASP.NET 1.1和2.0比較:web.config中欄位的變化,同時讀取該值的方法也變了:
ASP.NET 1.1機制:兩種讀法 using System.Configuration;
//方法1
AppSettingsReader configurationAppSettings = new AppSettingsReader();
string connectionString = (string)(configurationAppSettings.GetValue("ConnectionString", typeof(string)));
//方法2
string connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
ASP.NET 2.0機制,廢棄了ConfigurationSettings: /**//*針對同一web.config,分別讀取appSettings或connectionStrings
<configuration>
<appSettings>
<add key="ConnectionString1" value="連接字串"/>
</appSettings>
<connectionStrings>
<add name="ConnectionString2" connectionString="連接字串2" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
*/
//方法1
string connectionString1 = ConfigurationManager.AppSettings["ConnectionString1"];
//方法2
string connectionString2 = ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString;
5.web.config的加解密機制,特別針對資料庫連接字串,同樣適用App.config:
假定項目名稱"MyConfiguration",則
加密:aspnet_regiis -pe "加密欄位" -app "/MyConfiguration" -prov "具體加密方式的Provider"
解密:aspnet_regiis -pd "加密欄位" -app "/MyConfiguration"
記住,程式員讀取欄位時不需要額外解密,系統在你讀取前會解密。
另一種加密機制是在程式裡使用API。
6.ASP.NET特殊檔案夾
App_Browsers
App_Code
App_Data
App_GlobalResources
App_Themes
這些檔案夾下的程式,只允許Application訪問,不支援Request(無法存取)。
每個檔案夾都回產生一個dll。
7.程式碼片段 Code Snippets
這是一個好東西,會使我變懶的,連for迴圈都不用自己敲了。
記住按鍵組合(Ctrl + K,Ctrl + B),可以Manage你的Code Snippets
8.Refactoring
這也是個BT的東西,雖然做的沒Resharper好。
選取一段代碼抽象為方法,但是只能將選中的進行轉換,如果旁邊有同樣的一段代碼,vs2005也會看不見而不會處理(我親自測的)
。
重新命名任何成員(欄位,參數,方法等等)。
將欄位封裝為屬性(屬性名稱字你自己取)。
移除參數,從方法、索引器或委託中移除參數,不會動方法中的同名參數,這樣肯動會有語法錯誤。
重新排列參數,也是局限於方法、索引器或委託中的參數。
提取介面,基於類中的非靜態方法,產生介面檔案。
將局部變數提升為參數,如,將游標移到變數i,操作該命令:
//處理前
public static void MethodB()
{
// Invoke on 'i'
int i = 0;
}
//處理後
public static void MethodB(int i)
{
// Invoke on 'i'
}
補註:查了查微軟的線上MSDN,他是這麼說的,結合,就明白了:
將局部變數提升為參數,提供一種簡單的方法,以在正確更新調用網站的同時將變數從局部使用移動至方法、索引器或建構函式參數。調用“將局部變數提升為參數”操作時,變數將被添加到成員參數列表的結尾處。對已修改成員的所有調用都將使用新參數(將替代最初賦給該變數的運算式)立即進行更新,並保留代碼,以使其像變數提升之前那樣正常工作。將常數值賦值給提升的變數時,此重構作業的效果最好。必須聲明並初始化該變數而不能僅聲明或僅賦值。
9.動態編譯dll組件
1.1隻止持aspx,ascx,web.config和global.asax的動態編譯,並不支援dll和WebServices,要手動編譯並重新添加dll引用——2.0現在支援了,但是在bin目錄下卻不產生自身項目的dll了。現在的原則是,只要使用者進行請求,系統會自動進行動態編譯。於是,對於正在使用的網站,增加一部分code並不需要編譯,當請求當這個改動或新功能時,再進行動態編譯,彈性就大了很多。也許你會說,第一次的速度會很慢,因為要編譯嘛,但僅僅時新的代碼塊或者改動部分,其他不動模組不許要編譯的,所以速度不受影響。
10.先行編譯
這就是編譯後有dll的版本,和1.1結構一樣了(雖然還差解決方案)
三種方式,同演的效果:
命令列方式 Aspnet_Compiler加參數
IDE中的“發布網站”選項
通過API編程實現,這是以上兩種方式的實際運作,代碼如下: using System.Web.UI.HtmlControls;
ClientBuildManager cbm = new ClientBuildManager("虛擬目錄名稱", "來源位置", "目標位置");
cbm.PrecompileApplication();
注意,先行編譯後產生的dll是不支援動態編譯的
11.同時使用C#和VB.NET在同一個項目中:
web.config配置如下:<configuration>
<system.web>
<compilation>
<codeSubDirectories>
<add directoryName="cs"/>
<add directoryName="vb"/>
</codeSubDirectories>
</compilation>
相應在App_Code下加入cs和vb兩個folder,分別存放cs和vb格式的檔案(不加是不行的,因為在web.config中已經配置了這兩個folder)
這樣,先行編譯後在bin目錄中,分別產生App_SubCode_cs.dll和App_SubCode_vb.dll兩個dll組件。
12.CodeBehind
舊的CodeBehind是這樣的(1.1版本):<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="~/Default.aspx.cs" Inherits="命名空間.類" %>
新的CodeBehind(2.0版本,又名CodeBeside):<%@ Page Language="C#" AutoEventWireup="true" CodeFile="~/Default.aspx.cs" Inherits="類" %>
比較可知,2.0版本不再需要命名空間,而CodeBehind關鍵字也改為CodeFile了。
13.VS2005 SP1
也就是升級包,支援產生proj檔案的,使vs2003時代的程式員可以有回到過去的風格,而不是操作檔案系統,同時namespace也回來了,這樣App_Code的特殊檔案夾就失去了意義,其下的cs檔案要重新放位置了,還有就是,在升級包下建立的aspx檔案,同時不但可以看到aspx.cs檔案,這個檔案負責記錄邏輯操作,還有一個aspx.design.cs檔案,只負責聲明那些控制項變數——二者是一個類拆成兩部分(partial類),前者給開發人員使用,後者自動產生,不建議改動。