asp.net - tutorial - ¿Cómo obliga a Visual Studio a regenerar los archivos.designer para los archivos aspx/ascx?
web forms c# tutorial (30)
- Reemplace su etiqueta personalizada con un nombre de etiqueta no válido. Guardalo
- restaurar el nombre de la etiqueta no válida de nuevo al nombre de la etiqueta personalizada. Guardalo Luego se le pedirá que compruebe los archivos * .designer.cs (o que modifique de forma silenciosa el designer.cs) y que produzca la variable correcta del control de etiqueta personalizada.
A veces, cuando edito la página o controlo, los archivos .designer dejan de actualizarse con los nuevos controles que estoy poniendo en la página. No estoy seguro de qué está causando esto, pero me pregunto si hay alguna forma de obligar a Visual Studio a regenerar el archivo .designer. Estoy usando Visual Studio 2008
EDIT: Lo siento, debería haber notado que ya he intentado:
- Cierre y reapertura de todos los archivos y Visual Studio.
- Hacer un cambio a un control runat = "server" en la página
- Eliminar y volver a agregar la directiva de la página
(Lo siguiente viene de la experiencia con VS2005.)
Si edita una página ASPX mientras realiza la depuración, el código no se actualiza con las nuevas clases. Por lo tanto, debe detener la depuración, editar de forma trivial la página ASPX (como agregar un botón o algo), luego hacer clic en Vista Diseño y luego eliminar el botón. Entonces, los archivos de su diseñador deben actualizarse.
Si tiene un problema diferente con el VS2008, entonces no puedo ayudarle.
A menudo encontré que copiar / pegar me causó este comportamiento . La mayoría de los casos se pueden resolver editando el ID de un control de servidor (solo agregue un carácter, luego elimínelo).
También recuerde que el control dentro de cosas como los Repetidores no son visibles en el archivo del diseñador.
Y sí, hay casos en los que necesitas hacer la magia de eliminar el archivo enumerada anteriormente, pero la solución de cambio de nombre funcionará la mayor parte del tiempo.
Aquí está mi experiencia. Seleccione la carpeta del sitio web, haga clic con el botón derecho en el Explorador de soluciones, seleccione Convertir en aplicación web para todo el archivo aspx que se generará un archivo de diseñador.
Sameer
Bueno, encontré una solución que funciona, aunque realmente no me gusta. Tuve que eliminar el archivo .designer.cs y luego volver a crear un archivo vacío con el mismo nombre. Cuando regresé y guardé el archivo aspx de nuevo, el archivo del diseñador se volvió a generar.
¡Astuto!
Convertir a aplicación web no funcionó para mí.
La eliminación de designer.cs y el pegado de un designer.cs en blanco tampoco funcionaron.
Pero sí esto funcionó:
- Seleccionar todo (Default.aspx)
- Cortar
- Guardar Default.aspx
- Pegar
- Guardar Default.aspx
Hecho. Nuevo designer.cs generado. :)
Cuando esté en la vista de diseño, haga clic con el botón derecho en la pantalla y presione actualizar.
Dentro de Visual Studio:
1) Eliminar su archivo aspx.designer.cs
2) Haga clic con el botón derecho en su archivo aspx y seleccione "Convertir a aplicación web". Esto debería agregar aspx.designer.cs de forma actualizada.
Si recibe un error diciendo:
"Falló la generación del archivo del diseñador: el método u operación no está implementado".
Intente cerrar Visual Studio y luego vuelva a abrir su proyecto y realice el paso número dos nuevamente
Elimine el archivo designer.cs y luego haga clic derecho en el archivo .aspx y elija "Convertir a aplicación web". Si hay un problema con sus declaraciones de control, como una etiqueta que no está bien formada, recibirá un mensaje de error y tendrá que corregir la etiqueta mal formada antes de que Visual Studio pueda volver a generar su archivo de diseñador.
En mi caso, en este punto, descubrí que el problema era que había declarado un control de botón que no estaba dentro de una etiqueta de formulario con un atributo runat = "server".
Este es un error en el IDE; Lo he visto desde VS 2003. Aunque la solución es simple.
Guarda tus archivos. Salga completamente del IDE (asegúrese de que el proceso se detenga, administrador de tareas)
Vuelva a abrir la solución, ensucie el marcado, guarde. Fijo.
Esto también puede suceder si actualiza el espacio de nombres y no actualiza el espacio de nombres en el archivo del diseñador. Solución: actualizar el espacio de nombres en el archivo del diseñador también.
Existe otra posibilidad: puede tener un error en su archivo .aspx que no permita que Visual Studio regenere el diseñador.
Si cambia a la Vista de diseño, mostrará que el control no se puede representar. Arreglar el control (en mi caso era una cita adicional en las propiedades) y recompilar debería regenerar el diseñador.
He encontrado el mismo problema durante años, trabajando en Visual Studio 2008. Y he probado todas las "soluciones" en y en docenas de blogs, como estoy seguro de que todos ustedes lo han hecho. Y a veces funcionan y otras no, como estoy seguro de que todos ustedes se han encontrado. Y aparentemente sigue siendo un problema en VS2010 y VS2012.
Así que finalmente, hace un par de meses, decidí que ya era suficiente, y durante unas pocas semanas construí una herramienta llamada "Rediseñador" que genera archivos .designer. Es de código abierto bajo la licencia BSD , con el código fuente disponible en SourceForge: de uso gratuito, de robo gratuito, de hacer cualquier cosa que desee. Y hace lo que Visual Studio no puede hacer tan a menudo, que es generar archivos .designer de forma rápida y confiable.
Es una herramienta de línea de comandos independiente que analiza los archivos .aspx y .ascx, realiza toda la magia de reflexión necesaria y escupe los archivos .designer correctos. Hace todo el análisis y la reflexión para evitar confiar en el código existente, que todos sabemos muy bien que está roto. Está escrito en C # contra .NET 3.5, pero se esfuerza por evitar usar incluso System.Web para cualquier otra cosa que no sean declaraciones de tipo, y no usa ni se basa en Visual Studio en absoluto .
El rediseñador puede generar nuevos archivos .designer; y ofrece una opción --verbose para que cuando las cosas salgan mal, recibas mejores mensajes de error que "Excepción de tipo System.Exception fue lanzada". Y hay una opción --verify que puede usarse para decirle cuándo se rompen sus archivos .designer existentes: controles faltantes, declaraciones de propiedad erróneas, ilegibles por Visual Studio, o simplemente borked.
Lo hemos estado usando en mi lugar de trabajo para sacarlo de los atascos durante la mayor parte del mes pasado, y aunque Redesigner aún es una versión beta, está avanzando lo suficiente como para que valga la pena compartir su existencia con el público. Pronto tengo la intención de crear un complemento de Visual Studio para que pueda simplemente hacer clic con el botón derecho para verificar o regenerar los archivos del diseñador de la manera que siempre deseó. Pero mientras tanto, el uso de la línea de comandos es bastante fácil y le ahorrará muchos dolores de cabeza.
De todos modos, ve a descargar una copia de Redesigner ahora y deja de sacar tu cabello . No siempre lo necesitarás, pero cuando lo hagas, ¡te alegrarás de tenerlo!
He encontrado una manera de resolver este problema sin cambiar ningún código ni ejecutar comandos como "Convertir a aplicación web", ¡y también es simple!
Lo que encontré fue que reiniciar Visual Studio a menudo resuelve el problema, pero a veces no es así. En esos casos, si cierra Visual Studio y luego elimina todo el contenido en el directorio "obj" del proyecto web antes de volver a abrirlo, siempre me ha funcionado.
(cuando se inicia de nuevo, simplemente agrega un espacio y lo elimina de nuevo y luego presiona guardar para que el archivo del diseñador se regenere correctamente)
La única forma que conozco es eliminar el archivo del diseñador y hacer una conversión a la aplicación web. Sin embargo, cuando haces esto, generalmente aparece el error, en cuanto a por qué no se auto-regenó en primer lugar, por lo general es una referencia de control que no está declarada en el encabezado de la página.
La mayoría de las soluciones aquí no funcionan si está ejecutando Visual Studio 2013 y posiblemente 2012. Microsoft probablemente introdujo algunas optimizaciones para hacer que el IDE sea más ágil, por lo tanto, han reducido la cantidad de casos que activan el generador de código. Los siguientes escenarios que solían funcionar ya no funcionan:
- Elimine el archivo aspx o ascx: ya no se verifica este caso
- Corte todo el contenido y vuelva a pegar en el archivo aspx o ascx: ya no funciona, no hay cambios en las referencias
- Convertir a aplicación web - Opción ya no disponible
- Cambio de contenido arbitrario en el archivo aspx / ascx: ya no funciona (ver 2).
La solución es sorprendentemente simple, pero es un poco engorroso. Para activar el generador de código, cambie algo que requiera que se genere el designer.aspx.cs. Cambiar el contenido que no afecta al código, como un estilo CSS o agregar texto, no activará el generador de código. Debes cambiar un control referenciado. Aquí está cómo hacerlo:
En el ascx o aspx cambia el ID del control.
<asp:HyperLink ID="MyLink" runat="server" NavigateUrl="~/Default.aspx" Text="Home" />
a
<asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />
Vaya a ascx.cs o aspx.cs y asegúrese de cambiar el nombre de todas las referencias a "MyLink" por "theLINK" también. Guarda y construye y deberías estar listo para salir.
Otra cosa que funcionó fue ...
- Eliminar manualmente y luego crear un archivo de diseñador en el sistema de archivos.
- Editar archivo de proyecto .
- Añadir código para incluir diseñador
Ej .:<Compile Include="<Path>/FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>
- Proyecto de recarga
- Abra como archivo (c / p) x en el modo de diseño / vista y guárdelo.
- Revise el archivo del diseñador. El código estará allí.
Recientemente vi que estaba teniendo el mismo problema. Visual Studio 2010 se negaba a actualizar el archivo del diseñador.
Resulta que, VS no modifica el archivo del diseñador para una página que usa CodeFile (corrido de páginas) en lugar de CodeBehind (DLL). Esto es cierto sin importar cuántas veces cierre VS, vuelva a cargar el proyecto, vuelva a crear el (los) control (es) o modifique un archivo. Nada pediría a VS que regenere al diseñador. Es como si no creara el archivo de diseñador para las páginas de CodeFile pero requiere que esté allí.
Lo cambié a CodeBehind y guardé la página. El archivo del diseñador se actualizó inmediatamente. Luego lo cambié de nuevo y todo seguía siendo dorado. Este comportamiento parece ser nuevo con VS 2010 / .NET 4.0, ya que VS 2008 por defecto no sufrió esto.
Es esta parte:
<%@ Page Language="vb" AutoEventWireup="false" CodeFile="YourPage.aspx.vb" Inherits="YourPageClass" %>
Cambie CodeFile a CodeBehind, guarde y luego revertir.
Si abre el archivo .aspx y cambia entre la vista de diseño y la vista html y vuelve, le pedirá a VS que verifique los controles y agregue los que faltan al archivo del diseñador.
En VS2013-15 hay un comando Convertir a aplicación web en el menú Proyecto . Antes de VS2013, esta opción estaba disponible en el menú contextual del botón derecho para archivos as (c / p) x. Cuando haya terminado, debería ver que ahora tiene un archivo * .Designer.cs disponible y sus controles dentro del HTML de diseño estarán disponibles para su control.
PD: Esto no debe hacerse en modo de depuración, ya que no todo se "recompila" cuando se realiza la depuración.
Algunas personas también han reportado éxito al eliminar el archivo .designer.cs y luego recrear un archivo vacío con el mismo nombre.
Si eres como yo y agregas viejos archivos .ASPX a un proyecto más reciente. Probablemente olvidará algunos de los controles utilizados en la página.
Si es así, primero, si hay varios archivos que está instalando; Arregle uno a la vez primero.
Cuando compilas, corrige los errores generados. Probablemente serán los mismos errores en todos los archivos.
A continuación, si tiene archivos de diseñador, elimine todos los archivos de diseñador insertados. A continuación, asegúrese de que no haya ningún otro error al compilar, aparte de los archivos del diseñador.
Finalmente, haga clic derecho en su proyecto web y haga clic en Convertir en aplicación web. Esto insertará los archivos de diseñador que necesita.
Estos son los mejores pasos para solucionar los problemas.
Si está utilizando VS2013 o posterior, asegúrese de que el código al que se hace referencia con el atributo "CodeBehind" no "CodeFile", siga los pasos a continuación
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
- crear una página de diseñador vacía (o borrarla si ya existe "yourControl.ascx.designer.cs")
- en el ascx (o aspx) copie todo el código, elimínelo y luego guárdelo. re-pasado de nuevo, luego guardar.
- el archivo del diseñador se debe rellenar ahora.
Solo para agregar a la larga lista de respuestas aquí: acabo de encontrar este problema en VS2010 (SP1) con un archivo .aspx. Intenté agregar y eliminar controles ASP estándar (lo cual ha funcionado en el pasado) pero al final, tuve que eliminar una de las líneas runat = server de un control existente (y guardar) para forzar la regeneración del archivo del diseñador.
Tuve dos problemas ... AJAXControlkit desactualizado: eliminé la dll antigua, eliminé los controles antiguos de la caja de herramientas, descargué la nueva versión, cargué la caja de herramientas y arrastré y solté nuevos controles en la página (vea http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Studio_.NET_2005/Q_24591597.html )
También tenía errores ortográficos en mi control de etiqueta (había usado ''clase'' en lugar de ''cssclass'').
Ejército de reserva
Tuve este problema y, para mí, tenía un espacio en uno de mis valores de ID para uno de mis controles. Saqué el espacio y el archivo del diseñador se regeneró.
Una cosa que nadie ha mencionado es visitar la página . Hice que mi archivo de diseñador dejara de regenerarse porque estaba incluyendo un control de usuario que no existía (por varias razones), y ninguna de las cosas sugeridas aquí funcionó. Por el motivo que sea, no obtuve ningún error en Visual Studio, aparte del que se quejaba del hecho de que mis controles del lado del cliente no existían porque no se estaban regenerando, por supuesto.
Tomó realmente visitar la página para que ASP.Net me dijera el error.
Yo uso el siguiente método que funciona cada vez:
- Seleccione todo el código en frente (marcado html, etc.) en el editor del archivo aspx / ascx.
- Cortar.
- Salvar.
- Pegar.
- Salvar.
Recompilar
en explorador de soluciones, haga clic derecho y seleccione convertir a aplicación web. Se volverán a generar todos los archivos del diseñador.
TL; DR;
Edite el atributo @Page
directiva @Page
la página ASPX y @Page
Guardar. Su archivo de diseñador debe ser regenerado.
Asegúrese de que Inherits
= <espacio de nombres>. <class_name> y CodeBehind
= <class_name> .aspx.cs
Estaba tratando de hacer esto en un proyecto de Sharepoint 2010, utilizando VS 2010 y TFS , y ninguna de las soluciones anteriores funcionó para mí. Principalmente, la opción "Convertir a aplicación web" falta en el menú del botón derecho del archivo .ASPX cuando se usa TFS en VS 2010.
Esta respuesta ayudó finalmente . Mi clase se veía así:
namespace MyProjects.Finance.Pages
{
public partial class FinanceSubmission : WebPartPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
// more code
}
}
Y mi directiva @Page
era (saltos de línea aquí para mayor claridad):
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="FinanceSubmission.aspx.cs"
Inherits="MyProjects.Finance.Pages.FinanceSubmission"
MasterPageFile="~masterurl/default.master" %>
Primero cambié las Inherits
a MyProjects.Finance.Pages , presioné Save, luego lo cambié nuevamente a MyProjects.Finance.Pages.FinanceSubmission y presioné Save de nuevo. Y Wallah! La página del diseñador fue regenerada!
Espero que esto ayude a alguien usando TFS!
- Seleccione todo en el archivo del diseñador y elimine todo lo que haya en el archivo, dejándolo en blanco y luego guarde
- Seleccione todo en el archivo ASPX / ASCX y córtelo todo y luego vuelva a pegarlo.
- El archivo del diseñador debería haber regenerado el código.