¿Qué es .NET? Introducción e información general
.NET es una plataforma para desarrolladores gratuita, multiplataforma y de código abierto diseñada para compilar muchos tipos de aplicaciones diferentes. .NET se basa en un entorno de ejecución de alto rendimiento que muchas aplicaciones a gran escala usan en producción.
Aplicaciones en la nube
- Aplicaciones nativas de la nube
- Aplicaciones de consola
- Funciones sin servidor en la nube
- Aplicaciones web, API web y microservicios
Aplicaciones cliente multiplataforma
Aplicaciones de Windows
Otros tipos de aplicación
Características
Las características de .NET permiten a los desarrolladores escribir código confiable y eficaz de forma productiva.
- Código asincrónico
- Atributos
- Reflexión
- Analizadores de código
- Delegados y expresiones lambda
- Eventos
- Excepciones
- Recolección de elementos no utilizados
- Tipos genéricos
- LINQ (Language Integrated Query).
- Programación en paralelo en .NET
- Inferencia de tipos: C#, F#, Visual Basic.
- Sistema de tipos
- Código no seguro
Uso de .NET
Las aplicaciones y bibliotecas de .NET se compilan a partir del código fuente y un archivo de proyecto, mediante la CLI de NET o un entorno de desarrollo integrado (IDE) como Visual Studio.
El ejemplo siguiente es una aplicación .NET mínima:
Archivo del proyecto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
</Project>
Código fuente:
Console.WriteLine("Hello, World!");
La aplicación se puede compilar y ejecutar con la CLI de .NET:
dotnet run
Hello, World!
Distribuciones binarias
- SDK de .NET: conjunto de herramientas, bibliotecas y entornos de ejecución para desarrollo, compilación y prueba de aplicaciones.
- Entornos de ejecución de .NET: conjunto de entornos de ejecución y bibliotecas para ejecutar aplicaciones.
Puede descargar .NET desde:
Gratuito y de código abierto
.NET es gratuito, de código abierto y es un proyecto de .NET Foundation. Microsoft y la comunidad de GitHub mantienen .NET en varios repositorios.
El código fuente y los archivos binarios de .NET tienen licencia del MIT. Se aplican licencias adicionales en Windows para distribuciones binarias.
Soporte técnico
Microsoft admite .NET en sistemas operativos Android, Apple, Linux y Windows. Se puede usar en arquitecturas ARM64, x64 y x86. También se admite en entornos emulados, como macOS Rosetta 2.
Todos los años, en noviembre, se lanzan nuevas versiones de .NET. Las versiones de .NET de años impares son versiones de soporte técnico a largo plazo (LTS) y se admiten durante tres años. Las versiones de años pares son versiones de soporte técnico estándar (STS) y se admiten durante 18 meses. El nivel de calidad, las directivas de cambios importantes y todos los demás aspectos de las versiones son iguales. Para más información, consulte Versiones y soporte técnico.
El equipo de .NET de Microsoft trabaja en colaboración con otras organizaciones para distribuir y admitir .NET de varias maneras.
Red Hat admite .NET en Red Hat Enterprise Linux (RHEL).
Samsung admite .NET en las plataformas Tizen.
Tiempo de ejecución
Common Language Runtime (CLR) es la base de todas las aplicaciones .NET. Las características fundamentales del entorno de ejecución son:
- Recolección de elementos no utilizados.
- Seguridad de memoria y seguridad de tipos.
- Compatibilidad de alto nivel con lenguajes de programación.
- Diseño multiplataforma.
.NET se conoce a veces como entorno de ejecución de "código administrado". Se dice que es administrado principalmente porque usa un recolector de elementos no utilizados para la administración de la memoria y porque exige la seguridad de tipos y memoria. La CLR virtualiza (o abstrae) una variedad de conceptos de hardware y sistema operativo, como memoria, subprocesos y excepciones.
Desde sus principios, la CLR se diseñó como un entorno de ejecución multiplataforma. Se ha migrado a varios sistemas operativos y arquitecturas. Normalmente, no es necesario volver a compilar el código .NET multiplataforma para ejecutarlo en nuevos entornos. En su lugar, solo tiene que instalar un entorno de ejecución diferente para ejecutar la aplicación.
El entorno de ejecución expone varios servicios de diagnóstico y API para depuradores, volcados y herramientas de seguimiento, y observabilidad. La implementación de observabilidad se basa principalmente en OpenTelemetry, lo que permite la supervisión flexible de aplicaciones y la ingeniería de confiabilidad de sitios (SRE).
El entorno de ejecución ofrece funcionalidad de interoperabilidad de estilo C de bajo nivel, mediante una combinación de P/Invoke, tipos de valor y la posibilidad de convertir (blit) valores entre el límite de código nativo y administrado.
Idiomas
El entorno de ejecución está diseñado para admitir varios lenguajes de programación. Microsoft admite los lenguajes C#, F# y Visual Basic, que están diseñados en colaboración con la comunidad.
C# es un lenguaje de programación simple, moderno, orientado a objetos y con seguridad de tipos. Tiene sus raíces en la familia de lenguajes C, y los programadores de C, C++, Java y JavaScript se familiarizarán con él inmediatamente.
F# es un lenguaje de programación interoperable para escribir código conciso, sólido y eficaz. La programación en F# está orientada a datos, donde el código implica transformar datos con funciones.
Visual Basic usa una sintaxis más detallada que está más cercana al lenguaje humano normal. Puede ser un lenguaje más fácil de aprender para las personas que no están familiarizados con la programación.
Compilación
Las aplicaciones .NET (que se escriben en un lenguaje de alto nivel, como C#) se compilan en un lenguaje intermedio (IL). IL es un formato de código compacto que se puede admitir en cualquier sistema operativo o arquitectura. La mayoría de las aplicaciones .NET usan API que se admiten en varios entornos, lo que requiere que solo se ejecute el entorno de ejecución de .NET.
IL debe compilarse en código nativo para ejecutarse en una CPU, por ejemplo ARM64 o x64. .NET admite modelos de compilación Ahead-Of-Time (AOT) y Just-In-Time (JIT).
- En Android, macOS y Linux, la compilación JIT es la predeterminada y AOT es opcional (por ejemplo, con ReadyToRun).
- En iOS, AOT es obligatorio (excepto cuando se ejecuta en el simulador).
- En entornos de WebAssembly (Wasm), AOT es obligatorio.
La ventaja de JIT es que se puede compilar una aplicación (sin modificar) de acuerdo con las instrucciones de CPU y las convenciones de llamada en un entorno determinado, según el sistema operativo y el hardware subyacentes. También se puede compilar código en niveles más altos o más bajos de calidad para permitir un mejor rendimiento del inicio y de la capacidad de proceso de estado estable.
La ventaja de AOT es que proporciona el mejor inicio de la aplicación y puede (en algunos casos) dar lugar a implementaciones más pequeñas. El principal inconveniente es que los archivos binarios deben compilarse para cada destino de implementación distinto (igual que cualquier otro código nativo). El código AOT no es compatible con algunos patrones de reflexión.
Bibliotecas en tiempo de ejecución
.NET tiene un amplio conjunto estándar de bibliotecas de clases. Estas bibliotecas proporcionan implementaciones para muchos tipos de propósito general y específicos de la carga de trabajo, y funcionalidad de la utilidad.
Estos son algunos ejemplos de los tipos definidos en las bibliotecas en tiempo de ejecución de .NET:
- Cada tipo de .NET se deriva del tipo System.Object.
- Tipos de valor primitivos, como System.Boolean y System.Int32.
- Colecciones, como System.Collections.Generic.List<T> y System.Collections.Generic.Dictionary<TKey,TValue>.
- Tipos de datos, como System.Data.DataSet y System.Data.DataTable.
- Tipos de utilidad de red, como System.Net.Http.HttpClient.
- Tipos de utilidad de E/S de archivos y secuencias, como System.IO.FileStream y System.IO.TextWriter.
- Tipos de utilidad de serialización, como System.Text.Json.JsonSerializer y System.Xml.Serialization.XmlSerializer.
- Tipos de alto rendimiento, como System.Span<T>, System.Numerics.Vector y Canalizaciones.
Para obtener más información, vea Introducción a las bibliotecas en tiempo de ejecución.
Administrador de paquetes de NuGet
NuGet es el administrador de paquetes para .NET. Permite a los desarrolladores compartir archivos binarios compilados entre sí. NuGet.org ofrece muchos paquetes populares de la comunidad.
Herramientas
El SDK de .NET es un conjunto de bibliotecas y herramientas para desarrollar y ejecutar aplicaciones .NET. Incluye el motor de compilación de MSBuild, el compilador de Roslyn (C# y Visual Basic) y el compilador de F#. La mayoría de los comandos se ejecutan mediante el comando dotnet
. Las herramientas de la CLI se pueden usar para el desarrollo local y la integración continua.
La familia de IDE de Visual Studio ofrece una excelente compatibilidad con .NET y los lenguajes C#, F# y Visual Basic.
GitHub Codespaces y las características de seguridad de GitHub admiten .NET.
Cuaderno
.NET Interactive es un grupo de API y herramientas de la CLI que permiten a los usuarios crear experiencias interactivas en la web, markdown y cuadernos.
Para obtener más información, vea los siguientes recursos:
- Tutorial de .NET en el explorador
- Uso de cuadernos de .NET con Jupyter en el equipo
- Documentación de .NET Interactive
CI/CD
MSBuild y la CLI de .NET se pueden usar con diversas herramientas y entornos de integración continua, como:
Para más información, consulte Uso del SDK de .NET en entornos de integración continua (CI).
Modelos de implementación
Las aplicaciones .NET se pueden publicar en dos modos diferentes:
- Las aplicaciones autónomas incluyen el entorno de ejecución de .NET y las bibliotecas dependientes. Pueden ser de un solo archivo o de varios archivos. Los usuarios de la aplicación pueden ejecutarla en un equipo que no tenga instalado el entorno de ejecución de .NET. Las aplicaciones autónomas siempre se dirigen a una única configuración de arquitectura y sistema operativo.
- Las aplicaciones dependientes del marco requieren una versión compatible del entorno de ejecución de .NET, que normalmente se instala globalmente. Las aplicaciones dependientes del marco se pueden publicar para una única configuración de arquitectura y sistema operativo o como "portables", que se dirigen a todas las configuraciones admitidas.
De forma predeterminada, las aplicaciones .NET se inician con un archivo ejecutable nativo. El archivo ejecutable es específico del sistema operativo y de la arquitectura. Las aplicaciones también se pueden iniciar con el comando dotnet
.
Las aplicaciones se pueden implementar en contenedores. Microsoft proporciona imágenes de contenedor para una variedad de entornos de destino.
Historial de .NET
En 2002, Microsoft publicó .NET Framework, una plataforma de desarrollo para la creación de aplicaciones Windows. En la actualidad, .NET Framework se encuentra en la versión 4.8 y Microsoft todavía la admite completamente.
En 2014, Microsoft presentó .NET Core como sucesor multiplataforma y de código abierto para .NET Framework. Esta nueva implementación de .NET mantiene el nombre .NET Core hasta la versión 3.1. La siguiente versión después de .NET Core 3.1 se denominaba .NET 5.
Todos los años se lanzan nuevas versiones de .NET, cada una con un número de versión principal. Estas versiones incluyen características nuevas significativas y a menudo habilitan nuevos escenarios.
Ecosistema .NET
Hay varias variantes de .NET, cada una de las cuales admite un tipo diferente de aplicación. La razón de las múltiples variantes es en parte histórica y en parte técnica.
Implementaciones de .NET (orden histórico):
- .NET Framework: proporciona acceso a las amplias funcionalidades de Windows y Windows Server. También se usa ampliamente en la informática en la nube basada en Windows. El lenguaje .NET original.
- Mono: una implementación multiplataforma de .NET Framework. La comunidad original y .NET de código abierto. Se usa para aplicaciones Android, iOS y Wasm.
- .NET (Core): una implementación multiplataforma y de código abierto de .NET, reformulada para la era de la nube sin dejar de ser significativamente compatible con .NET Framework. Se usa en aplicaciones de Linux, macOS y Windows.