Desde que comencé a trabajar con la comunidad para portar aplicaciones de escritorio desde .NET Framework a .NET Core, noté que hay "dos campos": los representantes de uno quieren una lista muy simple y breve de instrucciones para portar sus aplicaciones a .NET Core , mientras que los representantes de otro prefieren un enfoque más basado en principios con mucha información inicial. En lugar de escribir un documento como la "navaja suiza", publicaremos dos publicaciones de blog, una para cada "campamento":
- Esta publicación es un caso simple . Se centra en instrucciones simples y pequeñas aplicaciones y considera la forma más fácil de portar una aplicación a .NET Core.
- Más tarde publicaremos otra publicación para casos más complejos . Se centrará en aplicaciones no triviales, como una aplicación WPF con dependencias en WCF y paquetes de UI de terceros.
Si prefiere ver un video en lugar de leerlo, aquí hay un video donde hago todo lo que se describe a continuación.
Paso 0: requisitos previos
Para transferir aplicaciones de escritorio a Core, necesitará
.NET Core 3 y Visual Studio 2019.
Paso 1 - Inicie el analizador de portabilidad
Antes de portar, debe verificar qué tan compatible es su aplicación con .NET Core. Para hacer esto, descargue y ejecute
.NET Portability Analyzer .
- En la primera pestaña, Resumen de portabilidad, si todos los valores en la columna .NET Core son 100% (todo está resaltado en verde), su código es totalmente compatible y puede ir al Paso 2.
- Si tiene valores inferiores al 100%, primero mire todos los ensamblajes que no forman parte de su aplicación. Para ellos, debe verificar si sus autores proporcionan versiones para .NET Core o .NET Standard.
- Ahora mire la otra parte de los ensamblajes que proviene de su código. Si no se especifican ensamblajes en el Informe de portabilidad, vaya al Paso 2. Una vez que haga esto, abra la pestaña Detalles, filtre la tabla haciendo clic en la columna Ensamblaje y concéntrese solo en los relacionados con su aplicación. Examine la refactorización de la lista y el código para dejar de usar la API o reemplace usando la API con alternativas de .NET Core.

Paso 2: migrar .csproj al estilo SDK
En el
Explorador de soluciones, haga clic con el botón derecho en su proyecto (¡no es una solución!). ¿Ves
Editar archivo de proyecto ? Si es así, ya está utilizando el archivo de proyecto de estilo SDK, por lo que debe ir al
Paso 3 . Si no, haga lo siguiente:
- Compruebe en el Explorador de soluciones si el proyecto contiene el paquete packages.config . Si no es así, no se requiere ninguna acción, pero si es así, haga clic con el botón derecho en packages.config y seleccione Migrar paquetes.config a PackageReference . Luego haga clic en Aceptar .
- Abra el archivo del proyecto haciendo clic derecho en el proyecto y seleccionando Descargar proyecto . Luego haga clic derecho en el proyecto y seleccione Editar <nombre de su proyecto> .csproj .
- Copie el contenido del archivo del proyecto en algún lugar, por ejemplo, en el Bloc de notas, para que luego pueda buscarlo.
- Elimine todo del archivo de proyecto abierto en Visual Studio (sé que esto suena agresivo, pero solo agregaremos el contenido necesario de la copia que acabamos de hacer en unos pocos pasos). En lugar de solo texto eliminado, pegue el siguiente código.
Para una aplicación en WinForms:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
Para una aplicación WPF:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
- Encuentra Notepad PackageReference . Si no has encontrado nada, sigue adelante. Si encuentra un PackageReference , copie todo el ItemGroup que contiene el PackageReference en el archivo del proyecto abierto en Visual Studio, directamente debajo de las líneas insertadas en el paso anterior. Haga esto para cada elemento PackageReference que haya encontrado. El bloque copiado debería verse así:
<ItemGroup> <PackageReference Include="NUnit"> <Version>3.11.0</Version> </PackageReference> </ItemGroup>
- Ahora haga lo mismo que anteriormente para ProjectReference . Si no has encontrado nada, sigue adelante. Si encuentra elementos de ProjectReference , se verán así:
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj"> <Project>{7bce0d50-17fe-4fda-b6b7-e7960aed8ac2}</Project> <Name>WindowsFormsApp1</Name> </ProjectReference> </ItemGroup>
- Puede eliminar líneas con las propiedades Proyecto y Nombre , ya que no son necesarias en el nuevo estilo del archivo del proyecto. Entonces, para cada ProjectReference que haya encontrado (si corresponde), copie solo el ItemGroup y ProjectReference .
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup>
- Guárdalo todo. Cierre el archivo .csproj en Visual Studio. Haga clic con el botón derecho en su proyecto en el Explorador de soluciones y seleccione Volver a cargar proyecto . Reconstruya y asegúrese de que no haya errores.
¡Buenas noticias, acabas de actualizar tu archivo de proyecto a un nuevo estilo SDK! El proyecto todavía está dirigido a .NET Framework, pero ahora puede reconfigurarlo a .NET Core.
Paso 3 - Retarget en .NET Core
Abra el archivo del proyecto haciendo doble clic en el
Explorador de soluciones . Busque la propiedad
TargetFramework y cambie el valor a
netcoreapp3.0 . Su archivo de proyecto ahora debería verse así:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ... </PropertyGroup> ... </Project>
Construye y ejecuta tu proyecto.
¡Felicitaciones, lo migró a .NET Core 3!Corrección de errores
Si encuentra errores como
The type or namespace <some name> could not be found
o
The name <some name> does not exist in the current context
y si su informe de portabilidad se muestra en verde, debe saber que son fáciles de solucionar simplemente agregando el paquete NuGet con la biblioteca adecuada. Si no puede encontrar el paquete NuGet con la biblioteca que falta, intente ponerse en contacto con
Microsoft.Windows.Compatibility . Este paquete agrega ~ 21K .NET API desde .NET Framework.
Trabajar con diseñadores
Aunque la interfaz de usuario de la aplicación se puede editar usando código, los desarrolladores generalmente prefieren usar constructores visuales. Con .NET Core, tuvimos que cambiar la arquitectura del trabajo de los diseñadores con proyectos .NET Core:
- WPF Designer ya está en modo de vista previa, y estamos trabajando para agregarle funciones adicionales.
- WinForms Designer para .NET Core estará disponible más adelante, por lo tanto, por ahora, puede usar WinForms Designer para .NET Framework como solución alternativa.
Aquí le mostramos cómo usar el constructor WinForms para .NET Framework:
- Copie el archivo .csproj (por ejemplo, MyProject.csproj ), asígnele un nombre diferente, por ejemplo, MyProject.NetFramework.csproj, y colóquelo junto al archivo de proyecto existente.
- Asegúrese de que su proyecto esté cerrado en Visual Studio, abra un nuevo proyecto MyProject.NetFramework.csproj .
En el Explorador de soluciones, haga clic con el botón derecho en su proyecto y seleccione Propiedades . En la pestaña Aplicación (debería abrirse de manera predeterminada), configure el Nombre del ensamblaje y el Espacio de nombres predeterminado con los mismos valores que en el proyecto original (elimine “.NetFramework” de los nombres).
Guarde esta solución junto a su solución existente.
- Abra un nuevo archivo de proyecto y cambie TargetFramework a net472 .
- Ahora que necesita usar el constructor WinForms, descargue su proyecto desde MyProject.NetFramework.csproj y puede comenzar a trabajar con el constructor .NET Framework. Cuando haya terminado, cierre y abra su proyecto con el archivo de proyecto .NET Core.
- Esto es solo una solución hasta que el constructor de WinForms para .NET Core esté listo.
¿Por qué cambiar a .NET Core?
Mire un video donde Scott Hunter y yo hablamos de todas las actualizaciones más recientes en .NET Core 3.
Migración a .NET Core 3.0 .