在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一个被很多人提起过的问题:我应当如何告诉我的 IIS 应用程序或者虚拟目录使用 ASP.NET 3.5 而不是 ASP.NET 2.0 呢? 人们一般会进入 IIS6 或者 IIS7 并且建立一个应用程序池,然后查看属性,接着打开下拉列表并期望有 .NET 3.0 和 .NET 3.5 两个选项在其中,却发现根本没有,于是不满,但是这是理所当然的。 现在给出这个问题的解释,并希望这不会再使人们觉得迷惑了。 营销策略 我们都希望每个主要版本的更新都意味着新的 CLR, 但事实上并不如此。 .NET 2.0 .NET 的核心在 %windir%\Microsoft.NET\Framework\v2.0.50727. 这里就是 GAC (Global Assembly Cache) 所有的类库和编译器的所在地。当有人问起 .Net 在哪里时我常常从这里开始指出 .NET 3.0 .NET 3.0 并不是新的编译器以及 CLR。相反,这是三大类库:WCF (Windows Communication Foundation née Indigo), WPF (Windows Presentation Foundation née Avalon) 以及 Windows Workflow (WF)。 请记住:安装了 .NET 3.0 并不会像你恐惧的那样各个方面都大幅改变了你的系统。你的 2.0 程序仍然会在安装了3.0的系统上好好地运行。.Net 3.0 使用 2.0 的编译器以及 2.0 的 CLR。 尝试一下。 如果你进入 Visual Studio 进入 File | New | Project (or Web Site),注意右上方的下拉列表 。 选择 ".NET Framework 3.0" 并且新建一个 "WCF Service",看看 web.config 文件。注意这是很方便的,并且开起来跟 .NET 2.0 ASP.NET 差不多,只是增加了小部分东西。 基本上,请记住,Framework 版本不等于 CLR 版本。如果你设置 IIS 应用程序池使用 .NET 2.0,你是在说使用 2.0 的 CLR。 WCF 程序使用 .NET 2.0 CLR 但使用 3.0 WCF 类库。
当然,同样地你也可以使用 3.5 的编译器以及 3.0 的类库。 在你新的应用程序的 web.config 文件,有一个 <system.serviceModel> 区域用于定制 WCF,其他地方跟 2.0 相同。 .NET 3.5 .NET Framework 3.5 指另外的一些新东西。 第一,庞大的 LINQ,包含了新的 C# 和 VB 编译器。第二,REST 支持被添加到 Windows Communication Foundation。第三,ASP.NET AJAX, 相比ASP.Net 2.0,这次不是一个独立下载的安装包了。 .NET 3.5 还有其他一些新的东西,像 .NET 2.0 的修正包。要获知究竟 .NET 3.5 多了一些什么的一种方法就是去看看 c:\windows\assembly。以下是 GAC (全局程序集缓存)中3.5版本的程序集。 同时,从 %windir%\Microsoft.NET\Framework\v3.5 中我们可以看到新的编译器,MSBuild Target 文件等等。 所以,要回答本文开篇提出的问题,可以做以下实验: 打开 Visual Studio 并建立一个 .NET 2.0 网站。一旦加载后, 观察 web.config 文件。接着,右击项目文件,选属性,选择.Net Framework 3.5。 现在,打开 web.config 文件并观察变化。一些处理器被添加到其中以支持 Ajax,还有一些新的 ASP.NET 特性,但是最重要的是 <system.codedom> 标记还有程序集区域中新增的程序集。 <compilation debug="false"> <assemblies> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> </assemblies> </compilation> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="WarnAsError" value="false"/> </compiler> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="OptionInfer" value="true"/> <providerOption name="WarnAsError" value="false"/> </compiler> </compilers> </system.codedom> 这就是所有的魔术。但是这并不是魔术,一切东西都是可见的。 这些东西就告诉你的网站使用新的编译器以及引用新增的类库。 这里就是告诉 ASP.NET 使用 .NET 3.5 的地方,不在 IIS 里面。IIS 应用程序池知道 CLR 的版本,不是 Framework 和编译器的版本,这些由应用程序决定。 现在,只是我个人观点,我更愿意以以下方式命名和配置我的应用程序池。 转自:http://diryboy.blog.163.com/blog/static/31884331200832471156387/ |
请发表评论