.net - net - visual studio code
Divide el viejo código.NET en la clase parcial del diseñador (7)
Estoy trabajando en una base de código .NET más antigua que tiene todo el código de diseñador metido en el mismo archivo de código que mi código (clases pre - parciales).
¿Existe un mecanismo para decirle a Visual Studio 2008 que vuelva y refactorice el código del diseñador en un archivo de clase parcial X.designer.cs?
¿Es el archivo de solución del código .NET anterior 2003/2005? Intenté hacer lo que estás diciendo utilizando el asistente de conversión en VS2008. Durante la conversión, debe intentar analizar sus páginas .aspx y crear archivos de diseñador para ellas. Lo que el generador de diseñadores tiene un problema es que estas páginas antiguas .aspx están tan malformadas que simplemente no se pueden analizar.
Llegué a la conclusión de que tal vez tratar de convertir un antiguo código ASP.NET hasta 2.0 o 3.5 sea, en sí mismo, un gran proyecto. Todavía no he encontrado una manera efectiva de factorizar el código de diseñador del código antiguo existente, por lo que también estaré encantado de encontrar una solución aquí.
He tenido buena suerte con la aplicación autónoma gratuita DeCodEx (Designer Code Extractor).
DeCodeEx carga en un proyecto de Visual Studio, detecta qué archivos son WinForms y divide automáticamente el código del diseñador del archivo original .cs
o .vb
en un nuevo archivo .designer.cs
o .designer.vb
.
Para proyectos grandes, es mucho más fácil que tratar de dividir manualmente los archivos.
Lo que acabo de hacer fue completamente de forma manual:
- Crea tu forma .Designer.cs
- Agréguelo a Visual Studio (haga clic con el botón derecho, agregue el elemento existente)
- Agregue la palabra clave parcial a su clase existente.
- Agregue el espacio de nombres exactamente como en el cs original al yourform .designer.cs
- Dentro de este espacio de nombres, agregue la definición de la clase (no se olvide de incluir la palabra clave parcial ). No agregue herencia y / o interfaces a esta clase parcial en Designer.cs.
- Una vez hecho esto, estará listo para cortar y pegar lo siguiente:
a) Elimine el objeto de componentes que pueda tener en su Winform original. Si la aplicación fue .NET 1.1, tendrá algo como esto:
/// <summary>
/// Required designer variable.
/// </summary>
private Container components = null;
b) Agregue un nuevo objeto de componentes en la clase Designer:
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
c) A menos que tenga un método de eliminación específico , este es el estándar. Si no tiene ningún tipo de herencia, creo que esa base. El objetivo puede eliminarse de forma segura:
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose( bool disposing )
{
if ( disposing && ( components != null ) )
{
components.Dispose();
}
base.Dispose( disposing );
}
d) Copie todo el código dentro del código generado #region Windows Form Designer a la nueva clase Designer.cs.
e) También debe copiar todas las variables miembro para todos sus objetos (etiquetas, texboxes, etc. que use en el diseñador).
Eso debería ser todo. Guarde y compile.
Recuerde que una clase parcial se puede dividir entre un número N de archivos, pero todos deben compartir el MISMO espacio de nombres.
¿Vale la pena? Bueno, en mi caso, tenía un montón de formas de ganar enormes con toneladas de código y controles. VS2008 se arrastró cada vez que cambié de / a diseñador. Esto hizo que la vista del código fuera más receptiva. Recuerdo que tuve que esperar 3-5 segundos antes de tener un código receptivo. Ahora lleva 1 ...
ACTUALIZAR:
Hacer los pasos 1 a 5 y mover un existente o agregar un nuevo control no moverá automáticamente nada a la clase designer.cs. Las cosas nuevas van a la nueva clase de Diseñador, pero las cosas viejas permanecen donde estaba, desafortunadamente.
También debe cerrar y volver a abrir el archivo (después de haber agregado / creado la clase parcial) para que VS dibuje correctamente en el Diseñador; no hacerlo puede dar como resultado que se dibujen formularios vacíos.
Me interesaría ver qué sucede si abre uno de estos formularios en el diseñador y lo guarda; o modificarlo y guardarlo; o haga uno de los anteriores después de crear un archivo .designer.cs con solo un shell vacío de la clase parcial. No me sorprendería encontrar al diseñador colocando al menos los cambios en el archivo .designer.cs.
Para fusionar el archivo yourForm.designer.cs a yourForm.cs, siga los pasos a continuación
Edite .csproj
en el bloc de notas y agregue el siguiente código
<Compile Include="yourForm.designer.cs">
<DependentUpon>yourForm.cs</DependentUpon>
</Compile>
Si alguien todavía está buscando un método automatizado para hacer esto, hay una macro VS here que hará la mayor parte por usted.
Una muy buena herramienta.
Si se trata de WinForms, tengo un script de PowerShell que edita el proyecto y agrega .designer.cs para todos los formularios / controles.
Sin embargo, todavía tendría que mover el código del diseñador a mano (o mejorar el guión). Solo tenía algunas formas y no valía la pena agregarlas.
Puedo buscarlo y publicarlo si eso ayuda.