技巧和诀窍;在VS 2005里优化ASP.NET 2.0Web项目的Build性能

【原文地址】Tip/Trick: Optimizing ASP.NET 2.0 Web Project Build Performance with VS 2005
【原文发表日期】Friday, September 22, 2006 11:47 AM

这个帖子讨论在Visual Studio 2005中开发web项目时,如何优化其Build性能。如果你正受缓慢Build的煎熬,或者想知道怎么提高Build速度,请继续读下去。

VS 2005 网站项目和VS 2005 Web应用项目简介

 VS 2005 支持两种项目模型:VS 2005 网站项目(Web Site Projects)VS 2005 Web应用项目(Web Application Projects)

VS 2005 网站项目是VS 2005刚发行时内置的项目模型,它提供了一个基于无项目 (project-less)的模型来开发web应用,该模型使用了ASP.NET 2.0在运行时使用的同个动态编译系统。而VS 2005 Web应用项目则是今春早些时候发布的一个完全支持的可下载项目模型,它提供了一个使用了基于MSBuild的build系统的项目模型,可以把一个项目中的所有编码编译成单个程序集 (与VS 2003类似,但又少了VS 2003 web项目中涉及FrontPage服务器扩展,IIS依赖性,以及其他问题的种种限制)。想进一步了解VS 2005 Web应用项目的话,请参考我发表在 http://webproject.scottgu.com网站上的系列教程。注意,对VS 2005 Web应用项目的支持将包含在VS 2005 SP1中,这样以后就不用另外下载了。

VS 2005网站项目和VS 2005 Web应用项目两个模型在将来的Visual Studio版本中将会继续被完全支持。我们发现,有些人喜欢一个模型,憎恶另外一个模型,反之亦然。从特性(feature)的角度看,没有“最佳的模型选择”这一说,完全取决于你个人的爱好和你们的团队协作机制(team dynamics)来决定哪个模型最适于你。譬如,许多的企业开发人员喜欢VS 2005 Web应用项目模型,因为它提供了更多的build控制和团队集成支持,而许多的web开发人员则喜欢VS 2005网站项目模型,因为它的“即存即行(just hit save)”的动态模型和灵活性。

有2篇文章,你也许会发现在决定采用哪个模型时有用,这篇MSDN上的白皮书内含对这两个模型的比较, 而Rick Strahl的《Web应用项目和Web 部署项目发布了》一文对不同选项的利弊做了一个很好的讨论。

想从VS 2005 网站项目模型迁移到VS 2005 Web应用项目模型的话,请按这个C#VB版的教程里示范的步骤做。

那么哪个项目模型Build起来快些呢?

在对项目做full build时,VS 2005 Web 应用项目模型编译起项目来会比VS 2005 网站项目模型快很多。full build是指对项目里的每一个类和网页要做编译或重新编译的情形,要么因为你在build菜单里选了Rebuild,要么因为你修改了一个依赖的类库项目或者/app_code子目录里的编码,然后点击了build或按了ctrl-shift-b来编译解决方案。

在这些“全部重新编译(full rebuild)”的情形下,VS 2005 Web 应用项目编译比VS 2005 网站项目快很多有几个原因。主要原因是,跟在VS 2003中一样,VS 2005 Web 应用项目只编译你的页面的后台编码(code-behind)以及你项目中的其他类文件。它既不分析也不编译你的.aspx 页面内的内容/控件/行内(inline)编码,这意味着,它不需要parse那些文件。坏处是,这也意味着,在编译过程中,它不会检查那些文件是否有错(而VS 2005 网站项目则会识别其中的任何错误)。好处是,这使得编译极其快。

那么,这是否意味着你总是应该在大型项目的情形下使用VS 2005 Web 应用项目模型来得到最快的build 时间呢?不,不一定。VS 2005 网站项目的一个很好的特性是对“按需编译(on demand compilation)”的支持。这在你对所依赖的文件做了变化(dependent changes)后,让你避免常规地重新编译整个项目,而是只需要对那些你正在编辑的页面做重新编译,而且这个编译是按需进行的。这会给你的解决方案带来build性能上的极大改进,而且也会在开发非常大的项目时给予你非常好的工作流程。如果你想要在保持网站模型灵活性的同时改进build性能,我强烈推荐使用这个模型。

下面几节提供了针对VS 2005 网站项目模型和VS 2005 Web 应用项目模型优化技术方面的特定教程,包括我上面描述的“按需编译(on demand compilation)” build 选项。

优化VS 2005 网站项目Build时间的特定技巧和诀窍

在使用VS 2005 网站项目模型时,按下述步骤做的话,你就可以极大地改进build性能:

1) 确认你没有遭受我称之为“程序集引用冲突(Dueling Assembly References)”的问题。我在这个博客帖子里描述了如何发觉和解决这个问题。如果你曾经在build时看到编译过程好像在“正验证网站(Validating Web Site)”这个编译阶段停顿了(意即,输出窗口里超过几秒钟都没有输出)的话,你非常可能是遇上这个问题了。使用上述这个博客帖子里概述的技术来解决这个问题。

2) 把在/app_code子目录里的文件的数目保持在很小的范围。如果你最后在这个目录里有一大堆类文件的话,我建议在你的VS解决方案里另建一个类库项目,把这些类移到这个类库项目里去,因为类库项目比/app_code子目录里的类编译快多了。如果在/app_code目录里只有小数量的文件的话,这通常不是个问题,但你有很多目录或数十个文件,那么把这些文件移到一个单独的类库项目里,然后在你的网站项目里引用这个类库项目,你将能改进build速度。另一个需要知道的事情是,每次你在VS HTML设计器里从源码视图转换到设计视图时,设计器会在设计表面加载之前引起/app_code目录的编译。原因是,这样你就可以在设计器里使用在/app_code目录里定义的控件。如果你没有/app_code目录,或者里面没几个文件,那么页面设计器加载起来就会极快,因为它不需要先做很大的编译工作。

3) 在你的网站项目中激活“按需编译(on-demand compilation)”。右击你的网站项目,打开项目属性页。在左边点击Build区,打开项目的build设置。在设置里把“F5启动操作(F5 Start Action)”从“Build Web Site(网站)”改成“Build Page(页面)”或“No Build (不Build)”选项。然后,确认清除了“把网站当作解决方案一部分来Build (Build Web site as part of solution)”复选框:

在你点击ok接受设置改动后,你将处于“按需编译”模式下。这意味着,在上面的对话框你选了“Build Page(页面)”的话,你编辑了一个页面,按F5(以调试模式运行)或Ctrl-F5(以非调试模式运行)时,解决方案将跟以前一样,编译所有的类库项目,然后编译 /app_code 目录以及Global.asax文件,然后,不再对网站里所有的页面做重新核实,而是只核实你手头的网页,以及这个页面引用的任何用户控件。在含有大量网页的大型甚至中型项目中,这很明显会带来极大的性能改观。注意,ASP.NET 会自动重新编译你在运行时访问的任何其他页面或控件,这样,你运行的应用程序用的总是最新的编码,而不必担心老的编码在运行。你也可以选“No Build”,省略IDE里page级的验证,很明显会进一步提高整个过程的build速度。我建议你对这两个选项都尝试一下,看你喜欢哪个。

不选“把网站当作解决方案一部分来Build (Build Web site as part of solution)”复选框,你会发现Ctrl-Shift-B键(触发build解决方案)会继续编译所有的类库项目,但不会重新build你网站项目里的所有页面。在此场景下,你依然会得到完整的intellisense支持,这样你不会失去任何设计时的支持。在打开页面时你也会继续得到警告/出错的弯曲的下划线提示(warning/error squiggles)。如果你需要对没有打开的页面,或对所有的页面强迫做重新编译的话,你可以使用Visual Studio的Build菜单里的Build Page或Build Web Site菜单选项:

这让你来控制你要核实你网站上的哪些页面以及什么时候核实,可以极大地改进build性能。我推荐做的一个诀窍是,在你的环境里添加一个快捷键,允许你很快地触发Build Page操作,以避免使用鼠标和菜单。你可以这么做,选择工具->定制菜单选项,然后在定制对话框的左下方点击“键盘”按钮。这会打开一个对话框,让你选择VS Build.BuildPage命令,然后与你想要的任何键组合相关联:

设置完毕后,在任何页面上,你可以打入Ctrl-Shift-P (或者你设置的任何键),会引起VS编译任何改动过的类库项目(效果跟Ctrl-Shift-B一样),然后核实/app_code目录里的所有类,然后重新build当前项目里你手头正编辑的页面或用户控件(以及被引用的母板页或所使用的用户控件)。

应用上述步骤之后,你应该发现你的build性能和灵活性大为提高,而且你对build什么时候发生有完全的控制。

优化VS 2005 Web应用项目Build时间的特定技巧和诀窍

如果你使用VS 2005 Web 应用项目模型的话,下面是几个你可以考虑的优化手段:

1) 如果你有一个很大的项目,或者与很多其他开发人员在一同开发一个项目,那么你也许要考虑把这个项目分成多个子web项目。我不见得会为性能的原因推荐这么做(除非你有成千上万个页面,否则效果不大),但它有时会有助于管理一个大项目。请阅读我以前写的这个关于怎么建立子web项目的帖子来了解怎么使用这个手段。

2) 考虑给你的解决方案添加一个VS 2005 Web部署项目来作深层的校验(verification)。在上面我提到,使用VS 2005 Web 应用项目的一个弊处是,它只编译你的页面的后台(code-behind)源码,并不对实际的.aspx标识符做进一步的校验,所以它会错过你在.aspx 页面里写错了tag的那些情形。这提供了与VS 2003 同等级别的校验支持(这样你也没有损失什么),但没有网站项目模型那么深入。有一个方法,你仍旧可以在VS 2005 Web 应用项目模型里得到网站项目模型那个级别的校验,就是添加一个VS 2005 Web部署项目到你的解决方案里(Web部署项目既可以和网站项目模型,也可以和web应用项目模型合作使用)。你可以配置它只在build你解决方案的release和staging版本时才运行,以避免在开发时build受影响,然后在发布你的应用前,用它来同时提供对你的内容和源码的深层的校验。

优化任何VS 2005项目Build时间的常用技巧和诀窍

在编译项目/解决方案时有性能问题时,我建议检查的几样东西:(注:当我听说新的技巧时,我会不断地添加到这个列单上,所以,以后请不时回来查看一下新内容):

1) 提防Virus Checkers,Spy-Bots和Search/Indexing工具

VS频繁访问文件系统,很明显地,每次它编译时,都需要重新parse一个项目里变动过的任何文件。有一个问题,我见到不少人报告过的,是在病毒扫描程序,spy-bot 检测程序,或者桌面 search indexing工具过分密切监测一个内含项目的目录的情形下造成的,因为它们不断地变更这些文件的时间戳(timestamp)。它们并不改变文件的内容,但它们确是改变最后访问的时间戳,而VS也使用这个时间戳。这就会造成一个模式:你对某个文件做了一个变动,重新build,然后在后台(background),这些病毒/搜寻工具进去,重新搜寻/检查这个文件,然后把这个文件标记为改动过了,从而导致 VS重新把它编译一遍。如果你看到build性能问题,检查一下是不是这个问题,以及考虑禁止别的程序扫描你在工作的目录。我也见过报告说,某些Spybot工具会导致VS 调试时极其缓慢,所以你也许也应该确认一下你的问题是否跟那些工具有关。

2) 关闭Windows Forms 设计器选项中的AutoToolboxPopulate

VS 2005里有个会导致VS自动把作为你解决方案一部分一起编译的任何控件加载到工具箱的选项。这是个在开发控件时非常有用的特性,因为当你编译时,VS会自动更新它们。但我看到几个报告,报告人说这个选项在某些情形下会导致VS编译时花非常长的时间(几乎象死机一样)。注意,这同时适用于Windows Forms和 Web 项目。想禁止这个选项的话,选择工具->选项菜单,然后勾销Windows Forms Designer/General/AutoToolboxPopulate复选框。(见相关议题:http://forums.asp.net/1108115/ShowPost.aspx)

3) 检查哪些第三方工具包正在Visual Studio中运行

有很多很棒的第三方VS工具包你可以插入Visual Studio。这些工具可以带来很高的生产力,而且提供成堆的功能。但有时我也看到有些性能和系统稳定性问题是受了它们的影响,特别是在使用了这些工具包的早期(或者beta)版本的情形下(你应该总是留心什么时候工具包制造商会更新这些版本)。如果你看到与性能和稳定性有关的问题的话,你也许要尝试一下卸载任何工具包来看是否有作用。如果有作用的话,你可以跟第三方工具包制造商合作识别问题所在。

Visual Basic之Build性能HotFix

Visual Basic产品组刚发布了涉及大型VB项目编译性能问题的几个hotfixes。你可以从这个博客帖子里了解到如何立即得到这些hotfixes。Visual Basic产品组还有一个直通email 地址,[email protected],你可以用它来直接联系他们,假如你遇到性能问题的话。

希望本文对你有所帮助,

Scott

 

(思归译)

技巧和诀窍:UpdateProgress控件和AJAX活动图像动画

【原文地址】Tip/Trick: UpdateProgress Control and AJAX Activity Image Animations
【原文发表日期】Thursday, September 21, 2006 1:06 PM

ASP.NET AJAX扩展(即Atlas) 提供的很酷的新控件之一是UpdateProgress控件。这个控件允许你在AJAX回调的进行过程中,自动在页面上显示指定的UI。同时,如果AJAX回调耗时太长,你还可以在UI上提供一个选项让用户来取消AJAX回调。在页面上使用该控件,只须这样声明:

    <atlas:UpdateProgress ID=”progress1″ runat=”server”>
        
<ProgressTemplate>
        
            
<div class=”progress”>
                
<img src=”indicator.gif” /> 
                Please Wait…
            </
div>
        
        
</ProgressTemplate>
    
</atlas:UpdateProgress>

在AJAX回调进行中,<ProgressTemplate>里的内容就会显示。你可以通过CSS将里面的内容显示在页面的任何位置,例如,你可能想直接在GridView或其他元素上方通过渐显效果把它显示出来。开发人员经常使用动画图像显示进度,现在也可以在<ProgressTemplate>里面实现这样的效果。

Alan Le最近发了一个很酷的链接,指向几个非常有用的网站,这些网站提供了许多动画进度的图标。你可以很容易地将它们与UpdateProgress控件结合使用,来显示回调操作的进度:

你可以从这几个网站上下载到可用的旋转齿轮和进度图标。下面是几个例子:

本周早些时候,我提到新发布的Atlas控件工具包现在包含了一个动画效果库,可以和ASP.NET AJAX扩展一起使用。与UpdateProgress控件配合使用的话,它们能给你的网站增添很好的视觉效果。

希望本文对你有所帮助,

Scott

 

 

(Ring译)

九月份Atlas控件工具包发布(现支持动画效果)

【原文地址】September Atlas Control Toolkit Released (Now with Animation Support)
【原文发表日期】 Tuesday, September 19, 2006 8:28 AM

Atlas控件工具包的最新版已于上个星期晚些时候推出。这个工具包基于核心ASP.NET AJAX 运行时,是个提供了很多有用的具备AJAX功能的ASP.NET控件库。你可以在这里下载和运行样本程序

就象我在以前的帖子里提到的那样,这个工具包很酷的地方就在于,它包含了几个由非微软开发人员提供的控件。例如,在这个更新版本里,有一个非常酷的新Slider控件(点击这里观看它的实战演示),就是由非微软开发人员贡献的,它提供了非常平滑的,在客户端从数值范围选值的支持:

这个版本里还包括了对一些渐为时兴的客户端动画效果的支持。你可以直接在JavaScript里使用动画效果包,或者通过<atlasToolkit:AnimationExtender>控件来轻易地组合动画行为,以响应用户的动作。譬如,你可以让文字和图片渐现,扩大,爆炸,移动,或pop-up等等。

动画效果包很酷的地方在于,你可以通过<atlas:AnimationExtender>控件,用声明的方式来定义动画行为,这使得定义动画顺序起来既干净又不费力。

你可以在这里进一步研究这个新的动画效果包,同时也能在线运行相关演示。务必查阅一下动画效果包的参考页,以深入学习动画效果类框架,以前它支持的所有的方法,属性和事件。

除了响应用户点击或客户端行为触发动画效果以外,你也可以在用ASP.NET AJAX UpdatePanel控件刷新部分页面做的postback时,使用新的<AtlasToolkit:UpdatePanelAnimationExtender>控件来添加动画效果的支持。这可以使得突出显示变化了的界面的方式更干净,更加对用户友好,譬如,你可以逐渐显示那些变化,或者真想出奇的话,你可以旋转/加彩变化了的界面,让你的用户看了都会晕眩。看一下UpdatePanelAnimationExtender的这个在线演示,深入研究一下这个控件。Alan Le在这里贴了一个很棒的简单例子,给你演示怎么通过这个控件用声明的方式组合动画,你应该去看一下。

一如既往,你可以免费下载带有全部源码的Atlas控件工具包,也可以在线运行它。想进一步学习使用ASP.NET AJAX(即Atlas)以及控件工具包的话,读一下我几个星期前写的这篇博客帖子,内含一堆很棒的免费录像的链接。

希望本文对你有所帮助,

Scott

标签:,
 

(思归译)

技巧和诀窍:在VS 2005里使用Vista的IIS7

【原文地址】Tip/Trick: Using IIS7 on Vista with VS 2005
【原文发表日期】 Tuesday, September 19, 2006 7:41 AM

上个星期,几个人都询问我怎么在Windows Vista上使用VS 2005 建立IIS7上的网站。具体来说,他们都遇到了一个问题,在试图连接IIS7时,他们要么看到一个对话框要求他们安装FrontPage服务器扩展,要么得到一个“你必须是管理员组的成员”的出错消息,如下图所示:

Bradley发表了 一个很好的帖子,描述了如何使得VS 2005连接到IIS 7.0的详细步骤。简短地说,你需要按下面二个步骤进行:

1) 你需要确认在IIS7里安装了可选的IIS 6 Management Compatibility(IIS 6管理兼容)这个选项。这将为新的配置系统安装一个与VS 2005使用的老的Metabase API相兼容的API。你可以在Vista 控制面板中的Turn Windows Features on or Off(打开/关闭Windows特性)对话框里选择该选项:

 

2) 你需要确定以高级权限来运行VS 2005,这样你才能有管理权限连接到IIS。如果要调试一个服务,或者创建网站或者改动影响整个机器的配置时,你需要拥有管理权限。具体做法是,在启动VS时,右击VS图标,然后选择“以管理员身份运行(Run as Administrator)”:

注意,假如你启动了UAC(用户访问控制)的话(注:UAC在Vista中默认是启动的),即使你的用户账号已经是管理员组成员,你还是需要这么做。如果你禁止了UAC(你可以通过控制面板来这么做),那么这第二步就不需要了。如果你使用VS 2005内置的Web服务器的话,那么你不需要以高级权限运行VS 2005,因为内置的Web服务器是以非高级权限运行的。而且这个步骤也只有在本地连接,运行/调试IIS时才需要。

我们将会更新Visual Studio 2005来提供更准确的错误消息,在将来,会以更自然的方式来向你指明以上的步骤。在目前,只要使用上面这些步骤,就可以搞定了。

希望本文对你有所帮助,

Scott

 

(思归译)

技巧和诀窍:在ASP.NET AJAX UpdatePanel中实现对后退/前进按钮的支持

【原文地址】Tip/Trick: Enabling Back/Forward-Button Support for ASP.NET AJAX UpdatePanel
【原文发表日期】Thursday, September 14, 2006 12:25 PM

Nikhil最近写了一个好帖子,是关于一个叫做HistoryControl的支持AJAX的新ASP.NET 控件的。把它加到页面上后,允许开发人员用编程手段往浏览器的历史记录里添加逻辑视图(logical view)。这将使得支持AJAX的网站更加有用,而且遵循传统web应用所遵循的标准的前进/后退的导航惯例。

譬如,通过Nikhil的HistoryControl,开发人员可以编写类似下面这样的编码来响应一个列表的选择变动,并且把列表选择当作标识符添加到浏览器的历史记录中去:

private void ContentList_SelectedIndexChanged(object sender, EventArgs e) {
   history.AddEntry(contentList.SelectedIndex.ToString()
;
}

你一旦往历史控件里添加新项后,浏览器中的后退/前进按钮就被激活了。Nikhil的历史控件提供了一个Navigate事件,当你在浏览器里按后退/前进按钮时,这个事件就会被触发,同时它在事件处理函数的参数里提供了早先在把逻辑视图添加进浏览器历史记录时所用的那个标识符。然后你就可以使用这个标识符来把页面回复到跟这个历史记录相对应的页面状态了:

private void HistoryControl_Navigate(object sender, HistoryEventArgs e) {

    int selectedIndex 0;

    if (String.IsNullOrEmpty(e.Identifier) == false) {
        selectedIndex 
Int32.Parse(e.Identifier);
    
}

    // Update the content being displayed in the page
    
contentList.SelectedIndex selectedIndex;

    // Mark the update panels as needing an update
    
mainUpdatePanel.Update();
}

这样你的用户在使用AJAX应用时也能使用前进/后退按钮来作导航了。你可以在这里下载Nikhil的历史控件的编码,开始用在你的项目里

希望本文对你有所帮助,

Scott

(思归译)

Atlas 1.0版的命名和产品发布计划

【原文地址】“Atlas” 1.0 Naming and Roadmap
【原文发表日期】Monday, September 11, 2006 10:01 AM

在过去的一年内,我们一直在奋力开发Atlas。Atlas一直在发展,变化和成长,是因为我们得到了惊人数量的反馈和早期采纳。我们看到了围绕着这个产品的难以置信的兴趣和兴奋,光是今年,下载数目就超过25万次。

发布Atlas 1.0版

很多人要求我们在Visual Studio下个版本发布之前推出一个完全支持的Atlas 1.0版。完全支持(Fully supported)意味着,Microsoft提供每天24个小时,每周7天,一年365天的产品支持,以及任何客户可以得到热补丁(hotfix),假如他们遇到影响他们应用的bug的话。这也意味着,产品将有一个为期10年的产品生命周期的承诺─这样客户公司就能靠这个产品来开发关键业务(mission critical)的应用程序。

今天,我非常兴奋地宣布,我们将发布基于ASP.NET 2.0的完全支持的Atlas 1.0 版,而且将确保它与Visual Studio 2005的兼容。我们的目标是在年底左右发布Atlas 1.0 版。计划是,先有一个Beta,然后是RC(发布候选),然后会根据客户反馈来决定最后的发布日期。

Atlas功能(Feature)推出计划

为加速日程安排和能在今年推出完全支持的版本,我们将集中精力推出一套完全支持的核心(core)功能。这套核心功能包括,能允许开发人员建立客户端控件/组件所需的所有常用组件,以及提供与ASP.NET集成的服务器端功能(包括无比受欢迎的UpdatePanel以及其他的服务器控件)。

目前Atlas CTP版本支持的一些功能(feature)不会出现在完全支持的核心功能中。但这些功能会以单独下载的形式继续存在下去,而且会在支持的核心版本之上工作。我们并不是要撤销这些功能,而只是想试着把握好(optimize the timing)第一套完全支持的功能的发布时间,而且确保我们具有以更敏捷的方式继续发展和创新一些功能的灵活性,同时,我们想把核心层的功能“烧制好(bake down)”,以避免将来要对它们做影响巨大的变动。

很明显,我们将在未来对所有的功能继续支持Go-Live  license。那些只想使用受完全支持协议保障的产品的企业客户,可以选择只使用核心版中的那些功能。

随着时间的迁移,我们会把越来越多的功能转移到完全支持的范围中去。我们也将在未来的几个星期内发表一个详细的白皮书,列出支持的功能,发布计划,对CTP版做的产品变动等。

对Atlas的命名

作为发布Atlas的一部分,我们也将最后锁定我们以后将开始使用的产品的官方名称。以前笼统叫做Atlas的东西,从现在开始将有几个名字:

1) 客户端Atlas javascript库将被称作“微软AJAX库(Microsoft AJAX Library)”。这将能在任何浏览器中使用,也将支持任何后端web服务器 (阅读这些博客帖子以了解如何在PHPColdFusion里运行)

2) 与ASP.NET 集成极佳的服务器端Atlas功能,将被称作“ASP.NET 2.0 AJAX 扩展(ASP.NET 2.0 AJAX Extensions)”。作为改动的一部分,Atlas控件的标识前缀也将从<atlas:>变成<asp:>。这些控件将成为ASP.NET下个版本的一部分。

3) 今天的“Atlas控件工具包(Atlas Control Toolkit)是套免费的共享源码的控件和组件,使用它,你可以从ASP.NET 2.0 AJAX Extension中获取最大的价值。以后,这个项目的名称将变成 “ASP.NET AJAX 控件工具包(ASP.NET AJAX Control Toolkit)”。

结语

我们非常兴奋,我们将能推出完全支持的1.0 版。它将是100%的跨浏览器和跨平台。它将简化向ASP.NET应用添加丰富的AJAX功能,以及提供给用户改进的用户体验(UX)。把这个功能以最灵活的方式送到你的手中是我们的首要任务,我们相信,我在上面描述的计划将能达到这个目的。

等到明年的Visual Studio “Orcas”版,生活将变得更加美好,我们将添加丰富的JavaScript Intellisense,调试,和在Visual Studio中对ASP.NET AJAX Extensions的WYSIWYG设计器支持,以及还有许多其他非常棒的功能可利用。

谢谢,

Scott

 
(思归译)

CSS 控件适配器工具包新版发布

【原文地址】CSS Control Adapter Toolkit Update
【原文发表日期】Friday, September 08, 2006 6:53 PM

今天,我们发布了ASP.NET 2.0的CSS控件适配器的更新版本,内中包含了bug fixes,用户建议的的功能,以及对新控件的支持。你可以免费下载,马上开始使用它们,来给予下列ASP.NET控件用纯粹的CSS优化过的标识(markup)::

  • Menu
  • TreeView
  • GridView (新)
  • DetailsView
  • FormsView
  • DataList
  • Login (新)
  • ChangePassword (新)
  • CreateUser (新)
  • PasswordRecovery (新)
  • LoginStatus (新)

CSS控件适配器第一次发行时,我曾写帖子说明过,这些控件适配器使用了ASP.NET 2.0中一个新的内置的扩展机制,叫做“控件适配器(control adapters)”。控件适配器允许你将其接入(plug-in)任何ASP.NET 服务器控件,然后它就会覆盖,修改或细调( tweak)那个控件的显示输出逻辑。

控件适配器很酷的地方是,它们不要求页面开发人员对一个新的控件编程,或修改控件编程模型的semantics,即,跟以前一样,你仍旧使用同样的控件属性,方法,事件和模板。建造页面的开发人员可以完全忘却使用了控件适配器,控件适配器模型使得注册和封装这样的支持非常干净。

快速入门示范

在免费的Visual Web Developer或Visual Studio 2005中使用CSS控件适配器工具包,按下列步骤做:

第一步:安装CSS控件适配器工具包:  

下载和安装CSS 控件适配器工具包到你的机器上。点击这里下载一个Visual Studio的.VSI 模板项目,它会生成一个配置了CSS控件适配器的可以运行的项目模板。这是个安全的下载,它不会修改VS或ASP.NET中的任何文件或设置,所以你不要担心它是否会对现有编码造成问题。

第二步:创建一个注册了CSS控件适配器的新网站:

在Visual Web Developer或VS 2005中,在菜单里选择文件->新网站。这会打开“新网站”对话框。选择你的编程语言,然后选择新安装的“CSS友好网站(CSS Friendly Web Site)”项目模板:

这会为你创建一个新的网站项目,它的app_code目录里已经包含了CSS控件适配器的源码。它也包含了一些默认的CSS样式文件,其中有为你预先定义好了的样式类的名称(class name),你可以用它们来定制你需要的任何CSS标识(CSS markup):

第三步:试一些CSS样式控件例子: 

要看控件适配器是如何改变服务器控件的标识的话,研究一下默认添加到新项目中的walkthrough子目录

例如,在下图中,SimpleMenu.aspx网页静态地定义了一个菜单控件,该控件连到了一个OnClick事件处理方法(或者,你也可以使用导航直接转到一个特定的网页去):

<asp:Menu ID=”EntertainmentMenu” runat=”server” Orientation=”Horizontal” onmenuitemclick=”Menu_OnClick” CssSelectorClass=”SimpleEntertainmentMenu”>
    
<Items>
        
<asp:MenuItem Text=”Music”>
            
<asp:MenuItem Text=”Classical” />
            <
asp:MenuItem Text=”Rock”>
                
<asp:MenuItem Text=”Electric” />
                <
asp:MenuItem Text=”Acoustical” />
            </
asp:MenuItem>
            
<asp:MenuItem Text=”Jazz” />
        </
asp:MenuItem>
        
<asp:MenuItem Text=”Movies” Selectable=”false”>
            
<asp:MenuItem Text=”Action” />
            <
asp:MenuItem Text=”Drama” />
            <
asp:MenuItem Text=”Musical” />
        </
asp:MenuItem>
    
</Items>
</asp:Menu>

在code-behind里,Menu_OnClick事件的编码是象这样的:

    Public Sub Menu_OnClick(ByVal sender As ObjectByVal As MenuEventArgs)
        MessageLabel.Text 
“You selected ” & e.Item.Text & “.”
        
e.Item.Selected = True
    End Sub

在运行时,CSS控件适配器会导致菜单输出使用了<li>和<ul>元素的CSS样式化了的的标识,而不是表格,当我们应用一个CSS样式表到页面时,我们将得到一个好看的分层的下拉式菜单:

在看这些样本例子时,你也许要看一下CheckBoxTreeView 这个例子。它示范了如何用CSS来样式化<asp:treeview>控件以使用行内( inline)的复选框:

 

那么CSS控件适配器是如何工作的呢?

控件适配器是些继承了System.Web.UI.Adapters.ControlAdapter基类的类,实现了绘制/渲染(rendering)方法,这些方法允许控件适配器完全定制一个单独的控件显示的标识。当你使用CSS友好网站项目模板创建一个新的网站项目时,11个预建的与CSS友好的控件适配器的源码就被自动地加到你的app_code目录中了:

你可以原本不动地使用这些控件适配器类,不需要改变编码,就能得到与CSS友好的输出,或者你可以对它们进行细调,假如你需要对显示输出做任意定制的话。

控件适配器是通过在当前项目的应用程序根目录的直接子目录,/App_Browsers里,添加一个.browser文件,来与 ASP.NET注册的。.browser 文件里包含了如下所示的简单的标识,允许你指定哪个控件适配器应该用在哪个控件上:

<browsers>
  
<browser refID=”Default”>
    
<controlAdapters>
      
<adapter controlType=”System.Web.UI.WebControls.Menu” adapterType=”CSSFriendly.MenuAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.TreeView” adapterType=”CSSFriendly.TreeViewAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.DetailsView” adapterType=”CSSFriendly.DetailsViewAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.FormView” adapterType=”CSSFriendly.FormViewAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.DataList” adapterType=”CSSFriendly.DataListAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.GridView” adapterType=”CSSFriendly.GridViewAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.ChangePassword” adapterType=”CSSFriendly.ChangePasswordAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.Login” adapterType=”CSSFriendly.LoginAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.LoginStatus” adapterType=”CSSFriendly.LoginStatusAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.CreateUserWizard” adapterType=”CSSFriendly.CreateUserWizardAdapter” />
      <
adapter controlType=”System.Web.UI.WebControls.PasswordRecovery” adapterType=”CSSFriendly.PasswordRecoveryAdapter” />
    </
controlAdapters>
  
</browser>
</browsers>

如果需要,你可以针对不同的浏览器定制不同的控件适配器,或者定义这些控件适配器为“默认(Default)”,这样就会对访问你的应用的所有的浏览器都默认应用这些适配器。

做完这些配置后,就算搞定了,之后,你就可以使用标准的CSS样式表来定制所有的样式信息了。

如有疑问或要汇报任何bug或问题的话,请访问http://forums.asp.net网站的CSS Control Adapters 论坛。上面的CSS控件适配器在VS 2005网站项目模型(Web Site Project Model)和VS 2005 Web应用项目模型(Web Application Project Model)两者中都可使用。而且,CSS控件适配器有VB和C#两个版本你可以用。

在这里我要提起Russ和Heidi,为他们在创建CSS 控件适配器和样本例子方面的出色工作表示特别的感谢!

谢谢,

Scott

标签:, ,

(思归译)

IIS 7.0 RC1

【原文地址】IIS 7.0 RC1
【原文发表日期】Thursday, September 07, 2006 12:05 AM

你也许已经听说过了,上个星期晚些时候,我们发行了Windows Vista RC1。过去的几天里,我一直在我的主要机器上运行它,印象极佳。至今还没死过机,运行非常平稳。

Vista中我参与很多的程序是IIS 7.0─它将是微软web服务器平台的一个重大更新,带来的好玩意成堆。今夏早些时候,我们推出了www.iis.net网站,你可以在上面了解到关于IIS7的详细信息,以及你可以通过IIS7来做的所有酷的事情。 IIS7产品组的主管Bill Staple最近撰写了一篇非常好的博客帖子,讨论了一些他们组在Vista RC1中所做的非常酷的变动和改进。其中他谈到我们最近对新的管理用户界面做的一些变动:

在我今早在凤凰城(Phoenix)做的讲座中,我演示了你现在可以通过新的管理工具做的一些酷的事情。在这里我简单地提一下:

1) 你现在可以用管理工具在Windows客户机器上创建和管理任意数目的网站。你不再局限于单个网站(注意,上图中,我创建了三个网站)。同样地,10个连接的限制也没有了。

2) 我们把IIS 和ASP.NET 管理设置集成到了单个管理工具里。这样,你现在就可以在一个地方查看和设置认证和授权规则,而不是象以前那样要通过多个不同的对话框来做。这给管理人员提供了一个更加一致和清晰的用户界面,以及web平台上统一的管理体验。

3) 管理工具使用了新的分布式web.config配置系统。IIS7不再拥有单一的metabase 配置储存,而将使用和ASP.NET支持的同样的web.config文件模型,这样就允许你把配置和你的web应用的内容一起存储和部署。这意味着,你可以把你的设置和你的web应用一起xcopy 或FTP 到你的远程服务器上,没必要再写管理脚本来定制配置了。

4) 管理工具支持“委派管理(delegated administration)”,意味着主机供应商可以允许客户使用管理工具来远程管理他们共享的网站,当然在这种情形下,管理工具里显示的只是客户自己网站的设置,而不是整个机器的设置。我们内部使用基于HTTP的web-service,来支持跨火墙的连接,而不象以前的IIS管理工具那样,因为使用DCOM 而经常被禁止。 

5) 管理工具是用.NET和Windows Forms写成的,是可以被扩展的。这意味着你可以添加自己的UI模块到管理工具里,为你自己的HTTP 运行时模块和配置设置提供管理支持。  

6) 管理工具内置对ASP.NET 2.0的成员和角色管理系统提供管理界面的支持。这意味着你可以在管理工具里,创建和管理角色和用户,以及给用户指定角色。这工具可以连接你为ASP.NET 2.0建立的任何成员和角色提供器,只要实现了标准的ASP.NET 2.0 提供器契约,你就自动得到了对它们的完整的管理界面的支持,即使在远程共享主机的环境下也行的!

例如,我可以点击上图所示的.NET Roles 图标,创建和管理特定于我的“SampleSite”网站的角色:

然后我可以点击.NET Users图标来创建和管理我的用户,然后把他们对应到我应用中的任何角色上:

IIS 7.0中的好玩意成堆,我们将在未来的博客里讨论它们。想了解详情的话,今天就去访问www.iis.net网站或者订阅它的RSS feed

希望本文对你有所帮助,

Scott

标签:, ,
 
(思归译)

技巧和诀窍:用VS 2005创建可重用的项目和部件模板

【原文地址】Tip/Trick: Creating Re-Usable Project and Item Templates with VS 2005
【原文发表日期】Monday, September 04, 2006 1:19 PM

通常地,当你做项目时,你有一个标准的做法你喜欢用来组织你的编码,譬如目录布局,要包含的默认的命名空间,要包含的默认的程序集引用,标准的CSS样式表等等。这经常是开发人员在新项目一开始时最先做的事情。

VS 2005和Visual Web Developer中有个新的特征,就是很容易地创建“项目模板(Project Templates)”和“部件模板(Item Templates)”的能力。这些模板允许你捕捉住自己偏爱的编码配置和默认的项目部件,然后把它们包装在可重用的模板里,这样在开始新的项目或者添加新的项目部件时,你就能快速使用它们。这既可以省下你很多手工时间,而且还确保在新项目里,一切都设置得跟你喜欢的方式一模一样。

“项目模板”允许你指定起始的一批文件(以及它们的布局和内容),程序集引用,以及其他你创建新的项目时的习惯配置。你将会在“创建新项目”或者“创建新网站”的对话框中“我的模板(My Templates)”这一栏看到这些自定义的模板。“部件模板”则允许你创建自定义的文件模板。你将会在“添加新的部件(Add New Item)”对话框中的“我的模板”这一栏看到这些模板:

你可以用描述性的名字来对每个项目模板和部件模板命名,在VS 2005中这些模板的数目没有限制。你还可以使用内置的宏替换标记(macro replacement tokens)来定制名字,命名空间,路径,日期/时间等。你也可以很容易地将它们发布出来,与他人共享 ─ 允许你很容易地在自己的开发组里或你自己的朋友圈里散发它们。

想了解其中细节,请参考我一年前写的《如何创建可重用的网站部件模板》(英文) 这个博客帖子

Ameet Phadnis最近在ASPAlliance.com上发表了一篇更棒的文章。该文详细地介绍了如何创建和定制部件和项目模板。你可以在这里读到他的文章。

希望本文对你有所帮助,

Scott

 
(思归译)

改变ASP.NET动态编译时使用的临时目录位置

当系统分区的空闲空间越来越少的时候,任何能腾出空间的方法都是受欢迎的。比如说改变ASP.NET动态编译时使用的临时目录位置。

这个设置可以用于machine.config或者web.config配置文件中,是compilation元素的tempDirectory属性。详情可以参见http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfcompilationsection.asp

当然定期运行Disk Defragment Utility也可能让空闲空间稍多一些,更能提高系统性能。