AssetsBundler 1.0.1

dotnet add package AssetsBundler --version 1.0.1
                    
NuGet\Install-Package AssetsBundler -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AssetsBundler" Version="1.0.1">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AssetsBundler" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="AssetsBundler">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AssetsBundler --version 1.0.1
                    
#r "nuget: AssetsBundler, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AssetsBundler@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AssetsBundler&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=AssetsBundler&version=1.0.1
                    
Install as a Cake Tool

🚀 AssetsBundler

NuGet Downloads License

Minificador y bundler moderno para assets web (CSS, SCSS, LESS, JavaScript) con integración automática para proyectos .NET. Compatible con múltiples versiones de .NET Framework y .NET Core.

✨ Características

  • ✅ Integración automática con MSBuild - Se ejecuta en cada build
  • ✅ Soporte completo: CSS, SCSS, SASS, LESS, JavaScript
  • ✅ Minificación inteligente con NUglify
  • ✅ Compilación de preprocesadores (SCSS/SASS/LESS → CSS)
  • ✅ Mensajes de error claros que identifican el archivo problemático
  • ✅ Compatible con múltiples versiones de .NET:
    • ✅ .NET Framework 4.6.1+
    • ✅ .NET Core 2.0+
    • ✅ .NET 5, 6, 7, 8, 9+
  • ✅ Zero configuration - Funciona con configuración mínima
  • ✅ Código síncrono - Sin dependencias de async/await
  • ✅ Puede usarse como librería - Integra en tu propio código

📦 Instalación

dotnet add package AssetsBundler

O en Visual Studio:

Install-Package AssetsBundler

🎯 Uso Rápido

1. Instala el paquete (arriba)

2. Crea bundle.config.json en la raíz de tu proyecto:

{
    "outputDirectory": "wwwroot/dist",
    "bundles": [
        {
            "outputFileName": "css/site.min.css",
            "inputFiles": [
                "wwwroot/css/site.css",
                "wwwroot/css/layout.css"
            ],
            "minify": true,
            "sourceMap": false
        },
        {
            "outputFileName": "js/app.min.js",
            "inputFiles": [
                "wwwroot/js/main.js",
                "wwwroot/js/utils.js"
            ],
            "minify": true,
            "sourceMap": false
        }
    ]
}

3. ¡Listo! Se ejecuta automáticamente en cada build

dotnet build
# 🚀 AssetsBundler - Iniciando...
# 📦 Procesando 2 bundle(s)...
# 
#   📄 css/site.min.css
#     ✓ wwwroot/css/site.css (12.45 KB)
#     ✓ wwwroot/css/layout.css (8.32 KB)
#     ✓ Minificado: 20.77 KB → 15.23 KB (-26.7%)
#     → wwwroot/dist/css/site.min.css (15.23 KB)
# 
#   📄 js/app.min.js
#     ✓ wwwroot/js/main.js (24.15 KB)
#     ✓ wwwroot/js/utils.js (5.67 KB)
#     ✓ Minificado: 29.82 KB → 18.45 KB (-38.1%)
#     → wwwroot/dist/js/app.min.js (18.45 KB)
# 
# ✅ Proceso completado: 2 bundle(s) generados exitosamente
# ✅ AssetsBundler completado exitosamente

🎨 Soporte de Formatos

CSS

{
    "outputFileName": "css/styles.min.css",
    "inputFiles": ["wwwroot/css/site.css"],
    "minify": true
}

SCSS/SASS

{
    "outputFileName": "css/styles.min.css",
    "inputFiles": [
        "Styles/variables.scss",
        "Styles/layout.scss"
    ],
    "minify": true
}

LESS

{
    "outputFileName": "css/theme.min.css",
    "inputFiles": ["Styles/theme.less"],
    "minify": true
}

JavaScript

{
    "outputFileName": "js/bundle.min.js",
    "inputFiles": [
        "wwwroot/js/app.js",
        "wwwroot/js/components.js"
    ],
    "minify": true
}

⚙️ Configuración Avanzada

Deshabilitar temporalmente

En tu .csproj:

<PropertyGroup>
  <AssetsBundlerEnabled>false</AssetsBundlerEnabled>
</PropertyGroup>

Archivo de configuración personalizado

<PropertyGroup>
  <AssetsBundlerConfigFile>assets.config.json</AssetsBundlerConfigFile>
</PropertyGroup>

Múltiples bundles

{
    "outputDirectory": "wwwroot/dist",
    "bundles": [
        {
            "outputFileName": "css/vendor.min.css",
            "inputFiles": [
                "node_modules/bootstrap/dist/css/bootstrap.css",
                "node_modules/font-awesome/css/font-awesome.css"
            ],
            "minify": true
        },
        {
            "outputFileName": "css/app.min.css",
            "inputFiles": [
                "Styles/variables.scss",
                "Styles/layout.scss",
                "Styles/components.scss"
            ],
            "minify": true
        },
        {
            "outputFileName": "js/vendor.min.js",
            "inputFiles": [
                "node_modules/jquery/dist/jquery.js",
                "node_modules/bootstrap/dist/js/bootstrap.js"
            ],
            "minify": true
        },
        {
            "outputFileName": "js/app.min.js",
            "inputFiles": [
                "wwwroot/js/main.js",
                "wwwroot/js/utils.js"
            ],
            "minify": true
        }
    ]
}

Deshabilitar minificación (útil para debugging)

{
    "outputFileName": "css/styles.css",
    "inputFiles": ["Styles/main.scss"],
    "minify": false
}

🐛 Mensajes de Error Detallados

AssetsBundler proporciona mensajes de error claros que identifican:

  • ✅ El archivo exacto que causó el error
  • ✅ La línea aproximada del problema
  • ✅ El bundle que estaba siendo procesado
  • ✅ Sugerencias para solucionar el error
╔════════════════════════════════════════════════════════════════╗
║                   ❌ ERROR EN ASSETSBUNDLER                   ║
╚════════════════════════════════════════════════════════════════╝

📁 Configuración: bundle.config.json

Error al minificar CSS en el bundle 'css/site.min.css'.

📍 ARCHIVO PROBLEMÁTICO:
   wwwroot/css/site.css
   (Línea aproximada 145 en el archivo original)

📋 ARCHIVOS EN EL BUNDLE:
   1. wwwroot/css/site.css (comienza en línea 1)
   2. wwwroot/css/layout.css (comienza en línea 234)

❌ ERROR:
Errores al minificar CSS:
  [ERROR] Línea 145, Columna 12: Expected closing brace

╔════════════════════════════════════════════════════════════════╗
║                      💡 SUGERENCIAS                            ║
╚════════════════════════════════════════════════════════════════╝
   1️⃣  Abre el archivo indicado y revisa la línea mencionada
   2️⃣  Busca llaves '{}' desbalanceadas o punto y coma faltantes
   3️⃣  Valida tu CSS en: https://jigsaw.w3.org/css-validator/
   4️⃣  Deshabilita minificación temporalmente: 'minify': false
   5️⃣  Prueba procesando los archivos uno por uno

📋 Requisitos

.NET Standard 2.0 Compatible

  • ✅ .NET Framework 4.6.1 o superior
  • ✅ .NET Core 2.0 o superior
  • ✅ .NET 5, 6, 7, 8, 9 o superior

Sistemas Operativos

  • ✅ Windows
  • ✅ Linux
  • ✅ macOS

Tipos de Proyectos

  • ✅ ASP.NET Core
  • ✅ Blazor (Server y WebAssembly)
  • ✅ Razor Pages
  • ✅ MVC
  • ✅ Web API
  • ✅ Cualquier proyecto .NET que use MSBuild

🚀 Rendimiento

  • Código síncrono optimizado para operaciones de I/O locales
  • Procesamiento en batch de múltiples bundles
  • Caché de procesadores para reutilización
  • Minificación eficiente con reducción promedio del 30-40%

📊 Ejemplo de Proyecto

MiProyecto/
├── MiProyecto.csproj
├── bundle.config.json
├── wwwroot/
│   ├── css/
│   │   ├── site.css
│   │   └── layout.css
│   ├── js/
│   │   ├── main.js
│   │   └── utils.js
│   └── dist/              ← Archivos generados aquí
│       ├── css/
│       │   └── site.min.css
│       └── js/
│           └── app.min.js
└── Styles/
    ├── variables.scss
    ├── layout.scss
    └── components.less

🔄 Integración con CI/CD

AssetsBundler funciona perfectamente en pipelines de CI/CD:

GitHub Actions

- name: Build
  run: dotnet build --configuration Release
  # AssetsBundler se ejecuta automáticamente

Azure DevOps

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'
  # AssetsBundler se ejecuta automáticamente

GitLab CI

build:
  script:
    - dotnet build -c Release
  # AssetsBundler se ejecuta automáticamente

🤝 Contribuir

Las contribuciones son bienvenidas! Por favor:

  1. Fork el repositorio
  2. Crea una rama para tu feature (git checkout -b feature/NuevaFeature)
  3. Commit tus cambios (git commit -m 'Add some NuevaFeature')
  4. Push a la rama (git push origin feature/NuevaFeature)
  5. Abre un Pull Request

Reportar Bugs

Si encuentras un bug, por favor abre un issue con:

  • Descripción del problema
  • Pasos para reproducirlo
  • Versión de AssetsBundler
  • Versión de .NET
  • Sistema operativo

📝 Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.

MIT License

Copyright (c) 2025 Yafel Garcia

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

👤 Autor

Yafel Garcia

⭐ ¿Te gusta el proyecto?

Si AssetsBundler te resulta útil, ¡considera darle una estrella en GitHub! ⭐

GitHub stars

🔗 Enlaces Útiles

❓ FAQ

¿Puedo procesar archivos TypeScript?

No directamente. Se recomienda compilar TypeScript a JavaScript primero y luego usar AssetsBundler para el bundling y minificación.

¿Funciona en Linux/macOS?

Sí, AssetsBundler es multiplataforma y funciona en Windows, Linux y macOS.

¿Cómo deshabilito AssetsBundler temporalmente?

Agrega <AssetsBundlerEnabled>false</AssetsBundlerEnabled> en tu .csproj.


Desarrollado con ❤️ por Yafel Garcia

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 308 10/28/2025
1.0.0 260 10/28/2025

v1.0.1 -
- Compatible con .NET Framework 4.6.1+
- Compatible con .NET Core 2.0+
- Compatible con .NET 5, 6, 7, 8, 9+
- Identificación precisa de archivos con errores
- Mensajes de error mejorados