Herramienta de compilación de ASP.NET (Aspnet_compiler.exe)
Actualización: noviembre 2007
La herramienta de compilación de ASP.NET (Aspnet_compiler.exe) hace posible la compilación de una aplicación Web ASP.NET, en el propio lugar donde se encuentra o para implementarse en una ubicación de destino como un servidor de producción. La compilación en el mismo lugar donde se encuentra ayuda al rendimiento de la aplicación ya que los usuarios finales no sufren ningún retraso en la primera solicitud que se hace a la aplicación mientras se compila la aplicación en cuestión.
La compilación para implementación se puede llevar a cabo de una de las dos formas siguientes: una que consiste en quitar todos los archivos de código fuente (como archivos de marcado y archivos de código subyacente), o bien otra que retiene los archivos de marcado.
Nota
La herramienta de compilación de ASP.NET no está disponible en versiones de ASP.NET anteriores a la 2.0.
aspnet_compiler [-?]
[-m metabasePath | -v virtualPath [-p physicalPath]]
[[-u] [-f] [-d] [-fixednames] targetDir]
[-c]
[-errorstack]
[-nologo]
[[-keyfile file | -keycontainer container ] [-aptca] [-delaysign]]
Opciones
Opción |
Descripción |
---|---|
-m metabasePath |
Especifica la ruta completa de la metabase de IIS de la aplicación que se va a compilar. La metabase de IIS es un almacén de información de carácter jerárquico que se utiliza para configurar IIS. Por ejemplo, la ruta de acceso de la metabase al sitio Web de IIS predeterminado es LM/W3SVC/1/ROOT. Esta opción no se puede combinar con las opciones -v o -p. |
-v virtualPath |
Especifica la ruta de acceso virtual de la aplicación que se va a compilar. Si también se especifica -p, el valor del parámetro physicalPath acompañante se utiliza para ubicar la aplicación que se va a compilar. En caso contrario, se utiliza la metabase de IIS y la herramienta da por hecho que los archivos de código fuente se encuentran en el sitio Web predeterminado (especificado en el nodo de la metabase LM/W3SVC/1/ROOT). Esta opción no se puede combinar con la opción -m. |
-p physicalPath |
Especifica la ruta completa de acceso a la red o la ruta de acceso local al disco del directorio raíz que contiene la aplicación que se va a compilar. Si no se especifica -p, la metabase de IIS se utiliza para buscar el directorio. Esta opción se debe combinar con la opción -v y no se puede combinar con la opción -m. |
-u |
Especifica que Aspnet_compiler.exe debería crear una aplicación precompilada que permita llevar a cabo actualizaciones subsiguientes de contenido como páginas .aspx. Si se omite esta opción, la aplicación resultante sólo contendrá archivos compilados y no se podrá actualizar en el servidor de implementación. Sólo se podrá actualizar la aplicación cambiando los archivos de marcado de código fuente y volviendo a realizar una nueva compilación. Debe incluirse el parámetro targetDir. |
-f |
Especifica que la herramienta debería sobrescribir los archivos existentes en el directorio targetDir y sus subdirectorios. |
-d |
Reemplaza los valores de configuración definidos en los archivos de configuración de código fuente de la aplicación para obligar a que se incluya información de depuración en la aplicación compilada. En caso contrario, no se emite ningún resultado de depuración. No se puede utilizar la opción -d para la compilación en contexto; la compilación en contexto admite los valores de configuración de las opciones de depuración. |
targetDir |
Ruta de acceso a la red o la ruta de acceso del disco local al directorio raíz que contendrá la aplicación compilada. Si no se incluye el parámetro targetDir, la aplicación se compila en el lugar donde se encuentra. |
-c |
Especifica que se debería volver a generar por completo la aplicación que se va a compilar. Se vuelven a compilar componentes ya compilados. Si se omite esta opción, la herramienta genera sólo aquellas partes de la aplicación que se hayan modificado desde la última vez que se realizó la compilación. |
-errorstack |
Especifica que la herramienta debería incluir información del seguimiento de la pila si se produce un error a la hora de compilar la aplicación. |
-keyfile file |
Especifica que AssemblyKeyFileAttribute, que indica el nombre del archivo que contiene el par de claves pública y privada utilizado para generar un nombre seguro, debería aplicarse al ensamblado compilado. Esta opción debe combinarse con la opción -aptca. Si el atributo ya se aplica al ensamblado en archivos de código, Aspnet_compiler.exe produce una excepción. |
-keycontainer container |
Especifica que AssemblyKeyNameAttribute, que indica el nombre del archivo que contiene el par de claves pública y privada utilizado para generar un nombre seguro, debería aplicarse al ensamblado compilado. Esta opción debe combinarse con la opción -aptca. Si el atributo ya se aplica al ensamblado en archivos de código, Aspnet_compiler.exe produce una excepción. |
-aptca |
Especifica que AllowPartiallyTrustedCallersAttribute, que permite el acceso parcial de los llamadores de plena confianza a un ensamblado, se debería aplicar al ensamblado de nombre seguro que Aspnet_compiler.exe genera. Esta opción no se puede combinar con la opción -keyfile o -keycontainer. Si el atributo ya se aplica al ensamblado en archivos de código, Aspnet_compiler.exe produce una excepción. |
-delaysign |
Especifica que AssemblyDelaySignAttribute, que indica que un ensamblado sólo se debería firmar con el símbolo (token) de clave pública y no con el par de claves pública/privada, se debería aplicar al ensamblado generado. Esta opción no se puede combinar con la opción -keyfile o -keycontainer. Si el atributo ya se aplica al ensamblado en archivos de código, Aspnet_compiler.exe produce una excepción. Al utilizar la opción -delaysign, el código generado por Aspnet_compilier.exe puede ejecutarse antes de que se firme el código. Debe asegurarse de que el código no es vulnerable a usuarios malintencionados antes de que se complete la firma. |
-fixednames |
Especifica que se debería generar un ensamblado para cada página de la aplicación. En el nombre de cada ensamblado figura la ruta de acceso virtual de la página original a menos que el nombre exceda el límite del sistema operativo para los nombres de archivo, en cuyo caso se genera código hash y se utiliza para el nombre del ensamblado. No se puede utilizar la opción -fixednames para la compilación en contexto; la compilación en contexto admite los valores de configuración del modo de procesamiento por lotes de la compilación. |
-nologo |
Suprime el mensaje de copyright. |
-? |
Muestra la sintaxis de comandos y opciones para la herramienta. |
Comentarios
La herramienta de compilación de ASP.NET se puede utilizar de dos formas generales: para una compilación en contexto y para una complicación para implementación, donde se especifica un directorio de destino de resultados. En las secciones siguientes se describen los siguientes escenarios.
Compilar una aplicación en contexto
La herramienta de compilación de ASP.NET puede compilar una aplicación en contexto, es decir, reproduce el comportamiento de realización de varias solicitudes en la aplicación, así como el hecho de que se produzca una compilación de forma regular. Los usuarios de un sitio precompilado no experimentarán ningún retraso que se haya producido durante la compilación de la página en primera solicitud.
Si está utilizando una cuenta suplantada, tenga presente que tanto la cuenta como la cuenta de usuario de inicio de sesión deben tener acceso de escritura en el destino para que la compilación previa tenga éxito.
Al precompilar un sitio en contexto, se aplican los siguientes elementos:
El sitio retiene sus archivos y la estructura de directorios.
Es necesario contar con compiladores para todos los lenguajes de programación utilizados por el sitio en el servidor.
Si se produce algún error en algún archivo durante el proceso de compilación, también aparecerá un error que afectará a todo el sitio relacionado con la compilación.
También será posible recompilar una aplicación en contexto después de agregar nuevos archivos de código fuente a él. La herramienta sólo compila los archivos nuevos o que se hayan modificado a menos que se incluya la opción -c.
Nota
La compilación de una aplicación que contiene una aplicación anidada no compila la aplicación anidada. La aplicación anidada se debe compilar por separado.
Nota
Cuando se compila una aplicación web que incluye páginas maestras, se puede producir un error de compilación si compila la aplicación como un sitio actualizable y se produce un conflicto de nombres. El conflicto se puede producir si el nombre de la página maestra coincide con el nombre del espacio de nombres de una página de contenido que deriva de la página maestra. (El atributo Inherits establece la relación de herencia de la directiva @ Page). Para evitar este problema, puede cambiar el nombre de la clase de la página maestra o cambiar el nombre del espacio de nombres, o bien puede compilar la aplicación como no actualizable.
Compilar una aplicación para implementación
Es posible compilar una aplicación para su implementación (compilación en una ubicación de destino) especificando el parámetro targetDir. targetDir puede constituir la ubicación final de la aplicación Web o la aplicación compilada se puede implementar de forma más completa.
La utilización de la opción -u compila la aplicación de tal forma que se pueden realizar cambios en determinados archivos de la aplicación compilada sin necesidad de recompilarla. Aspnet_compiler.exe realiza una distinción entre tipos de archivos estáticos y dinámicos y los controla de manera diferente al crear la aplicación resultante.
Los tipos de archivos estáticos son aquellos que no tienen asociado un compilador o un proveedor de generación, por ejemplo los archivos cuyos nombres contienen las extensiones .css, .gif, .htm, .html, .jpg o .js, entre otros. Estos archivos simplemente se copian en la ubicación de destino, con sus lugares relativos en la estructura de directorios que se ha conservado.
Los tipos de archivos dinámicos son aquellos que tienen un compilador asociado o que generan un proveedor, incluyendo archivos con extensiones de nombre de archivo específicas de ASP.NET tales como .asax, .ascx, .ashx, .aspx, .browser y .master, entre otros. La herramienta de compilación de ASP.NET genera ensamblados a partir de estos archivos. Si se omite la opción -u, la herramienta también crea archivos con la extensión de nombre de archivo .COMPILED que asigna los archivos de código fuente a sus ensamblados. Para asegurar que se vaya a conservar la estructura de directorios del origen de la aplicación, la herramienta genera archivos de marcador en las correspondientes ubicaciones de la aplicación de destino.
Se debe utilizar la opción -u para indicar que se puede modificar el contenido de la aplicación compilada. De lo contrario, se omiten las modificaciones subsiguientes o producen errores en tiempo de ejecución.
En la siguiente tabla se describe cómo la herramienta de compilación de ASP.NET controla los diferentes tipos de archivo cuando la opción -u se encuentra incluida.
Tipo de archivo |
Acción del compilador |
---|---|
.aspx, ascx, .master |
Estos archivos se dividen en lenguaje de marcado y código fuente, lo que incluye los archivos de código subyacente. El código fuente se compila en ensamblados, con nombres que se derivan de un algoritmo hash, y los ensamblados se colocan en el directorio Bin. Cualquier código en línea, es decir, código agregado en los elementos <script runat="server">, se incluye con marcado y no compilado. Se crean nuevos archivos con el mismo nombre que los archivos de código fuente con el fin de contener el marcado y se colocan en los directorios de salida correspondientes. |
.ashx, .asmx |
Estos archivos no se compilan y se desplazan a los directorios de salida tal y como son y sin compilar. Si desea tener compilado el código del controlador, coloque el código en los archivos de código fuente en el directorio App_Code. |
.cs, .vb, .jsl, .cpp (sin incluir archivos de código subyacente para los tipos de archivos mostrados anteriormente) |
Estos archivos se compilan e incluyen como un recurso en ensamblados que hacen referencia a ellos. Los archivos de código fuente no se copian en el directorio de salida. Si no se hace referencia a un archivo de código, éste no se compila. |
Tipos de archivos personalizados |
Estos archivos no se compilan. Estos archivos se copian en los correspondientes directorios de salida. |
Archivos de código fuente en el subdirectorio de App_Code |
Estos archivos se compilan en ensamblados y se colocan en el directorio Bin.
Nota:
Los tipos de archivos estáticos del directorio App_Code no se copian en los directorios de salida.
|
Archivos .resx y .resource en el subdirectorio de App_GlobalResources |
Estos archivos se compilan en ensamblados y se colocan en el directorio Bin. No se ha creado ningún subdirectorio App_GlobalResources bajo el directorio de salida principal y no se ha copiado ningún archivo .resx o .resources del directorio de origen en los directorios de salida.
Nota:
Los archivos de recursos del subdirectorio App_GlobalResources se compilan en ensamblados antes de que el código del subdirectorio App_Code se compile. No se admite la modificación de archivos de recursos después de la compilación.
|
Archivos .resx y .resource del subdirectorio App_LocalResources |
Estos archivos no se compilan ni se copian en los directorios de salida correspondientes. |
Archivos .skin del subdirectorio App_Themes |
Los archivos .skin y los archivos de tema de estáticos no se compilan y se copian en los directorios de salida correspondientes. |
.browser Web.config Tipos de archivos estáticos Los ensamblados ya están presentes en el directorio Bin |
Estos archivos se copian de igual manera que en los directorios de salida. |
En la siguiente tabla se describe cómo la herramienta de compilación de ASP.NET controla los diferentes tipos de archivo cuando se omite la opción -u.
Nota
No se proporciona ninguna advertencia para evitar que el usuario modifique el código fuente de una aplicación compilada.
Tipo de archivo |
Acción del compilador |
---|---|
.aspx, .asmx, .ashx, .master |
Estos archivos aparecen divididos en marcado y código fuente, lo que incluye tanto archivos de código subyacente como cualquier código agregado a elementos <script runat="server">. El código fuente se compila en los ensamblados, con nombres que se derivan de un algoritmo hash. Los ensamblados resultantes se colocan en el directorio Bin. Cualquier código en línea, es decir, código agregado entre <% y %>, se incluye con marcado y no compilado. El compilador crea nuevos archivos para contener el marcado con el mismo nombre que los archivos de código fuente. Los archivos resultantes se colocan en el directorio Bin. El compilador también crea archivos con el mismo nombre que los archivos de código fuente pero con la extensión .COMPILED que contiene información de asignación. Los archivos .COMPILED se colocan en los directorios de salida que corresponden a la ubicación original de los archivos de código fuente. |
.ascx |
Estos archivos se dividen en marcado y código fuente. El código fuente se compila en ensamblados y se coloca en el directorio Bin, con nombres que se derivan de un algoritmo hash. No se genera ningún archivo de marcado. |
.cs, .vb, .jsl, .cpp (sin incluir archivos de código subyacente para los tipos de archivos mostrados anteriormente) |
El código fuente al que hacen referencia los ensamblados generados a partir de archivos .ascx, .ashx, o .aspx se compila en ensamblados y se encuentra en el directorio Bin. No se copia ningún archivo de código fuente. |
Tipos de archivos personalizados |
Estos archivos se compilan como archivos dinámicos. Dependiendo del tipo de archivo en el que se basen, el compilador puede colocar los archivos de asignación en los directorios de salida. |
Archivos en el subdirectorio de App_Code |
Los archivos de código fuente de este subdirectorio se compilan en ensamblados y sitúan en el directorio Bin.
Nota:
Los tipos de archivos estáticos del directorio App_Code no se copian en los directorios de salida.
|
Archivos en el subdirectorio App_GlobalResources |
Estos archivos se compilan en ensamblados y se colocan en el directorio Bin. No se crea ningún subdirectorio App_GlobalResources bajo el directorio de salida principal. Si el archivo de configuración especifica appliesTo="All", los archivos.resx y .resources se copian en los directorios de salida. No se copian si un BuildProvider hace referencia a ellos. |
Archivos .resx y .resource del subdirectorio App_LocalResources |
Estos archivos se compilan en ensamblados con nombres únicos y se colocan en el directorio Bin. No se copia ningún archivo .resx o .resource en los directorios de salida. |
Archivos .skin del subdirectorio App_Themes |
Los temas se compilan en ensamblados y se colocan en el directorio Bin. Los archivos de código auxiliar se crean para archivos .skin y se colocan en el directorio de salida correspondiente. Los archivos estáticos (como .css) se copian en los directorios de salida. |
.browser Web.config Tipos de archivos estáticos Los ensamblados ya están presentes en el directorio Bin |
Estos archivos se copian de igual manera que en el directorio de salida. |
Nombres de ensamblado fijos
Algunos escenarios, como la implementación de una aplicación Web utilizando MSI Windows Installer, requieren la utilización de nombres de archivos coherentes y de contenido, así como estructuras de directorios igualmente coherentes para identificar ensamblados y valores de configuración para actualizaciones. En algunos casos, se puede utilizar la opción -fixednames para especificar que la herramienta de compilación de ASP.NET deberían compilar un ensamblado para cada archivo de código fuente en lugar de utilizar los lugares donde varias páginas se compilan en ensamblados. Esto puede conducir a un gran número de ensamblados, por lo que si existe algún tipo de relación con escalabilidad debería utilizarse esta opción con precaución.
Compilación de nombre seguro
Las opciones -aptca, -delaysign, -keycontainer y -keyfile se proporcionan para que el usuario pueda utilizar Aspnet_compiler.exe para crear ensamblados de nombre seguro sin utilizar Herramienta de nombre seguro (Sn.exe) por separado. Estas opciones corresponden, respectivamente, a AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute y AssemblyKeyFileAttribute. Debido a que cada opción aplica el correspondiente atributo al ensamblado compilado y debido a que los atributos aparecen marcados con un AttributeUsageAttribute cuya propiedad AllowMultiple está establecida en false, la utilización de estas claves en el código fuente que ya ha sido marcado hace que se produzca un error de compilación.
Clases de ASP.NET asociadas
Varias clases en el espacio de nombres System.Web.Compilation hacen posible que su código pueda obtener acceso o invocar a Aspnet_compiler.exe fuera del entorno de IIS. La clase ClientBuildManager proporciona el método PrecompileApplication para compilar una aplicación. La clase ClientBuildManager también funciona con la clase ClientBuildManagerParameter, que permite especificar PrecompilationFlags el cual corresponde a las opciones utilizadas por esta herramienta y, de igual forma, para especificar claves de nombre seguro.
Ejemplos
El siguiente comando compila la aplicación WebApplication1 en contexto:
Aspnet_compiler -v /WebApplication1
El siguiente comando compila directamente la aplicación WebApplication1 y la herramienta agrega información del seguimiento de la pila si debe informar acerca de errores.
Aspnet_compiler -v /WebApplication1 -errorstack
El siguiente comando compila la aplicación WebApplication1 para su implementación, utilizando la ruta de acceso física del directorio. También agrega dos atributos a los ensamblados de salida. Utiliza la opción -keyfile para agregarla a un atributo AssemblyKeyFileAttribute que especifica que el archivo Key.sn contiene información sobre el par de claves pública y privada que la herramienta debería utilizar para proporcionar nombres seguros a los ensamblados generados. El comando también utiliza la opción -aptca para agregar un atributo AllowPartiallyTrustedCallersAttribute a los ensamblados generados. La aplicación Web compilada se crea en el directorio c:\applicationTarget.
Aspnet_compiler -v /WebApplication1 -p "c:\Documents and Settings\Default\My Documents\MyWebApplications\WebApplication1" -keyfile "c:\Documents and Settings\Default\My Documents\Key.sn" -aptca c:\applicationTarget
El comando siguiente compila el servicio WebService2 en la ruta de acceso de la metabase predeterminada, sobrescribiendo el directorio de destino SampleWebService con la aplicación compilada.
Aspnet_compiler -m /LM/W3SVC/1/ROOT/WebService2 -f c:\InetPub\wwwroot\SampleWebService
Vea también
Conceptos
Retrasar la firma de un ensamblado
Referencia
AllowPartiallyTrustedCallersAttribute
Herramientas de .NET Framework