el Guille, la Web del Visual Basic, C#, .NET y más...

Cómo usar la versión 3.5 de .NET en un sitio Web

 
Publicado el 31/May/2008
Actualizado el 31/May/2008
Autor: Guillermo 'guille' Som

En este artículo te explico qué tienes que hacer para usar los compiladores y otros ensamblados de .NET Framework 3.5 en un sitio Web, todo modificando el fichero web.config.



 

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 1. Configurar la versión de .NET

Figura 2. Configurar la versión de .NET
Figura 2. Configurar la versión de .NET

Figura 3. Configurar la versión de .NET en IIS
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
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

 



 


La fecha/hora en el servidor es: 14/11/2024 6:19:33

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024