# Package Building
ElectronNET.Core integrates with Visual Studio's publishing system to create distributable Electron packages using electron-builder. The process leverages .NET's build system while automatically generating the necessary Electron configuration files.
## 🎯 Publishing Overview
The publishing process differs slightly between ASP.NET and console applications:
- **ASP.NET Apps** - Use folder publishing with SelfContained=true
- **Console Apps** - Use folder publishing with SelfContained=false
## 📋 Prerequisites
Before publishing, ensure you have:
- **Node.js 22.x** installed
- **RuntimeIdentifier** set correctly for your target platform
- **Project configured** for Release builds
## 🚀 Publishing Process
### Step 1: Configure Runtime Identifier
Set the target platform in your `.csproj` file:
```xml
net8.0
win-x64
```
### Step 2: Create Publish Profile
Add publish profiles to `Properties/PublishProfiles/`:
#### ASP.NET Application Profile (Windows)
```xml
Release
Any CPU
publish\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\
FileSystem
net8.0
win-x64
true
false
```
#### ASP.NET Application Profile (Linux)
```xml
Release
Any CPU
publish\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\
FileSystem
net8.0
linux-x64
true
false
```
#### Console Application Profile (Windows)
```xml
Release
Any CPU
publish\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\
FileSystem
net8.0
win-x64
false
false
false
```
#### Console Application Profile (Linux)
```xml
Release
Any CPU
publish\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\
FileSystem
net8.0
linux-x64
false
false
```
### Step 3: Configure Electron Builder
ElectronNET.Core automatically generates `electron-builder.json` based on your project configuration. Key settings include:
```json
{
"productName": "My Electron App",
"appId": "com.mycompany.myapp",
"directories": {
"output": "release"
},
"files": [
"**/*",
"!**/*.pdb"
],
"win": {
"target": "nsis",
"icon": "assets/app.ico"
},
"linux": {
"target": "AppImage",
"icon": "assets/app.png"
}
}
```
### Step 4: Publish from Visual Studio
1. **Right-click your project** in Solution Explorer
2. **Select "Publish"**
3. **Choose "Folder"** as the publish target
4. **Select your publish profile** (Windows/Linux)
5. **Click "Publish"**
The publish process will:
- Build your .NET application
- Generate Electron configuration files
- Copy Electron runtime files
- Install npm dependencies
- Create electron-builder configuration
### Step 5: Build Final Package
After publishing, build the final package:
```bash
# Navigate to publish directory
cd publish\Release\net8.0\win-x64\
# Install dependencies and build
npm install
npx electron-builder
# Find your package in the 'release' folder
```
## 📁 Output Structure
After publishing, your folder structure will look like:
```
publish\Release\net8.0\win-x64\
├── MyElectronApp.exe # Your .NET application
├── .electron\ # Electron runtime files
│ ├── main.js
│ ├── package.json
│ └── node_modules\
├── wwwroot\ # (ASP.NET only) Web assets
├── electron-builder.json # Build configuration
└── release\ # Final packages (after electron-builder)
├── MyElectronApp-1.0.0.exe
└── MyElectronApp-1.0.0-setup.exe
```
## 🔧 Configuration Options
### Project Configuration
Configure Electron settings in your `.csproj`:
```xml
My Electron Application
MyApp
Your Company
1.0.0
```
### Electron Builder Configuration
Customize `electron-builder.json` for your needs:
```json
{
"productName": "MyApp",
"appId": "com.mycompany.myapp",
"copyright": "Copyright © 2024 My Company",
"win": {
"target": "nsis",
"icon": "assets/icon.ico",
"publisherName": "My Company"
},
"linux": {
"target": "AppImage",
"icon": "assets/icon.png",
"category": "Office"
}
}
```
## 🎯 Platform-Specific Settings
### Windows Configuration
```json
{
"win": {
"target": "nsis",
"icon": "assets/app.ico",
"verifyUpdateCodeSignature": false
}
}
```
### Linux Configuration
```json
{
"linux": {
"target": "AppImage",
"icon": "assets/app.png",
"category": "Development"
}
}
```
### macOS Configuration
```json
{
"mac": {
"target": "dmg",
"icon": "assets/app.icns",
"category": "public.app-category.developer-tools"
}
}
```
## 🚀 Advanced Publishing
### Cross-Platform Building
Build for multiple platforms from Windows using WSL:
1. **Set RuntimeIdentifier** to `linux-x64`
2. **Publish to folder** using Linux profile
3. **Copy to WSL** or build directly in WSL
### CI/CD Integration
For automated builds:
```bash
# Restore packages
dotnet restore
# Publish for specific platform
dotnet publish -c Release -r win-x64 --self-contained
# Build Electron package
cd publish\Release\net8.0\win-x64
npm install
npx electron-builder --publish=never
```
## 🛠 Troubleshooting
### Common Issues
**"electron-builder.json not found"**
- Ensure project is published first
- Check that RuntimeIdentifier is set
- Verify .NET build succeeded
**"npm install fails"**
- Ensure Node.js 22.x is installed
- Check internet connection for npm packages
- Verify no conflicting package versions
**"WSL publishing fails"**
- Ensure WSL2 is properly configured
- Check that Linux RID is set correctly
- Verify WSL can access Windows files
## 🎨 Publishing Workflow
*Placeholder for image showing Visual Studio publish dialog and electron-builder output*
## 🚀 Next Steps
- **[Startup Methods](Startup-Methods.md)** - Understanding different launch modes for packaged apps
- **[Debugging](Debugging.md)** - Debug packaged applications
- **[Migration Guide](../Core/Migration-Guide.md)** - Update existing projects for new publishing
## 💡 Benefits
✅ **Native VS Integration** - Use familiar publish workflows
✅ **Cross-Platform Building** - Build Linux packages from Windows
✅ **Automatic Configuration** - No manual electron-builder setup
✅ **Multiple Package Types** - NSIS, AppImage, DMG, etc.
✅ **CI/CD Ready** - Easy integration with build pipelines