Visual Studio 2010及.Net 4新功能一覽
Visual Studio 2010正式版即將在本月12號(hào)發(fā)布,作為微軟全新一代.Net平臺(tái)產(chǎn)品,其特性和新功能引起了很多開發(fā)者的關(guān)注,文章將向您介紹關(guān)于Visual Studio 2010及.Net 4的新功能。
1、代碼片段(Code Snippets):
代碼段是預(yù)先開發(fā)的代碼模板,可以節(jié)省我們對(duì)有關(guān)語法思考的時(shí)間。在Visual Studio 2005和Visual Studio 2008中,已經(jīng)有建立了很多代碼段。不過,這些只適用于隱藏代碼(code behind)。在Visual Studio 2010中代碼片段支持JavaScript,HTML以及ASP.NET標(biāo)記。在下面畫面,展示了JavaScript和HTML片段的快捷菜單。
在JavaScript中:
在Html中:
2、New Profiles:
在以前的dotnet版本中,我們已經(jīng)看到過不同的開發(fā)環(huán)境的配置。如 VB, C#, Web development 和General Development。我們根據(jù)自己的需要選擇一個(gè)環(huán)境配置。這些選擇將在第一次安裝visual studio之后或者通過import export選項(xiàng)。這里介紹兩個(gè)Visual Studio 2010中配置環(huán)境,兩個(gè)都是進(jìn)行HTML開發(fā)的。他們是:
◆Web Development。
◆Web Development (Code Optimized)。
◆Web Development,配置隱藏了客戶對(duì)象和HTML Mode頂端的事件欄。
◆Code Optimized ,你將發(fā)現(xiàn)是沒有code, designer tabs的html 編輯器。
◆它提供了一個(gè)更大的空間去玩轉(zhuǎn)html。
在你安裝Visual Studio之后,第一次使用的時(shí)候,你能選擇一個(gè)配置。 你也能改變你的工作環(huán)境的配置通過: Tools > Import & Export Settings > Reset all settings option。 如果在IDE中沒有什么改變,你必須通過重新打開Visual Studio使它生效。
3、Generate From Usage:
在ASP.NET以前的版本,微軟推出了從現(xiàn)有的代碼中進(jìn)行代碼重構(gòu)來生成方法,在ASP.NET 4.0中, Generate From Usage 有了新概念,能基于現(xiàn)有的代碼來生成屬性,方法,類和的其它類型。
寫一些代碼,選中它,右擊最右側(cè)的字符,你將得到去提取屬性和方法的選項(xiàng)。此選項(xiàng)僅當(dāng)你沒有定義過這個(gè)標(biāo)識(shí)符才顯示。對(duì)于下面的例子智能感應(yīng)不會(huì)顯示選項(xiàng)來提取屬性,例如,如果您右鍵點(diǎn)擊變量i。
4、Multi-Targeting:
在Visual Studio 2008中就能創(chuàng)建一個(gè)2.0或者3.0版本創(chuàng)建項(xiàng)目,而不是用默認(rèn)的3.5去開發(fā)。也是是說,有一個(gè)選擇項(xiàng)去改變開發(fā)項(xiàng)目的framework版本。在Visual Studio 2010中亦有相同選項(xiàng)功能,并做出相應(yīng)的提高。在以前的版本中,如果你使用framework 2.0創(chuàng)建一個(gè)項(xiàng)目。智能感仍將能顯示3.5版本的類型和成員。如果你不能確定所選擇的framework內(nèi)的成員,所以你就會(huì)有更多的機(jī)會(huì)去出錯(cuò)。但是,在Visual Studio 2010的智能感知會(huì)只向您顯示你選擇的framework 版本。#p#
5、MultiMonitor:
Visual Studio 2010給我們提供能將IDE的窗體移動(dòng)visual studio IDE之外,將它放至在桌面上。它還支持多面去地去看不同的IDE窗體。如果我們關(guān)閉Visual Studio,并再次打開它,我們會(huì)發(fā)現(xiàn)所有的窗體在我們最后一次放置的地方。
6、Code Navigation:
新的導(dǎo)航使我們?cè)谖募懈焖阉餍g(shù)語。但它只能即在App_Code文件夾類文件,搜索您鍵入文本。它不適用于HTML或代碼隱藏文件。在下面的例子,它顯示出我的鍵入函數(shù)名稱,它導(dǎo)航到窗口,選擇窗體中的任何一個(gè),它將能定位到選擇的函數(shù)定義。
7、View Call Hierarchy:
這有助于查看函數(shù)和屬性的使用,例如,如果你在一個(gè)函數(shù)名右鍵,它會(huì)告訴你的函數(shù)使用分層列表。如果您單擊查看調(diào)用層次,它會(huì)顯示一個(gè)窗體,告訴你詳細(xì)的函數(shù)調(diào)用:在層次結(jié)構(gòu)中選擇窗口函數(shù)調(diào)用它會(huì)顯示的參數(shù)和函數(shù)調(diào)用的位置的詳細(xì)信息。
8、代碼高亮突出顯示:
選擇一個(gè)標(biāo)識(shí)符,IDE會(huì)為你突出的被使用的地方。例如我選擇變量i,在它不同的使用地方,突出的顯示。
9、智能提示的改進(jìn):
在Visual Studio 2008中,為一個(gè)對(duì)象選擇屬性時(shí),它將根據(jù)輸入的字母的順序排列,為你提供智能提示。在Visual Studio 2010中它將向你顯示基于組的屬性,例如,如果您的文本框?qū)ο蠛箧I入text, 它將向你顯示Text, TextChanged, TextMode。它也支持Pascal的智能提示。例如,你輸入TC,它將導(dǎo)航TextChanged成員。
在下面的圖片中可以看到4.0版本的ClientIDMode屬性:如果我們從項(xiàng)目屬性上改變framework版本。它不會(huì)顯示這個(gè)文本框的這個(gè)屬性。
10、EnablePersistedSelection:
當(dāng)我們選擇像datalist 或者gridview 控件中的一行時(shí),如果我們移動(dòng)到另一個(gè)網(wǎng)頁,在新的頁上,它選擇同編號(hào)行,雖然我們只在第一頁選擇了它。為了避免這個(gè),ASP.NET 4.0為這些控件推出了一種新的屬性,這是EnablePersistedSelection。如果設(shè)置為true,在其他網(wǎng)頁中,將不能選擇同一編號(hào)。例如,導(dǎo)航到原始網(wǎng)頁,第一頁將顯示選定的最初選定的行。
11、Web.Config Transformation
通常為我們的開發(fā)環(huán)境需要在web.config中設(shè)置一些值,然后在部署或測(cè)試的時(shí)候,我們手工地改變這些值。例如,如果我們?cè)赪eb.config文件中有連接字符串或其他任何鍵值組合,在項(xiàng)目發(fā)布或部署的時(shí)候,我們要去替換他們,這里我們將使用新的術(shù)語:Web.Config Transformation。這是一種自動(dòng)的方式來執(zhí)行此操作。Web.config 設(shè)置能被其他的配置文件覆蓋,如:web.release.config,web.debug.config 等等,在項(xiàng)目debug和release時(shí)候。
這些值不會(huì)覆蓋原web.config,但會(huì)在發(fā)布的web.config中。有了transformation的幫助,我們可以替換,移除,刪除一個(gè)節(jié)點(diǎn)和我們可以刪除或設(shè)置節(jié)點(diǎn)自身的屬性。例如:
1、創(chuàng)建一個(gè)配置文件,從configuration manager > New。
2、將其命名為 TransformWebConfig。從copy setting from 選項(xiàng)中選擇Release。這將會(huì)創(chuàng)建TransformWebConfig.config。
3、右擊web.config,選擇'Add config Transfroms ’選項(xiàng)。打開Web.config并添加一個(gè)測(cè)試鍵和值。
- <appSettings>
- <add key="KeyOne" value="A value"/>
- </appSettings>
4、打開TransformWebConfig.config,并添加下面一行。
- <appSettings>
- <add key="KeyOne" value="TestOnConfigurationConfig" xdt:Transform="Replace"
- xdt:Locator="Match(key)" />
- </appSettings>
5、右擊項(xiàng)目,選擇'Create Package’。 VS會(huì)從TransformWebConfig.config文件獲取值,它將改變我們發(fā)布的web.config文件中的值。在成功生成的OBJ文件夾中,檢查TransformWebConfig文件夾下的web.config,您會(huì)看到關(guān)鍵字KeyOne的值為TestOnConfigurationConfig。#p#
12、URL Routing:
現(xiàn)在,我們看到網(wǎng)站的URL是更具體的SEO。不顯示任何描述性信息,在ASP.NET 2.0的URL映射為我們提供了一個(gè)選項(xiàng),在一定程度上實(shí)現(xiàn)此功能。我們可以提供確切的網(wǎng)址導(dǎo)航和URL顯示給用戶。Url routing在ASP.NET 3.5中引入。開發(fā)者創(chuàng)建不同的route處理類取決于網(wǎng)站url routings的數(shù)量。由于有url routing選項(xiàng),回發(fā)的問題能被解決。
在ASP.NET 4.0中你不需要為每個(gè)單獨(dú)的處理程序類來定義routing。建立一個(gè)輔助函數(shù)MapPageRoute,幫助您實(shí)現(xiàn)更快速的routing。這些routes在Application_Start中注冊(cè)。對(duì)于這個(gè)在Global.asax SetRouting方法的示例中設(shè)置routing,第一個(gè)參數(shù)是routing的友好名稱,第二個(gè)參數(shù)是檢查URL進(jìn)行模式匹配,第三個(gè)是在aspx頁將這一功能為用戶實(shí)施。Global.asax中是:
- protected void Application_Start(object sender, EventArgs e)
- {
- SetRouting(System.Web.Routing.RouteTable.Routes);
- }
- private void SetRouting(System.Web.Routing.RouteCollection routeCollection)
- {
- routeCollection.MapPageRoute("RouteFriendlyName", "MyWebsite/RequestParameterName",
- "~/Book.aspx");
- // you can add other page routes with different names and combinations here
- }
現(xiàn)在Book.aspx將使用下面的代碼進(jìn)行進(jìn)一步處理。
- string Parameter = Page.RouteData.Values["RequestParameterName"].ToString();
- if (Parameter==”Chemistry”){....}
- else if (Parameter==”Physics”){....}
現(xiàn)在,如果條件滿足,如果我們將首先瀏覽到localhost / MyWebsite /Chemistry 。
13、Add Reference Dialog:
在Visual Studio以前的版本中,當(dāng)打開reference dialog box時(shí),這將需要一些時(shí)間來加載.NET程序集文件開始直到它加載從GAC中所有引用。在默認(rèn)情況下打開項(xiàng)目選項(xiàng)卡,在Visual Studio 2010上添加引用。如果你錯(cuò)誤地點(diǎn)擊.Net或COM選項(xiàng)卡,你還有一個(gè)是取消的所有程序集加載的選項(xiàng)。因此,Visual Studio IDE的并不像以前凍結(jié)。
14、Compressing Session Values:
ASP.NET session外的進(jìn)程的狀態(tài)值保存在數(shù)據(jù)庫或服務(wù)器上。這些都是以序列化格式保存。發(fā)送到服務(wù)器時(shí)候,更多更大的session將消耗更多的資源 ?,F(xiàn)在,這些可以被壓縮在一個(gè)新的構(gòu)建compressionEnabled屬性中。這種對(duì)sessionState元素屬性,可以在web.config這樣被聲明。
- <sessionState
- mode="SQLServer" stateConnectionString="connectionstring goes here"
- compressionEnabled="true"/>
此選項(xiàng)將用于session外的進(jìn)程。
15、Dynamic lookup:
有一個(gè)新的靜態(tài)類型:dynamic。我們可以使用它作為任何對(duì)象的類型。如果有任何關(guān)于它的用法,我們能在運(yùn)行時(shí),得到它的錯(cuò)誤。例如:
- dynamic integerValue = 1;
- dynamic stringValue = " a string";
- dynamic Result = integerValue + stringValue;
輸出這將是:字符串 1。但是如果你改變最后一行:
- dynamic Result = integerValue & stringValue;
你不會(huì)得到任何下面的編譯錯(cuò)誤,在運(yùn)行時(shí),你會(huì)得到下面的錯(cuò)誤。
- Operator '&' cannot be applied to operands of type 'int' and 'string'
16、Optional Parameters
在ASP.NET 4之前,為了實(shí)現(xiàn)可選的參數(shù),我們創(chuàng)建重載函數(shù)。但現(xiàn)在在C#中,可選參數(shù)沒有更多的限制。但是象VB的可選參數(shù)必須放置到最后。例如:
- public void FunctionOptionalParam(string Name, int Age, string Country = "")
我們可以不提要求的可選參數(shù)的值。
- FunctionOptionalParam("My Full Name",20);
#p#
17、Named Parameters:
命名的參數(shù)可以忽略的參數(shù)順序,在不同順序的使用帶名稱的參數(shù)。例如:
- public void FunctionNamedParam(int x, int y , int z)
在函數(shù)調(diào)用將是:
- FunctionNamedParam(x:1, z:3, y:2);
在函數(shù)聲明的順序之前,雖然我們?yōu)閰?shù)設(shè)置了Z的值,但這些仍然等同于x = 1,ý = 2,z=3。
18、Meta Tags:
HtmlMeta類可用于動(dòng)態(tài)添加HTML meta的標(biāo)簽和HTMLMeta的名稱,內(nèi)容屬性可以被用來在運(yùn)行時(shí)動(dòng)態(tài)添加任何繼標(biāo)記名稱和它的值。在ASP.NET 4.0 Page類中有兩個(gè)屬性MetaDescription和MetaKeywords。這些可以用來在運(yùn)行時(shí)在html中為description和keyword元素添加meta的值。這些可以在HTML中提及頁面屬性或以這種方式:
- Page.MetaDescription = "this is meta description";
- Page.MetaKeywords = "this is a meta keyword";
如果這樣我們看到這樣的HTML生成:
- <head>
- <meta name="description" content="this is meta description " />
- <meta name="keywords" content="this is a meta keyword" />
- </head>
19、Generating Client IDs:
web控件的客戶端ID是根據(jù)父控件ID動(dòng)態(tài)的產(chǎn)生。 所以,如果你在一個(gè)用戶控件中使用textbox,我們必須查看為它生產(chǎn)什么樣ID,才能在客戶端的腳本中直接使用。有時(shí)這些是動(dòng)態(tài)的改變用戶控件的名稱也更改它的子控件ID。在ASP.NET 4.0中,這個(gè)問題是可以由頁面的ClientIDMode屬性解決。它有如下可能的值:AutoID , Static, Predictable 和Inherit。
AutoID: 是webpage 的默認(rèn)值,功能和以前ASP.NET的版本一樣。
Static: 為控件設(shè)置一個(gè)靜態(tài)的ID,所以我們不需要當(dāng)心父控件的ID,我們也能使用javascript引用它。例如一個(gè)用戶控件里面的textbox ,它外面胡一個(gè)ClientIDMode設(shè)置為static。
- <asp:TextBox ID="textbox1" runat="server" clientIDMode="Static"></asp:TextBox>
- <uc1:WebUserControl ID="WebUserControl1" runat="server" />
這個(gè)用戶控件包含了textbox2:
- <asp:TextBox ID="TextBox2" ClientIDMode="Static" runat="server"></asp:TextBox>
這個(gè)代碼將產(chǎn)生下面的HTML:
- <input name="ctl00$MainContent$textbox1" type="text" id="textbox1" />
- <input name="ctl00$MainContent$WebUserControl1$TextBox2" type="text" id="TextBox2" />
如果我們移除ClientIDMode="static" ,輸出胡HTML將會(huì)是:
- <input name="ctl00$MainContent$textbox1" type="text" id="MainContent_textbox1" />
它將產(chǎn)生象以前ASP.NET版本的textbox的ID。
Predictable:如果gridview 或者listview控件中我們?cè)O(shè)置ClientIDMode的值為Predictable,它將會(huì)串連控件ID和Gridview的ID,column的值在ClientIDRowSuffiex屬性上提到:
- Gridview ID ="GridView1"
- ClientIDMode="Predictable"
- ClientIDRowSuffix="ItemID"
如果在gridview的模板列中的有一個(gè)ID為Label1的label控件 ,它被綁定在ItemID列上。它的ID將會(huì)是:ID= GridView1_Label1_200。如果我們用數(shù)據(jù)綁定控件之外使用web控件,設(shè)置ClientIDMode等于Predictable:
- <asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Predictable"></asp:TextBox>
- <asp:Panel ID="panel1" runat="server">
- <asp:TextBox ID="TextBox2" runat="server" ClientIDMode="Predictable"></asp:TextBox>
- </asp:Panel>
你可以看到webcontrols在一個(gè)面板輸出和另外一個(gè)再面板以外輸出。
- <input name="ctl00$MainContent$TextBox1" type="text" id="MainContent_TextBox1" />
- <div id="MainContent_panel1">
- <input name="ctl00$MainContent$TextBox1" type="text" id="MainContent_TextBox1" />
- </div>
它將產(chǎn)生所有web控件的ID,是panel的頁面的ID加上子控件的ID。Inherit: WEB控件默認(rèn)是繼承父容器的ID。 控件能覆蓋它父控件的屬性。所以我能為ClientModeID設(shè)置不同的值。
20、Permanent Redirect :
在有些情況下,如果當(dāng)前頁面已經(jīng)過時(shí),我們希望將用戶重定向到新開發(fā)的網(wǎng)頁。 我們可以使用Response.Redirect轉(zhuǎn)移頁到新的頁面。但是,在這種情況下,搜索引擎保存搜索索引的網(wǎng)頁的舊信息。 另外,如果用戶瀏覽到這個(gè)網(wǎng)頁,他將被重定向到這個(gè)網(wǎng)頁,然后用命令的response.redriect幫助新打開的一頁。
但在ASP.NET 4.0中一個(gè)新的命令Response.RedirectPermanent可用于更改服務(wù)器頁上的頭信息。因此,如果用戶去為他直接重定向到新的一頁,并為他節(jié)省了雙行頁面。在該網(wǎng)站和網(wǎng)頁更新的發(fā)現(xiàn)頭和更新其索引信息,展示最新的信息重新搜索索引同樣的搜索引擎。
21、New Browser Definitions:
在ASP.net 3.5近幾年,一些瀏覽器已經(jīng)更新,其中包括Google chrome和那些支持blackberry智能手機(jī)。 ASP.Net 4.0的HttpBrowserCapabilities類被更新符合支持新瀏覽器。
22、Package/Publish :
Package/Publish提供設(shè)置 publish和package命令。配置調(diào)試選項(xiàng),像以前的版本一樣,Publish提供設(shè)置編譯和生成的選項(xiàng)。如果托管服務(wù)器上沒有SQL Express或如果您不希望包含發(fā)布的文件,然后選擇從App_Data文件夾中排除的那些文件。如果您選擇選項(xiàng)創(chuàng)建一個(gè)的Web包像ZIP文件,它會(huì)創(chuàng)建一個(gè)部署的zip文件。否則,將是默認(rèn)解壓縮的文件夾。
默認(rèn)情況下,程序包在應(yīng)用程序的OBJ文件夾下創(chuàng)建。默認(rèn)它不會(huì)在解決方案瀏覽器中顯示,直到您選擇顯示所有文件選項(xiàng)。我們還可以設(shè)置服務(wù)器Web應(yīng)用程序名稱以及目標(biāo)服務(wù)器的物理路徑。
23、Deploy SQL :
部署SQL選項(xiàng),允許您設(shè)置將連接字符串作為部署的一部分。您可以使用不同的名稱和值手動(dòng)添加連接字符串,或按一下import按鈕從web.config導(dǎo)出。你可以僅僅選擇模式腳本或數(shù)據(jù)庫選項(xiàng)。在一個(gè)連接字符串顯示源設(shè)置,我們可以為設(shè)置目標(biāo)服務(wù)器的值。您還可以手動(dòng)添加數(shù)據(jù)庫腳本文件,通過點(diǎn)擊添加按鈕。您還可以更改SQL文件,以便在服務(wù)器上運(yùn)行。
【編輯推薦】