Hey devs! En este artículo te contaré qué es exactamente esta nueva funcionalidad conocida como file-based app y viene con .NET 10 y C# 14, cómo se usa, qué puedes hacer con ella y por qué puede cambiar la forma en que trabajamos con .NET en el día a día.
Con la llegada de .NET 10, C# da un paso importante hacia el mundo del scripting. Una de las características más esperadas es la posibilidad de ejecutar archivos .cs directamente desde la línea de comandos, sin necesidad de crear un proyecto, sin Program.cs y sin Main(). Basta con escribir el código en un archivo .cs y ejecutarlo con dotnet archivo.cs. genial no?
Aquí el anuncio oficial de esta característica de .NET 🔥😉
Este enfoque simplifica enormemente el uso de C# para tareas pequeñas, prototipos rápidos, automatización y aprendizaje. Ya no es necesario levantar todo un proyecto para probar una idea. Esto creo que posiciona a C# como una alternativa real frente a lenguajes como Python, Bash o JavaScript cuando se trata de scripts rápidos y reutilizables y por supuesto dev, esto acerca C# a muchos nuevos desarrolladores 🥳.
Ejemplo realista
Ahora que ya sabes qué es esta característica, como leí hace poco: Show me the code jajaja así que aquí vamos!
Haremos un sencillo programa que utiliza dapper y Npgsql que añadirá registros a una base de datos PostgreSql.
Necesitarás tener instalado el motor de base de datos PostgreSql o si no lo tienes y no quieres instalarlo puedes levantar un contenedor en Docker con el siguiente comando:
docker run --name postgres10 -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=mi_bd -p 5432:5432 -d postgres
Y así lo tendrás corriendo:

Para ejecutar este ejemplo deberás tener instalado el SDK de .NET 10
Aplicaremos esta característica nueva del lenguaje en 2 pasos:
- Crea un archivo con tu código en C# y ponle la extension .cs por ejemplo script.cs
- Ejecuta ese archivo con dotnet run script.cs
Aquí el código
#:package Dapper@2.1.66
#:package Npgsql@9.0.3
using Dapper;
using Npgsql;
const string connStr = "Host=localhost;Port=5432;Username=postgres;Password=postgres;Database=mydatabase";
await using var conn = new NpgsqlConnection(connStr);
await conn.OpenAsync();
Console.WriteLine("Creando tabla si no existe...");
await conn.ExecuteAsync(@"
CREATE TABLE IF NOT EXISTS producto (
id SERIAL PRIMARY KEY,
nombre TEXT NOT NULL,
precio DECIMAL NOT NULL
);
");
Console.WriteLine("Insertando productos...");
for (int i = 1; i <= 100; i++)
{
await conn.ExecuteAsync(
"INSERT INTO producto (nombre, precio) VALUES (@nombre, @precio)",
new { nombre = $"Producto {i}", precio = i * 2.5m }
);
if (i % 20 == 0)
Console.WriteLine($" → Insertados {i} productos...");
}
Console.WriteLine("Listo. Puedes consultar los datos desde PgAdmin o psql.");
Esto descarga Dapper y Npgsql automáticamente, crea la tabla si no existe y semilla 1 000 filas con progreso en consola. Un script potente y útil para pruebas o prototipos.
Y aquí la ejecución:

Veamos los resultados en la base de datos, en mi caso utilicé DBeaver tu puedes usar el de tu preferencia:

Funciona dev! Como ves no es necesario ahora que tengas todo el boilerplate de .NET ni archivo Program.cs ni archivo Csproj ni nada más, tan sólo tu archivo con extensión cs y tu dotnet CLI. Por supuesto, esto no quiere decir que todos los proyectos los vayas a tener así, pero sin lugar a dudas es una muy buena opción para proyectos puntuales, scripts o simplemente echarse a codificar en un sólo archivo haciendo lo que más nos gusta que es programar! 🐿️😉
Si esta entrada te ha encantado dev, compártela! 🥳
Créditos de imagen de portada: Basada en Foto de Victor Freitas en Unsplash
