如何设置使 IIS 应用程序池使用 ASP.Net 3.5 而不是 2.0

        一个被很多人提起过的问题:我应当如何告诉我的 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 类库。


.NET Framework 1.x = CLR 1.x
.NET Framework 2.0 = CLR 2.0
.NET Framework 3.0 = CLR 2.0
.NET Framework 3.5 = CLR 2.0 + (C# 3.0 | VB9)
当然,同样地你也可以使用 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 和编译器的版本,这些由应用程序决定。

        现在,只是我个人观点,我更愿意以以下方式命名和配置我的应用程序池。



        切换asp.net的frmework版本,修改配置文件即可,CLR目前最高版本只有2.0,.net3.5的区别在于增加了很庞大的类库,但CLR的版本还是2.0,所以iis里面应用程序池只有2.0的选项,在web.config文件中增加部分说明,即可使用.net3.5的类库,比如ajax。

你可能感兴趣的:(如何设置使 IIS 应用程序池使用 ASP.Net 3.5 而不是 2.0)