Introducción:
En casi todos los servidores Web (los que dan alojamiento para los sitios
Web) que dan soporte para ASP.NET ofrecen las versiones 1.x y 2.0 de ASP.NET. En
los más punteros (y que están más al día), también ofrecen la versión 3.5 de
.NET, el problema es que en la parte que permite configurar esa versión, solo
aparecen la 1.x y la 2.0 pero no la 3.5. Y en el caso de que aparezca, bueno,
solo serviría para indicarte que está disponible, ya que la versión 3.5 no se
puede indicar como versión de .NET de un sitio Web. A ver... no se puede, pero a
nivel de IIS, ya que al configurar la versión de .NET que se quiere usar se
puede elegir solo entre las versiones 1.x y 2.0 (independientemente de que
tengas otra posterior instalada).
En las siguientes capturas puedes ver cómo se configura en algunos servidores
de alojamiento y cómo se elige en un Windows Server 2003 (que es el que muchos
sitios tienen instalado).
Figura 1. Configurar la versión de .NET
Figura 2. Configurar la versión de .NET
Figura 3. Configurar la versión de .NET en IIS
Como puedes comprobar, si en el IIS no se puede elegir una versión superior a
la 2.0 ¿cómo se podrá hacer en las aplicaciones que se basan en el IIS?
En realidad no se puede, al menos de forma tan directa como elegir la versión
1.1 o la 2.0 (ver la figura 3).
¿Cómo se configura entonces?
Aquí te explico cómo.
Configurar un sitio Web para que use la versión 3.5 de .NET Framework
Como te he comentado antes, en el IIS no se puede elegir otra versión
superior a la 2.0, ya que en realidad, de lo que se trata es de la versión del "runtime"
de .NET (el CLR) y como seguramente sabrás, la versión más alta del CLR es la
2.0, los otros números (3.0 y 3.5) son solo meros números de las versiones
"comerciales" del .NET Framework, no del corazón de .NET (el CLR).
Pero lo que si hay con la versión 3.5 del .NET Framework son nuevos
compiladores, en concreto los de Visual Basic y C#, éstos permiten la inferencia
de tipos, por poner solo un caso. Y si quieres tener a tu disposición de esa
característica (o cualquier otra que se incluya en los compiladores de la
versión 3.5) debes indicarlo de forma expresa. ¿Cómo? Ahora te lo explico... sí,
ya sin enrollarme más... valeeee... ¡ojú que impaciente! ;-)))
El truco está en modificar el fichero web.config, y estas son las cosas que
deberías modificar, agregar o cambiar en ese fichero.
En la parte dentro de <system.web> debes tener esto en el elemento
<compilation>:
<compilation debug="false" strict="true" explicit="true">
<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.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
Aquí lo que hacemos es indicar las versiones de los ensamblados que
deberíamos tener a nuestra disposición.
Si te fijas, strict = "true" indica que quieres usar
Option Strict On, y explicit = "true" indica que
quieres usar Option Explicit On, esto dos valores, por supuesto
solo son aplicables a Visual Basic.
Por otro lado debug = "false" debería estar siempre así, ya
que se pierde rendimiento si está activado el modo de depuración, y por tanto
solo se debería usar en nuestro equipo local para probar la aplicación o sitio
Web desde el Visual Studio.
Después de </system.web> y antes del cierre del elemento
<configuration>,
también debes indicar qué versión de los compiladores quieres usar:
<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>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"
type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="OptionInfer" value="true"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
Y esto es todo. Por supuesto, debes asegurarte de que el .NET Framework 3.5
esté instalado en el servidor donde está alojado tu sitio Web, si no está, esto
simplemente no funcionará y es posible que te de algún error.
Comprobar si esto funciona
Como es natural, querrás comprobar si esto funciona o no.
Lo más fácil es crear una página para Visual Basic y otra para C#, en la que
usaremos algunas de las cosas nuevas, por tanto, si el .NET Framework 3.5 está
instalado y configurado, debería funcionar bien.
Aquí tienes el código de una página Web para que use C# y otra para que use
Visual Basic.
En la de Visual Basic, indicamos que sea estricto con las declaraciones, de esa
forma se usará la inferencia de tipos si no se indica el tipo de datos de una
variable (si Option Strict no está activado, no daría error, ya que se usaría
Object como tipo de datos).
La página de prueba de C# 3.0
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
var cadena = "Hola desde C# 3.0";
LabelInfo.Text = cadena;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Prueba de C# 3.0</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="LabelInfo" runat="server" Text="" />
</div>
</form>
</body>
</html>
La página de prueba de Visual Basic 9.0
<%@ Page Language="VB" Strict="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim cadena = "Hola desde Visual Basic 9.0"
LabelInfo.Text = cadena
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Prueba de Visual Basic 9.0</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="LabelInfo" runat="server" Text="" />
</div>
</form>
</body>
</html>
Si la versión instalada no es la correcta (o no has indicado estos datos en
el fichero web.config), te mostrará un error como el de la figura 4.
Figura 4. Error si no está la versión correcta
Importante:
Comentar que esos datos de configuración lo podemos indicar o bien en el
web.config del directorio raíz o en el de cualquier directorio específico.
Espero que te sea de utilidad.
Nos vemos.
Guillermo