۱۳۸۷/۰۹/۲۵

وادار كردن IIS به استفاده از ASP.Net 3.5


همانطور كه مطلع هستيد در تنظيمات يك دايركتوري مجازي در IIS6 يا 5، حتي پس از نصب دات نت فريم ورك سه و نيم، گزينه انتخاب نگارش 3.5 ظاهر نمي‌شود و همان تنظيمات ASP.Net 2.0 كافي است (شكل زير) (دات نت 3 و سه و نيم را مي‌توان بعنوان افزونه‌هايي با مقياس سازماني (WF ، WCF و ...) براي دات نت 2 درنظر گرفت).




هنگام استفاده از VS.Net 2008 و تنظيم نوع پروژه به دات نت فريم ورك 3.5 ، به صورت خودكار تنظيمات لازم به وب كانفيگ برنامه جهت استفاده از كامپايلرهاي مربوطه نيز اضافه مي‌شوند كه شايد از نظر دور بمانند.
براي آزمايش اين مورد، فرض كنيد صفحه زير را بدون استفاده از code behind و VS.Net ايجاد كرده ايم (جهت آزمايش سريع يك قطعه كد Linq ).

<%@ Page Language="C#" %>

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Linq" %>

<form id="Form1" method="post" runat="server">
<asp:GridView ID="GridView1" runat="server" />
</form>


<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
string[] cities = {
"London", "Amsterdam", "San Francisco", "Las Vegas",
"Boston", "Raleigh", "Chicago", "Charlestown",
"Helsinki", "Nice", "Dublin"
};

GridView1.DataSource = from city in cities
where city.Length > 4
orderby city
select city.ToUpper();

GridView1.DataBind();
}
</script>

بلافاصله پس از اجرا با خطاي زير روبرو خواهيم شد.



اين قطعه كد چون از قابليت‌هاي كامپايلر جديد سي شارپ استفاده مي‌كند، با كامپايلر پيش فرض و تنظيم شده دات نت 2 كار نخواهد كرد و بايد براي رفع اين مشكل، فايل web.config جديدي را نيز به پوشه برنامه اضافه كنيم:

<?xml version="1.0"?>
<configuration>

<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>

<system.web>
<compilation defaultLanguage="c#">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
</system.web>


</configuration>

در اينجا قيد اسمبلي System.Core ضروري است و همچنين نگارش كامپايلر نيز به صورت صريح قيد شده است تا IIS را وادار كند كه از قابليت‌هاي جديد دات نت فريم ورك استفاده نمايد.

همانطور كه ذكر شد اگر از VS.Net 2008 استفاده كنيد، هيچ وقت درگير اين مباحث نخواهيد شد و همه چيز از پيش تنظيم شده است.