AYUDA .NET

CSLA .NET (Cómo funciona para desarrolladores)

Publicado en 13 de agosto, 2024
Compartir:

Introducción

Lograr un equilibrio entre la lógica empresarial, el acceso a los datos y el diseño de la interfaz de usuario es crucial en el actual escenario de desarrollo de aplicaciones corporativas. La arquitectura lógica escalable basada en componentes, o CSLA (Component-based Scalable Logical Architecture), es un marco de desarrollo de software muy popular que ofrece una arquitectura estable y escalable para crear aplicaciones empresariales gestionables, con el objetivo de agilizar este proceso. Las bases de código pueden hacerse más manejables y comprobables utilizandoCSLA .NET para ayudar a los desarrolladores a separar claramente la lógica empresarial del acceso a los datos.

Los desarrolladores pueden utilizarBiblioteca de generación de PDF .NET de IronPDF para crear documentos PDF de alta calidad y el enfoque estructurado de CSLA para la gestión de la lógica empresarial mediante la combinación de CSLA .NET con IronPDF. Las aplicaciones que necesitan una amplia presentación de datos, preparación automatizada de documentos y generación dinámica de informes pueden beneficiarse especialmente de esta combinación. Las empresas pueden producir documentos perfeccionados directamente desde sus aplicaciones .NET, garantizar la coherencia de los datos y agilizar las operaciones con esta interfaz.

En este tutorial examinaremos la integración exitosa de CSLA con IronPDF, destacando las características útiles y ofreciendo un proceso detallado para poner en práctica esta integración en una aplicación C#. Esta integración puede aumentar enormemente las posibilidades de su aplicación, haciéndola más eficaz y versátil, independientemente de si está creando aplicaciones comerciales sencillas o intrincadas soluciones empresariales.

¿Qué es CSLA .NET?

Rocky Lhotka creó el código abiertoCSLA .NET (Arquitectura lógica escalable basada en componentes) para ayudar a los programadores a crear aplicaciones comerciales fiables, ampliables y manejables para la plataforma .NET. Promueve una clara división de responsabilidades haciendo hincapié en el uso de objetos de negocio que contienen toda la lógica empresarial, los criterios de validación y las comprobaciones de autorización. El mantenimiento y la escalabilidad mejoran gracias a la capacidad de CSLA para soportar el diseño en n niveles y la lógica abstracta de acceso a datos, lo que permite desplegar la lógica empresarial en varias capas.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 1

Además de admitir objetos móviles, también puede utilizarse con diversas tecnologías de interfaz de usuario, como Windows Forms, WPF, ASP.NET MVC y Blazor, para permitir un cliente enriquecido y un procesamiento eficaz de los formularios web en el lado del servidor. El desarrollo de aplicaciones empresariales ágiles, eficaces y coherentes se ve facilitado por esta flexibilidad, que garantiza la reutilización fiable de la lógica empresarial en varias capas de presentación.

Modelo de objetos de negocio

Garantiza que el motor de reglas de autorización, las reglas de negocio y las reglas de validación se apliquen uniformemente en toda la aplicación encapsulando la lógica de negocio dentro de los objetos de negocio.

Abstracción del acceso a los datos

Permite dividir la lógica de acceso a los datos de la lógica de negocio con un enfoque flexible, lo que mejora la capacidad de mantenimiento y simplifica el cambio entre las tecnologías de acceso a los datos y la capa de negocio, así como las pruebas.

Validación y autorización

Las reglas de negocio se implementan y aplican constantemente gracias a la funcionalidad integrada para establecer y aplicar comprobaciones de autorización y reglas de validación en los objetos de negocio, garantizando que no se incumplan las reglas.

Arquitectura en N niveles

Admite diseños de n niveles, que mejoran la escalabilidad y permiten crear aplicaciones distribuidas distribuyendo la lógica empresarial en varias capas o niveles(como el cliente, el servidor y la base de datos).

Soporte de objetos móviles

Facilita la creación de objetos móviles que pueden desplazarse entre el cliente y el servidor, lo que admite situaciones como las aplicaciones cliente enriquecidas y el procesamiento eficaz del lado del servidor que requieren objetos empresariales en ambos extremos.

Independencia de la interfaz de usuario

Permite utilizar objetos empresariales con diversas tecnologías de interfaz de usuario, lo que facilita la reutilización del código y la coherencia entre varias capas de presentación. Estas tecnologías incluyen Windows Forms, WPF, ASP.NET MVC y Blazor.

Programación asíncrona

Permite la construcción de apps responsivas que llevan a cabo tareas que consumen tiempo sin interferir con la interfaz de usuario al soportar modelos de programación asíncrona.

Reglas de negocio declarativas

Facilita la gestión de la lógica empresarial compleja al ofrecer medios declarativos para definir reglas que se aplican automáticamente.

Integración de mapeo relacional de objetos (ORM)

Permite que los objetos de negocio y la capa de acceso a datos se conecten sin problemas con ORM como Entity Framework.

Serialización y capacidades móviles

Permite la serialización de objetos empresariales para contextos móviles, lo que simplifica el desarrollo de aplicaciones que requieren la transmisión de datos a través de barreras de red.

Gestión de transacciones

Soporta procesos transaccionales, especialmente en sistemas distribuidos que mantienen aplicaciones, para garantizar la coherencia e integridad de los datos.

Gestión de eventos y vinculación de datos

Se proporciona un sólido soporte para el manejo de eventos y la vinculación de datos; esto es especialmente útil para las aplicaciones de interfaz de usuario que necesitan proporcionar notificaciones y actualizaciones en tiempo real.

Seguridad basada en funciones

Incluye funciones de seguridad basadas en funciones para limitar el acceso a propiedades y objetos empresariales, de modo que sólo los usuarios autorizados puedan realizar tareas específicas.

Localización y globalización

Permite el desarrollo de aplicaciones que pueden usarse en muchos contextos lingüísticos y culturales al apoyar la localización y la globalización.

Extensibilidad

Extremadamente flexible y reutilizable, lo que permite a los desarrolladores modificar y ampliar el marco para satisfacer necesidades empresariales concretas.

Creación y configuración de CSLA .NET

La configuración del proyecto, la instalación de los paquetes necesarios y la configuración del marco de trabajo son algunas de las etapas que intervienen en la creación y configuración de una aplicación CSLA .NET. Este es un tutorial completo para ayudarle a empezar con CSLA .NET:

Crear un nuevo proyecto de Visual Studio

Con Visual Studio, crear un proyecto de consola es muy sencillo. Siga estos sencillos pasos para iniciar una aplicación de consola en el entorno de Visual Studio:

Asegúrate de haber instalado Visual Studio en tu PC antes de utilizarlo.

Iniciar un nuevo proyecto

Seleccione Archivo, Proyecto y, a continuación, haga clic en el menú Nuevo.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 2

En la lista de referencias de plantillas de proyectos que aparece a continuación, seleccione "Aplicación de consola" o "Aplicación de consola"(.NET Core)".

Rellene la sección "Nombre" para dar un nombre a su proyecto.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 3

Decide dónde quieres guardar el proyecto.

Al hacer clic en "Crear" se abrirá el proyecto de la aplicación Consola.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 4

Instalar el paquete .NET de CSLA

A continuación se instalan los paquetes .NET NuGet de CSLA. Ejecute los siguientes comandos en la consola de NuGet Package Manager(Herramientas -> Gestor de paquetes NuGet -> Consola del Gestor de paquetes):

Install-Package CSLA
Install-Package CSLA-Server

Estos paquetes contienen componentes del lado del servidor, así como la funcionalidad esencial de CSLA.

Configure CSLA .NET en su proyecto

Para una aplicación de consola, inicialice la configuración CSLA.NET en su archivo Program.cs. Esto se haría en el archivo Startup.cs de una aplicación ASP.NET Core.

using System;
using Csla.Configuration;
namespace CslaDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize CSLA .NET
            var applicationContext = new ApplicationContext();
            // Use dependency injection if needed (for ASP.NET Core or other frameworks)
            var services = new ServiceCollection();
            services.AddCsla();
            var provider = services.BuildServiceProvider();
            applicationContext = provider.GetService<ApplicationContext>();
            Console.WriteLine("CSLA .NET is configured and ready to use!");
        }
    }
}
using System;
using Csla.Configuration;
namespace CslaDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize CSLA .NET
            var applicationContext = new ApplicationContext();
            // Use dependency injection if needed (for ASP.NET Core or other frameworks)
            var services = new ServiceCollection();
            services.AddCsla();
            var provider = services.BuildServiceProvider();
            applicationContext = provider.GetService<ApplicationContext>();
            Console.WriteLine("CSLA .NET is configured and ready to use!");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Crear un business object

Para capturar su lógica de negocio, cree un objeto de negocio básico. Vamos a crear una clase Persona para este ejemplo.

using Csla;
namespace CslaDemo
{
    [Serializable]
    public class Person : BusinessBase<Person>
    {
        public static readonly PropertyInfo<int> IdProperty = RegisterProperty<int>(c => c.Id);
        public int Id
        {
            get => GetProperty(IdProperty);
            set => SetProperty(IdProperty, value);
        }
        public static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(c => c.Name);
        public string Name
        {
            get => GetProperty(NameProperty);
            set => SetProperty(NameProperty, value);
        }
        protected override void AddBusinessRules()
        {
            // Add validation rules
            BusinessRules.AddRule(new Csla.Rules.CommonRules.Required(NameProperty));
        }
        // Data access methods
        [Fetch]
        private void DataPortal_Fetch(int id)
        {
            // Simulate data fetch
            Id = id;
            Name = "John Doe";
        }
        [Create]
        private void DataPortal_Create()
        {
            // Initialize default values
            Id = -1;
            Name = "New Person";
        }
    }
}
using Csla;
namespace CslaDemo
{
    [Serializable]
    public class Person : BusinessBase<Person>
    {
        public static readonly PropertyInfo<int> IdProperty = RegisterProperty<int>(c => c.Id);
        public int Id
        {
            get => GetProperty(IdProperty);
            set => SetProperty(IdProperty, value);
        }
        public static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(c => c.Name);
        public string Name
        {
            get => GetProperty(NameProperty);
            set => SetProperty(NameProperty, value);
        }
        protected override void AddBusinessRules()
        {
            // Add validation rules
            BusinessRules.AddRule(new Csla.Rules.CommonRules.Required(NameProperty));
        }
        // Data access methods
        [Fetch]
        private void DataPortal_Fetch(int id)
        {
            // Simulate data fetch
            Id = id;
            Name = "John Doe";
        }
        [Create]
        private void DataPortal_Create()
        {
            // Initialize default values
            Id = -1;
            Name = "New Person";
        }
    }
}
Imports Csla
Namespace CslaDemo
	<Serializable>
	Public Class Person
		Inherits BusinessBase(Of Person)

		Public Shared ReadOnly IdProperty As PropertyInfo(Of Integer) = RegisterProperty(Of Integer)(Function(c) c.Id)
		Public Property Id() As Integer
			Get
				Return GetProperty(IdProperty)
			End Get
			Set(ByVal value As Integer)
				SetProperty(IdProperty, value)
			End Set
		End Property
		Public Shared ReadOnly NameProperty As PropertyInfo(Of String) = RegisterProperty(Of String)(Function(c) c.Name)
		Public Property Name() As String
			Get
				Return GetProperty(NameProperty)
			End Get
			Set(ByVal value As String)
				SetProperty(NameProperty, value)
			End Set
		End Property
		Protected Overrides Sub AddBusinessRules()
			' Add validation rules
			BusinessRules.AddRule(New Csla.Rules.CommonRules.Required(NameProperty))
		End Sub
		' Data access methods
		<Fetch>
		Private Sub DataPortal_Fetch(ByVal id As Integer)
			' Simulate data fetch
			Me.Id = id
			Name = "John Doe"
		End Sub
		<Create>
		Private Sub DataPortal_Create()
			' Initialize default values
			Id = -1
			Name = "New Person"
		End Sub
	End Class
End Namespace
VB   C#

Utilizar el business object

Usemos ahora el objeto de negocio Persona del archivo Program.cs.

using System;
using Csla;
using Microsoft.Extensions.DependencyInjection;
namespace CslaDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize CSLA .NET
            var services = new ServiceCollection();
            services.AddCsla();
            var provider = services.BuildServiceProvider();
            var applicationContext = provider.GetService<ApplicationContext>();
            var db = provider.GetRequiredService<IDataPortal<Person>>();
            // Create a new person
            var newPerson =  db.Create();
            Console.WriteLine($"New Person: {newPerson.Name}");
            // Fetch an existing person
            var existingPerson = db.Fetch(1);
            Console.WriteLine($"Fetched Person: {existingPerson.Name}");
        }
    }
}
using System;
using Csla;
using Microsoft.Extensions.DependencyInjection;
namespace CslaDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Initialize CSLA .NET
            var services = new ServiceCollection();
            services.AddCsla();
            var provider = services.BuildServiceProvider();
            var applicationContext = provider.GetService<ApplicationContext>();
            var db = provider.GetRequiredService<IDataPortal<Person>>();
            // Create a new person
            var newPerson =  db.Create();
            Console.WriteLine($"New Person: {newPerson.Name}");
            // Fetch an existing person
            var existingPerson = db.Fetch(1);
            Console.WriteLine($"Fetched Person: {existingPerson.Name}");
        }
    }
}
Imports System
Imports Csla
Imports Microsoft.Extensions.DependencyInjection
Namespace CslaDemo
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			' Initialize CSLA .NET
			Dim services = New ServiceCollection()
			services.AddCsla()
			Dim provider = services.BuildServiceProvider()
			Dim applicationContext = provider.GetService(Of ApplicationContext)()
			Dim db = provider.GetRequiredService(Of IDataPortal(Of Person))()
			' Create a new person
			Dim newPerson = db.Create()
			Console.WriteLine($"New Person: {newPerson.Name}")
			' Fetch an existing person
			Dim existingPerson = db.Fetch(1)
			Console.WriteLine($"Fetched Person: {existingPerson.Name}")
		End Sub
	End Class
End Namespace
VB   C#

Mostrar cómo utilizar DataPortal para crear una nueva Persona y obtener una Persona existente en el método Main Establecer en el IDataPortal.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 5

Esta configuración proporciona los fundamentos básicos para utilizar CSLA .NET en una aplicación .NET. Si se requiere una lógica empresarial, un acceso a los datos y unos criterios de validación más sofisticados, puede ampliar esta estrategia.

Primeros pasos

Primero debe configurar su proyecto, utilizar CSLA para construir objetos de negocio e IronPDF para crear PDFs con el fin de empezar a utilizar CSLA e IronPDF en un proyecto C#. A continuación se detalla cómo conseguirlo.

¿Qué es IronPDF?

Los programas en C# pueden utilizarla biblioteca IronPDF para la generación de PDF para producir, leer y editar documentos PDF. Los desarrolladores pueden crear rápidamente PDF de alta calidad listos para imprimir a partir de contenido HTML, CSS y JavaScript con la ayuda de esta aplicación. Entre las funciones cruciales se encuentran la capacidad de crear encabezados y pies de página, dividir y combinar PDF, poner marcas de agua a los documentos y convertir HTML a PDF. IronPDF es útil para diversas aplicaciones porque es compatible tanto con .NET Framework como con .NET Core.

Los PDF son fáciles de utilizar por los desarrolladores en sus aplicaciones, ya que cuentan con una amplia documentación y son fáciles de integrar. IronPDF maneja diseños y formatos complejos con facilidad, garantizando que los PDF de salida reflejen fielmente el texto HTML original.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 6

Características de IronPDF

**Generación de PDF a partir de HTML

Convierte HTML, CSS y JavaScript a PDF. Es compatible con estándares web modernos como media queries y responsive design, lo que lo hace práctico para utilizar HTML y CSS para decorar dinámicamente documentos PDF, facturas e informes.

**Edición de PDF

Es posible añadir texto, imágenes y otros materiales a PDF ya existentes. Extrae texto e imágenes de archivos PDF. Fusionar varios PDF en un único archivo. Dividir archivos PDF en varios documentos distintos. Añade encabezados, pies de página, anotaciones y marcas de agua.

**Conversión de PDF

Convierte archivos de Word, Excel e imágenes, entre otros tipos de archivos, al formato PDF. Convertir PDF en imagen(PNG, JPEG, etc.).

**Rendimiento y fiabilidad

En contextos industriales, el alto rendimiento y la fiabilidad son atributos de diseño deseables. Maneja con éxito grandes conjuntos de documentos.

Instalar IronPDF

Instale el paquete IronPDF para obtener las herramientas que necesita para trabajar con PDF en proyectos .NET.

Install-Package IronPDF

Inicializar CSLA .NET y generar un PDF con IronPDF

Utilice el objeto de negocio Persona que creamos anteriormente e inicialice el CSLA .NET Framework en su archivo Program.cs. A continuación, utilice IronPDF para crear un PDF.

using Csla;
using IronPdf;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Text;
namespace CslaIronPdfDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Setup dependency injection
            var services = new ServiceCollection();
            services.AddCsla();
            var provider = services.BuildServiceProvider();
            var applicationContext = provider.GetRequiredService<ApplicationContext>();
            var db = provider.GetRequiredService<IDataPortal<Person>>();
            // Create a new person
            var newPerson = db.Create();
            // Display the new person
            Console.WriteLine($"New Person: {newPerson.Name}");
            // Fetch an existing person
            var existingPerson = db.Fetch(1);
            // Display the fetched person
            Console.WriteLine($"Fetched Person: {existingPerson.Name}");
            // Generate PDF
            var htmlContent = new StringBuilder();
            htmlContent.Append("<h1>Person Details</h1>");
            htmlContent.Append($"<p><strong>New Person:</strong> {newPerson.Name}</p>");
            htmlContent.Append($"<p><strong>Fetched Person:</strong> {existingPerson.Name}</p>");
            // Create PDF
            var Renderer = new HtmlToPdf();
            var pdfDocument = Renderer.RenderHtmlAsPdf(htmlContent.ToString());
            // Save PDF
            var outputPath = "PersonDetails.pdf";
            pdfDocument.SaveAs(outputPath);
            Console.WriteLine($"PDF generated and saved to {outputPath}");
        }
    }
}
using Csla;
using IronPdf;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Text;
namespace CslaIronPdfDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Setup dependency injection
            var services = new ServiceCollection();
            services.AddCsla();
            var provider = services.BuildServiceProvider();
            var applicationContext = provider.GetRequiredService<ApplicationContext>();
            var db = provider.GetRequiredService<IDataPortal<Person>>();
            // Create a new person
            var newPerson = db.Create();
            // Display the new person
            Console.WriteLine($"New Person: {newPerson.Name}");
            // Fetch an existing person
            var existingPerson = db.Fetch(1);
            // Display the fetched person
            Console.WriteLine($"Fetched Person: {existingPerson.Name}");
            // Generate PDF
            var htmlContent = new StringBuilder();
            htmlContent.Append("<h1>Person Details</h1>");
            htmlContent.Append($"<p><strong>New Person:</strong> {newPerson.Name}</p>");
            htmlContent.Append($"<p><strong>Fetched Person:</strong> {existingPerson.Name}</p>");
            // Create PDF
            var Renderer = new HtmlToPdf();
            var pdfDocument = Renderer.RenderHtmlAsPdf(htmlContent.ToString());
            // Save PDF
            var outputPath = "PersonDetails.pdf";
            pdfDocument.SaveAs(outputPath);
            Console.WriteLine($"PDF generated and saved to {outputPath}");
        }
    }
}
Imports Csla
Imports IronPdf
Imports Microsoft.Extensions.DependencyInjection
Imports System
Imports System.Text
Namespace CslaIronPdfDemo
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			' Setup dependency injection
			Dim services = New ServiceCollection()
			services.AddCsla()
			Dim provider = services.BuildServiceProvider()
			Dim applicationContext = provider.GetRequiredService(Of ApplicationContext)()
			Dim db = provider.GetRequiredService(Of IDataPortal(Of Person))()
			' Create a new person
			Dim newPerson = db.Create()
			' Display the new person
			Console.WriteLine($"New Person: {newPerson.Name}")
			' Fetch an existing person
			Dim existingPerson = db.Fetch(1)
			' Display the fetched person
			Console.WriteLine($"Fetched Person: {existingPerson.Name}")
			' Generate PDF
			Dim htmlContent = New StringBuilder()
			htmlContent.Append("<h1>Person Details</h1>")
			htmlContent.Append($"<p><strong>New Person:</strong> {newPerson.Name}</p>")
			htmlContent.Append($"<p><strong>Fetched Person:</strong> {existingPerson.Name}</p>")
			' Create PDF
			Dim Renderer = New HtmlToPdf()
			Dim pdfDocument = Renderer.RenderHtmlAsPdf(htmlContent.ToString())
			' Save PDF
			Dim outputPath = "PersonDetails.pdf"
			pdfDocument.SaveAs(outputPath)
			Console.WriteLine($"PDF generated and saved to {outputPath}")
		End Sub
	End Class
End Namespace
VB   C#

El ejemplo ofrecido muestra cómo crear, validar y generar PDFs a partir de objetos de negocio utilizando una aplicación de consola .NET 6 que combina CSLA.NET con IronPDF. La instalación de los paquetes IronPDF y CSLA.NET necesarios mediante NuGet es el primer paso para configurar el proyecto. BusinessBase de CSLA se utiliza para describir el hogar primario de su objeto de negocio, Persona.

Encapsula características como Nombre e ID e incluye reglas de negocio para validar estas propiedades. La implementación de métodos de fábrica y métodos de acceso a datos se encarga de la generación de objetos y la recuperación de datos. La inyección de dependencia se utiliza para inicializar el contexto de la aplicación CSLA en el archivo Program.cs. A continuación, el código muestra cómo utilizar las funciones DataPortal de CSLA para crear un nuevo objeto Persona y recuperar uno existente.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 7

Por último, utilizando la función HtmlToPdf de IronPDF, se crea información HTML que incluye los datos de la persona y se convierte en un archivoConversión de PDF a HTML, en el que se muestra un método útil para crear informes empresariales en formato PDF. Este ejemplo demuestra cómo la generación de documentos en una aplicación .NET puede integrarse perfectamente con la gestión de datos y la lógica empresarial.

CSLA .NET(Cómo funciona para los desarrolladores): Figura 8

Conclusión

En resumen, la integración de IronPDF y CSLA .NET en una aplicación C# demuestra lo bien que funcionan juntos para gestionar la lógica empresarial y producir documentos pulidos. CSLA .NET ofrece un marco sólido para gestionar el acceso a los datos, establecer y aplicar reglas empresariales y garantizar la coherencia de los objetos empresariales. Este marco mejora el mantenimiento del código y agiliza la intrincada lógica empresarial.

Además, IronPDF ofrece una interfaz fácil de usar para crear y modificar documentos PDF, lo que permite crear informes completos con formato directamente a partir de los datos de la aplicación. La combinación de estas tecnologías permite a los desarrolladores crear aplicaciones empresariales complejas que producen documentos de alta calidad al tiempo que cumplen los requisitos empresariales, optimizan los flujos de trabajo y aumentan los niveles de productividad.

Su conjunto de herramientas para el desarrollo .NET se completa conOpciones de licencia de IronPDF e IronSoftware que combinan los sistemas y la suite extremadamente versátiles de IronSoftware con su soporte básico para proporcionar más aplicaciones y funciones en línea, junto con un desarrollo más eficiente, por un precio inicial de 749 dólares.

Los desarrolladores pueden decidir más fácilmente qué modelo es la mejor práctica si las opciones de licencia son particulares del proyecto y fáciles de entender. Ahora, gracias a estas ventajas, los desarrolladores pueden gestionar una gran variedad de problemas de forma sencilla, eficaz y perfectamente conectada.

< ANTERIOR
Topshelf C# (Cómo funciona para desarrolladores)
SIGUIENTE >
Refit C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >