La compilación de un proyecto de ASP.NET en Visual Studio da como resultado el mensaje de error del compilador CS0433

Versión original del producto: Visual C++
Número de KB original: 2028526

Resumen

Al compilar un proyecto de ASP.NET mediante Microsoft Visual Studio, puede ver aleatoriamente un mensaje de error como el siguiente:

Mensaje de error del compilador: CS0433: El tipo "ASP.summary_common_controls_notes_ascx" existe en "c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msftx123.dll" y "c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msfty456.dll"

Descripción: error durante la compilación de un recurso necesario para atender esta solicitud. Revise los siguientes detalles de error específicos y modifique el código fuente correctamente.

Error de origen: Línea 100: </div>

Línea 101: <h3 class="entry">New Notes</h3>

Línea 102: <bni:details id="details" runat="server" />

Línea 103: <span class="RedZone">1450</span>

Línea 104: <p>Resumen.</P>

Archivo de origen: d:\http\post\publisher\default.aspx Line: 102

Los escenarios comunes en los que puede producirse este error se describen en las secciones siguientes.

Escenario 1: Dos ensamblados en la misma carpeta bin

Descripción: Una causa común de este error es cuando hay dos ensamblados en la misma carpeta bin de aplicación web que contienen dos definiciones de clase, pero que tienen el mismo nombre de clase. Esto puede ocurrir si más de un Default.aspx se compiló en un único ensamblado. Normalmente, esto ocurre cuando la página Maestra (Default.master) y la página ASPX predeterminada (Default.aspx) declaran una clase _Default.

Solución: Cambie el nombre de clase de la página maestra (de _Default en la mayoría de los casos) y recompile el proyecto. Es importante resolver cualquier conflicto de nomenclatura entre clases.

Escenario 2: Varias referencias al mismo ensamblado

Descripción: Las rutas de acceso de referencia de Visual Studio se usan para especificar la ruta de acceso de carpeta para las referencias de ensamblado usadas por el proyecto. Es posible que la ruta de acceso contenga un ensamblado y que el ensamblado contenga el mismo nombre de clase. Puede haber varias referencias agregadas al mismo ensamblado (posiblemente diferentes en la versión o el nombre) lo que provoca un conflicto de nomenclatura.

Solución: Quite la referencia de versión anterior. En Visual Studio, haga clic con el botón derecho en el sitio web y compruebe referencias en las propiedades.

Escenario 3: Cambios en los permisos predeterminados

Descripción: De forma predeterminada, cuando se compila una aplicación web ASP.NET, el código compilado se coloca en la carpeta Archivos de ASP.NET temporales. De forma predeterminada, los permisos de acceso se conceden a la cuenta de usuario local de ASP.NET. La cuenta tiene los permisos de alta confianza necesarios para acceder al código compilado. Es posible que haya algunos cambios en los permisos predeterminados y que los cambios puedan provocar conflictos de control de versiones. Otra posibilidad es que el software antivirus pueda bloquear un ensamblado involuntariamente.

Solución: Borre la carpeta Temporal de archivos ASP.NET de todo el contenido.

Escenario 4: Compilación por lotes

Descripción: Cuando el atributo batch del archivo web.config se establece en True, elimina el retraso causado por la compilación necesaria al acceder a un archivo por primera vez. ASP.NET compila previamente todos los archivos no compilados en modo por lotes. Este modo por lotes provoca retrasos la primera vez que se compilan los archivos.

Establecer el atributo batch en False puede exponer los errores de compilación enmascarados que existen en la aplicación, pero no se notifican. Lo que es más importante, indica a ASP.NET que compile dinámicamente archivos .aspx/.ascx individuales en ensamblados independientes, en lugar de en un único ensamblado.

Solución: Establezca batch=False en la <sección de compilación> de web.config. Esta acción debe considerarse una solución temporal. Batch=False en la sección de compilación tiene un impacto significativo en el rendimiento en los tiempos de compilación de la aplicación en Visual Studio.

Escenario 5: La edición de web.config reinicia AppDomain

Descripción: La modificación del archivo web.config de una aplicación ASP.NET o el cambio de un archivo en la carpeta bin (como agregar, eliminar o cambiar el nombre), hace que AppDomain se reinicie. Cuando se producen estas acciones, se pierde todo el estado de sesión y los elementos almacenados en caché se quitan de la memoria caché a medida que se reinicia el sitio web. El problema puede deberse a un estado incoherente en la aplicación web.

Solución: Desencadene un reinicio de AppDomain tocando (editando) el archivo web.config.

Escenario 6: El código fuente modificado aún no se ha vuelto a compilar dinámicamente

Descripción: Puede almacenar código fuente en la carpeta App_Code y el código se compilará automáticamente en tiempo de ejecución. El ensamblado resultante es accesible para cualquier otro código de la aplicación web. Por lo tanto, la carpeta App_Code funciona de forma muy similar a la carpeta Bin, salvo que puede almacenar código fuente en ella en lugar de código compilado. La clase se volverá a compilar cuando haya un cambio en el archivo de origen. Si hay conflictos debido a un ensamblado obsoleto, forzar una recompilación puede resolver el problema.

Solución: Toque un archivo en las carpetas Bin o App_Code para desencadenar una recompilación completa.