Pues eso… a pesar de los pesares, hay algo bueno al crear los proyectos para Visual C# desde Visual Studio que en Visual Basic (por aquello de que debemos estar protegidos de tocar donde no se debe, o eso supongo). Es algo muy simple, que introdujeron (creo) en Visual Studio 2005 y es lo de que el método Sub Main sea autogenerado por el Visual Studio y no te permita crear uno propio… o al menos eso me ha pasado con Visual Studio 2022 Version 17.2.0 Preview 1.0 y al final he tenido que crear el proyecto con C# para poder poner lo que me dé la gana en el método Main. En fin…
Y es que, aunque haya definido mi propio método Sub Main, el Visual Studio me daba error de compilación de que ya estaba definido (o estaba definido más de una vez), no recuerdo bien qué me dijo… pero corté por lo sano, descarté el proyecto de Visual Basic y lo creé con C# (para .NET 6.0 y Windows Desktop).
Ese proyecto solo se encarga de llamar a otro que es el principal y por tanto, lo que necesitaba hacer es poder llamar al formulario adecuado para que se iniciara ahí la aplicación (el que tengo definido en otro proyecto diferente al de inicio).
Esto es para poder tener proyectos de inicio diferentes para cada «cliente» que quiera usar mi aplicación. Y en esos proyectos asignar los parámetros personalizados de cada cliente. Todo esto último, solo para aclarar. 😉
Buscaré en la documentación si hay alguna forma de «pasar» de esta automatización (que, seguro que la hay, desde el propio Visual Studio, ya que creando el proyecto desde la línea de comandos con dotnet seguro que se puede). Y si la hay ya te lo contaré.
Nota:
Antes de publicar esto, he probado a crear un proyecto con dotnet:
He creado el directorio con el nombre del proyecto, he cambiado a ese directorio y he escrito esto en la línea de comandos:dotnet new winforms -lang VB -f net6.0
Y el proyecto se ha creado con el fichero Program.vb (con la definición de Sub Main) y un formulario Form1. Y ahora no dice nada el Visual Studio si lo cargo. Creo que el truco está en no crear los directorios ni asignaciones a My Project, etc.
Lo probaré desde Visual Studio a ver…
Nota 2:
Para solucionar esto en un proyecto creado desde Visual Studio.
He seguido estos pasos:
He comentado (también las puedes borrar) las secciones (cada una está dentro de<ItemGroup>
) :<Compile Update="My Project\Application.Designer.vb">
y<None Update="My Project\Application.myapp">
.
He comentado<MyType>WindowsForms</MyType>
en elItemGroup
principal y de paso he eliminado la carpetaMy Project
. Y el ficheroApplicationEvents.vb
.
Esto realmente es lo que da el problema de que haya dos Sub Main.
Y finalmente he creado un fichero Program.vb con el código «personalizado» para Sub Main.
En fin… complicaciones por intentar facilitar las cosas a los que preferimos Visual Basic.
Nota 3:
Aunque los proyectos de C# creados con Visual Studio también tienen código autogenerado… por ejemplo:ApplicationConfiguration.Initialize
.
Que lo que hace es lo que siempre (o casi) han hecho los métodos Main de las aplicaciones de Windows Forms:public static void Initialize()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetHighDpiMode(HighDpiMode.SystemAware);
}
Y ya está… tenía que decirlo y lo he dicho 😉
Nos vemos.
Guillermo