Artículos con la etiqueta «.NET»
69 artículos con la etiqueta «.NET», del más reciente al más antiguo.
-
Proxy interno de la empresa y aplicaciones de Windows — cómo se resuelve el proxy en WinINET, WinHTTP y .NET
El navegador conecta, pero la app empresarial no atraviesa el proxy interno. La causa suele ser una discrepancia sobre qué configuración de proxy lee cada ap...
-
Buenas prácticas de multithreading en la práctica — Edición .NET: qué decidir antes de aumentar los hilos
Reglas de diseño en .NET/C# para evitar fallos y bloqueos intermitentes con hilos: usar Task en lugar de hilos propios, reducir el estado compartido, discipl...
-
Usar WMI/CIM desde C# y PowerShell ── Guía práctica de obtención de información de hardware, monitorización de procesos y consultas remotas
WMI/CIM es la solución estándar para leer el número de serie, monitorizar el disco y detectar procesos. Cmdlets CIM, migración desde Get-WmiObject, C# y tram...
-
Las profundidades de la E/S de Windows (parte 5) — Estructura interna de NTFS: comprender el sistema de archivos a partir de la MFT
Quinta entrega sobre la estructura interna de NTFS: la MFT, los flujos de datos, los enlaces físicos, los puntos de análisis y los dos diarios.
-
Las profundidades de la E/S de Windows (parte 4) — El administrador de caché: ¿cuándo llega su WriteFile al disco?
Cuarta entrega de la serie que explica con diagramas el administrador de caché de Windows: la caché implementada como asignación de archivos, la lectura anti...
-
Los entresijos de E/S de Windows (parte 3) — Puertos de finalización de E/S (IOCP) y el grupo de subprocesos de .NET: el sótano de async/await
Parte 3 de una serie que explica con diagramas el puerto de finalización de E/S (IOCP): la cola de finalización integrada con el control de subprocesos, el v...
-
¿Hasta cuándo se puede usar MSMQ? — La decisión de migración de una cola legacy que «ni siquiera está en desuso»
MSMQ no figura en la lista oficial de funciones en desuso, pero System.Messaging solo existe en .NET Framework y bloquea la migración a .NET. Resumimos los c...
-
Las profundidades de la E/S de Windows (Parte 2) ── E/S síncrona y E/S asíncrona: el verdadero significado de OVERLAPPED
Segunda entrega de la serie que explica con diagramas la E/S síncrona y la E/S asíncrona (E/S superpuesta) de Windows: el significado de FILE_FLAG_OVERLAPPED...
-
Las profundidades de la E/S de Windows (parte 1) — Toda lectura y escritura se convierte en un IRP: panorama general del sistema de E/S
Primera entrega de la serie que explica desde la base el sistema de E/S de Windows: el espacio de nombres del Administrador de objetos, los objetos driver, d...
-
Cómo invocar COM y .NET desde PowerShell en la práctica ── ampliar de un salto el alcance de sus scripts
Cómo invocar clases .NET desde PowerShell, integrar C# y la API Win32 con Add-Type, operar COM, gestionar los procesos residuales de Excel, entender por qué ...
-
Diseño de códigos en sistemas empresariales ── Cómo definir códigos de producto y cliente, y el dígito de control
Guía práctica para diseñar códigos de producto y cliente en sistemas empresariales: código significativo frente a secuencial, fórmulas de dígito de control (...
-
Compatibilidad retroactiva de interfaces DLL y COM — Tabla de decisión sobre qué cambios rompen al lado que llama
Qué cambios de DLL o COM rompen al lado que llama: los tres niveles de compatibilidad, la tabla de decisión por cambio y la regla de inmutabilidad de COM.
-
Cómo versionar el esquema de la base de datos de una aplicación empresarial — Migraciones que evitan que «cada cliente tenga una base de datos distinta»
Guía práctica para versionar el esquema de bases de datos de aplicaciones empresariales dispersas entre clientes: PRAGMA user_version, migraciones progresiva...
-
Práctica de CI/CD para aplicaciones WinForms / WPF — automatizar desde la compilación hasta la firma y la distribución con GitHub Actions
CI/CD para WinForms/WPF con GitHub Actions: build y pruebas, versión por tags, firma con signtool y tabla de decisión por formato de distribución.
-
Cómo modificar con seguridad una aplicación de negocio legada sin pruebas — la práctica de las pruebas de caracterización y la refactorización
Con ejemplos en C#, muestra cómo fijar con pruebas de caracterización (método golden master) el comportamiento de una app legada sin pruebas, crear continuid...
-
Cuando su aplicación Windows de desarrollo propio es tratada como virus — cómo abordar los falsos positivos de Microsoft Defender y su impacto en el rendimiento
Procedimiento oficial para resolver falsos positivos de Microsoft Defender en apps Windows propias: por qué ocurren, cómo reportarlos, restaurar y excluir.
-
Suspensión, hibernación y Modern Standby: evitar con diseño que las apps de larga duración "se detengan de noche"
Analiza por qué las apps Windows de larga duración se detienen de noche, según las diferencias entre S3, hibernación y Modern Standby. Explica temporizadores...
-
¿Las aplicaciones empresariales funcionan en Windows para Arm? — La realidad de la emulación x64 (Prism), las DLL nativas y COM
Respondemos si las aplicaciones empresariales funcionan en Windows para Arm: la emulación x64 (Prism), las capas que no funcionan (controladores), el problem...
-
MAX_PATH y las trampas de rutas y nombres de archivo en Windows — el límite de 260 caracteres, nombres reservados, el punto final y las mayúsculas y minúsculas
Analizamos las limitaciones de rutas y nombres de archivo, causa habitual de «archivo no encontrado»: el desglose de MAX_PATH=260, la activación de rutas lar...
-
Trampas de las unidades de red y las rutas UNC — la gestión práctica de servidores de archivos (carpetas compartidas) en aplicaciones empresariales
Analizamos los problemas típicos al escribir en carpetas compartidas o monitorizarlas desde una app empresarial: la letra de unidad (Z:), los permisos según ...
-
Iconos de la bandeja del sistema y notificaciones toast en aplicaciones Windows — los escollos de NotifyIcon y cómo elegir el AppNotification adecuado
Organiza la implementación de la residencia en la bandeja del sistema y las notificaciones toast en aplicaciones Windows empresariales: el uso correcto de No...
-
¿Hasta cuándo seguirán funcionando las aplicaciones VB6? — Estado del soporte del runtime y un camino práctico hacia la migración a .NET
¿Hasta cuándo seguirán funcionando las aplicaciones VB6? Este artículo organiza la situación actual: el runtime sigue dentro del soporte incluso en Windows 1...
-
Era japonesa, festivos y fechas de cierre en aplicaciones empresariales — diseño resiliente a los cambios de era, JapaneseCalendar y cálculo de días hábiles en la práctica
Repasamos el tratamiento de fechas propio de las aplicaciones empresariales japonesas: visualización en era japonesa, cálculo de días hábiles excluyendo fest...
-
Internacionalización de aplicaciones WinForms/WPF — la práctica de resx, ensamblados satélite y el cambio de cultura
Organizamos la internacionalización de aplicaciones de escritorio Windows: la diferencia entre CurrentCulture y CurrentUICulture, el mecanismo de resx y ensa...
-
El CSV no es «solo texto»: guía práctica del manejo de CSV en aplicaciones empresariales con C# (codificación de caracteres, compatibilidad con Excel, protección contra inyección)
Repasamos los incidentes típicos de entrada/salida de CSV en aplicaciones empresariales -el parseo casero con Split(','), la corrupción de caracteres con UTF...
-
No envuelvas HttpClient en un using ── Comunicación HTTP en aplicaciones de negocio C# (patrones de creación, tiempos de espera y reintentos)
Crear HttpClient con using en cada solicitud agota los sockets, y usarlo como static no sigue los cambios de DNS. Repasamos el patrón de creación correcto co...
-
Identificar qué es «lento» con PerfView y dotnet-trace — introducción práctica a la investigación de rendimiento en .NET
Qué herramientas y datos conviene mirar cuando una aplicación de negocio va lenta, mantiene la CPU al máximo o se queda congelada ocasionalmente. Organizamos...
-
Introducción al registro de eventos de Windows y ETW — llevar los registros de aplicaciones de negocio al mecanismo estándar del sistema operativo
El registro de eventos y ETW son una capa de registro distinta, visible para el personal de operaciones y las herramientas estándar del sistema operativo. Ex...
-
No solo appsettings.json — gestión práctica de configuración en aplicaciones de negocio Windows (configuración por entorno, secretos y ubicaciones de escritura)
Organizamos la gestión de configuración de aplicaciones de negocio Windows: jerarquía de appsettings.json, uso de IOptions/IOptionsMonitor, configuración por...
-
Impresión y salida en PDF en aplicaciones empresariales de Windows ── cómo elegir entre System.Drawing.Printing, WPF y bibliotecas de informes
Organiza en una tabla de decisión por requisitos la impresión WinForms con PrintDocument, la impresión WPF con FlowDocument o FixedDocument y las alternativa...
-
Formarse una imagen clara del modelo OSI — diseccionar una única petición HTTP en sus siete capas
Entendemos el modelo OSI con un ejemplo real: construimos y diseccionamos en C# la trama Ethernet que transporta una petición HTTP GET, confirmamos con Wires...
-
Cómo entender el aislamiento de sesiones de Windows — Session 0, RDP y la ejecución simultánea de varios usuarios
Este artículo aclara el concepto de «sesión» de Windows, que suele confundir a los desarrolladores de aplicaciones. Explica por qué el aislamiento Session 0 ...
-
WinDbg + SOS para leer volcados de memoria — introducción práctica al análisis tras la recolección
Cómo leer volcados de memoria de Windows con WinDbg y SOS: rutas de símbolos, !clrstack, !dumpheap, !analyze -v y diferencias con dotnet-dump analyze.
-
Prevención de la ejecución múltiple en aplicaciones de Windows — Mutex con nombre y activación en el segundo inicio
Analizamos cómo implementar la prevención de la ejecución múltiple en apps Windows mediante un Mutex con nombre. Cubrimos Global\ y Local\, AbandonedMutexExc...
-
Cómo llamar a la API de Win32 desde C# de forma segura — Guía práctica de P/Invoke (DllImport / LibraryImport / CsWin32)
Repasamos los puntos prácticos de P/Invoke en C# para llamar a la API de Win32: DllImport frente a LibraryImport, generación automática con CsWin32, trampas ...
-
Integrar la autenticación de Entra ID en aplicaciones WinForms/WPF — Configuración práctica con MSAL.NET y el bróker WAM
Cómo integrar Entra ID en apps WinForms/WPF: cliente público, registro de la app, AcquireTokenSilent, bróker WAM y persistencia de la caché de tokens.
-
Fecha, hora y zona horaria en aplicaciones empresariales — de las trampas de DateTime al principio de UTC y el diseño de pruebas
Un traslado de servidor desplaza la hora 9 horas: exploramos el origen en el Kind de DateTime, DateTimeOffset, el principio de UTC, TimeZoneInfo, el horario ...
-
Pruebas de UI automatizadas para aplicaciones de escritorio de Windows ── el funcionamiento de UI Automation y pruebas resistentes a roturas con FlaUI
Organizamos las pruebas de UI automatizadas para apps WinForms/WPF desde el funcionamiento de Windows UI Automation: implementación mínima con FlaUI, diseño ...
-
Compatibilidad de WPF con alto DPI ── causas y soluciones del desenfoque pese a que «debería ser resistente al DPI»
WPF es System DPI Aware, pero al moverse a un monitor con otro DPI toda la ventana se difumina y los mapas de bits se ven borrosos. Repasamos el diagnóstico,...
-
El problema de EXCEL.EXE que permanece al operar Excel desde C# — Patrones de liberación de referencias COM y el criterio de sustitución
Explica por qué EXCEL.EXE permanece al operar Excel vía COM desde C#, mediante el conteo de referencias COM y el RCW. Cubre la regla de los dos puntos, los p...
-
Compatibilidad de WinForms con pantallas de alto DPI ── Por qué se ve borroso o se rompe el diseño en monitores 4K, y cómo abordarlo de forma realista
Explica por qué las aplicaciones WinForms se ven borrosas o rompen su diseño en monitores 4K, a partir de la virtualización de DPI y los modos de reconocimie...
-
Cómo elegir la comunicación entre procesos en Windows — canalizaciones con nombre / TCP / gRPC / memoria compartida / COM: tabla de decisión
Cómo elegir la comunicación entre procesos en Windows: comparamos en una tabla de decisión las canalizaciones con nombre, el TCP local, gRPC, la memoria comp...
-
Cómo usar SQLite en aplicaciones empresariales con C# — Modo WAL, control de exclusión, prevención de corrupción y cuándo usar EF Core
Reunimos el conocimiento práctico para integrar SQLite en aplicaciones empresariales con Microsoft.Data.Sqlite: modo WAL, SQLITE_BUSY, mapeo de tipos, copias...
-
Cómo crear y operar un servicio de Windows — de la diferencia con el Programador de tareas a la creación de servicios con BackgroundService
¿Un proceso en segundo plano debe ser servicio de Windows o basta con el Programador de tareas? Tabla de decisión, creación con .NET Worker Service, cuenta d...
-
¿Es WebView2 el siguiente paso tras el modo IE? — La restricción de que ActiveX no funciona y un diseño de migración realista
Explicamos la estructura básica de WebView2, la estrategia de distribución Evergreen y Fixed Version, la trampa de la carpeta de datos de usuario, la comunic...
-
Cómo elegir el destino de almacenamiento de datos en una app de Windows ── Tabla de decisión: SQLite / JSON / Registro / Access
Dónde y con qué guardar los datos de una app de escritorio Windows: uso de AppData/ProgramData, ventajas y trampas de SQLite, JSON, Registro y Access, con pr...
-
¿Qué es un PDB (Program Database)? — Cómo entender la información de depuración, los símbolos y Source Link
Qué es un PDB: qué contiene, qué no, y su relación con Debug/Release, Portable PDB, Source Link, servidores de símbolos y el análisis de volcados.
-
¿Qué es Roslyn? ── Leer, corregir y generar código C# desde la perspectiva del compilador
Resumen de Roslyn (.NET Compiler Platform): Syntax Tree, SemanticModel, Workspace, Analyzer, Source Generator, y sus usos y precauciones en la práctica.
-
Externalización y desarrollo por encargo de una app Windows: qué aclarar antes de solicitarlo
Antes de encargar la externalización o el desarrollo por encargo de una app Windows, estos son los puntos a aclarar: revisión de software existente, integrac...
-
Tipos de datos algebraicos en .NET Framework / .NET — Diseño que representa estados y resultados mediante tipos
Cómo usar los tipos de datos algebraicos, en especial los tipos suma y las uniones discriminadas, en .NET Framework y .NET: F#, jerarquías de clases en C#, r...
-
Cómo manejar correctamente los tokens de suplantación de Windows — préstamo de privilegios por hilo y una forma segura de revertirlos
Guía práctica sobre los tokens de suplantación de Windows: tokens de acceso, primarios y de hilo, niveles de suplantación, RevertToSelf y RunImpersonated de ...
-
El malentendido de que TCP permite recibir por cada unidad enviada con Send ── diseño de recepción para tratarlo como flujo de bytes
En TCP, suponer que se recibe por cada unidad enviada con Send o Write provoca fragmentación, uniones, texto corrupto y protocolos rotos. Este artículo trata...
-
Cómo distinguir la espera de GC de una fuga de memoria en .NET — Procedimiento práctico para observar, comparar y demostrar el crecimiento de memoria
Cómo distinguir, en aplicaciones .NET, si la memoria crece por espera de GC o por una fuga real, usando dotnet-counters, dotnet-gcdump y dotnet-dump.
-
Cómo ejecutar PowerShell desde C# (CSharp) y recibir los resultados como objetos
Explica, con enfoque práctico, cómo iniciar PowerShell desde C# y recibir los resultados como PSObject en vez de cadenas: PowerShell SDK, AddCommand, AddPara...
-
Por qué Windows llegó a ser como es hoy: la evolución de las versiones de Windows vista por un desarrollador
Repasamos los cambios de Windows 95 a Windows 11 no como un cronograma visual, sino desde la perspectiva de un desarrollador: compatibilidad, estabilidad, pe...
-
¿Qué es ClickOnce? - Cómo funciona, actualizaciones y en qué casos conviene o no usarlo, desde la práctica
ClickOnce distribuye apps de escritorio Windows en .NET: manifiestos, actualizaciones, caché, firma y en qué casos conviene usarlo, con diagramas Mermaid.
-
Lista de verificación para manejar procesos secundarios de forma segura en aplicaciones de Windows
Para manejar procesos secundarios de forma segura en aplicaciones de Windows, la propiedad del árbol de procesos y el procedimiento de cierre importan más qu...
-
Distribución de apps de Windows en un solo archivo - los límites del binario único y la dependencia del SO
Al reducir una app de Windows a un solo EXE, no es lo mismo unificar la distribución que eliminar la dependencia del SO: repasamos .NET, C++, WebView2, WinUI...
-
Puntos débiles de las aplicaciones de comunicación serie - hasta el diseño de la reconexión y los registros
Puntos débiles habituales de las aplicaciones de comunicación serie en la integración con equipos e instrumentos de medición: framing, timeouts, RTS/CTS, DTR...
-
Lista de verificación previa a la migración de .NET Framework a .NET
Checklist práctico para revisar el tipo de proyecto, tecnologías no compatibles, dependencias NuGet, formato SDK, WPF/WinForms, CI/CD y operación antes de mi...
-
¿Qué es .NET Generic Host? - La base de DI, configuración y registro
Analiza el papel de Generic Host —DI, configuración, registro, IHostedService y BackgroundService— y resume, con criterio práctico, dónde conviene usarlo y d...
-
¿Qué es .NET Native AOT? Diferencias con JIT y trimming
Explicamos qué es Native AOT diferenciándolo de JIT, ReadyToRun, self-contained, single-file, trimming y source generator, y resumimos desde una perspectiva ...
-
Cómo elegir entre los 3 temporizadores de .NET - PeriodicTimer/Timer/DispatcherTimer
Diferencias entre PeriodicTimer, System.Threading.Timer y DispatcherTimer, y cómo elegirlos para el procesamiento async, los callbacks de ThreadPool y las ac...
-
Cómo invocar una DLL nativa de C# Native AOT desde C/C++
Publicar una biblioteca de C# como DLL nativa con Native AOT e invocar sus puntos UnmanagedCallersOnly desde C/C++: casos de uso, patrones y precauciones.
-
Por qué usar .NET Generic Host y BackgroundService en una aplicación de escritorio
Resumimos cómo usar Generic Host y BackgroundService en herramientas y apps residentes de Windows para organizar el inicio, el procesamiento periódico, el ci...
-
ActiveX / OCX: cómo tratarlos hoy — tabla de decisión para mantener, envolver o reemplazar
Al encontrar un ActiveX / OCX, cómo decidir entre mantenerlo, envolverlo o reemplazarlo, considerando 32 bits / 64 bits, registro, dependencia del navegador ...
-
WPF/WinForms: async y el hilo de UI, resumidos en una hoja
Repasamos, en WPF / WinForms, a dónde vuelve await, Dispatcher / Invoke, ConfigureAwait(false) y dónde se atascan .Result / .Wait().
-
Guía práctica de FileSystemWatcher - Cómo evitar pérdidas de eventos y duplicados
Analizamos el uso de FileSystemWatcher: pérdida de eventos, notificaciones duplicadas, trampas de finalización, reescaneo, claim atómico e idempotency.
-
Tabla práctica de decisión de C# async/await - Task.Run y ConfigureAwait
Organizamos las mejores prácticas de C# async/await con una tabla de decisión para espera de E/S, cálculo de CPU, Task.Run, ConfigureAwait(false) y fire-and-...