244 lines
7.6 KiB
Markdown
244 lines
7.6 KiB
Markdown
# build-solution
|
|
|
|
## When to Use
|
|
|
|
Use this command when you want to:
|
|
- Build the entire .NET solution
|
|
- Fix compilation errors automatically
|
|
- Verify the solution builds successfully
|
|
- Check for and resolve build warnings
|
|
|
|
## Prerequisites
|
|
|
|
- .NET SDK installed (`dotnet --version`)
|
|
- Solution file exists: `src/Managing.sln`
|
|
- All project files are present and valid
|
|
|
|
## Execution Steps
|
|
|
|
### Step 1: Verify Solution File Exists
|
|
|
|
Check that the solution file exists:
|
|
|
|
Run: `test -f src/Managing.sln`
|
|
|
|
**If solution file doesn't exist:**
|
|
- Error: "❌ Solution file not found at src/Managing.sln"
|
|
- **STOP**: Cannot proceed without solution file
|
|
|
|
### Step 2: Restore NuGet Packages
|
|
|
|
Restore packages before building:
|
|
|
|
Run: `dotnet restore src/Managing.sln`
|
|
|
|
**If restore succeeds:**
|
|
- Continue to Step 3
|
|
|
|
**If restore fails:**
|
|
- Show restore errors
|
|
- Common issues:
|
|
- Network connectivity issues
|
|
- NuGet feed authentication
|
|
- Package version conflicts
|
|
- **Try to fix:**
|
|
- Check network connectivity
|
|
- Verify NuGet.config exists and is valid
|
|
- Clear NuGet cache: `dotnet nuget locals all --clear`
|
|
- Retry restore
|
|
- **If restore still fails:**
|
|
- Show detailed error messages
|
|
- **STOP**: Cannot build without restored packages
|
|
|
|
### Step 3: Build Solution
|
|
|
|
Build the solution:
|
|
|
|
Run: `dotnet build src/Managing.sln --no-restore`
|
|
|
|
**If build succeeds with no errors:**
|
|
- Show: "✅ Build successful!"
|
|
- Show summary of warnings (if any)
|
|
- **SUCCESS**: Build completed
|
|
|
|
**If build fails with errors:**
|
|
- Continue to Step 4 to fix errors
|
|
|
|
**If build succeeds with warnings only:**
|
|
- Show warnings summary
|
|
- Ask user if they want to fix warnings
|
|
- If yes: Continue to Step 5
|
|
- If no: **SUCCESS**: Build completed with warnings
|
|
|
|
### Step 4: Fix Compilation Errors
|
|
|
|
Analyze build errors and fix them automatically:
|
|
|
|
**Common error types:**
|
|
|
|
1. **Project reference errors:**
|
|
- Error: "project was not found"
|
|
- **Fix**: Check project file paths in .csproj files
|
|
- Verify project file names match references
|
|
- Update incorrect project references
|
|
|
|
2. **Missing using statements:**
|
|
- Error: "The type or namespace name 'X' could not be found"
|
|
- **Fix**: Add missing `using` statements
|
|
- Check namespace matches
|
|
|
|
3. **Type mismatches:**
|
|
- Error: "Cannot implicitly convert type 'X' to 'Y'"
|
|
- **Fix**: Add explicit casts or fix type definitions
|
|
- Check nullable reference types
|
|
|
|
4. **Missing method/property:**
|
|
- Error: "'X' does not contain a definition for 'Y'"
|
|
- **Fix**: Check if method/property exists
|
|
- Verify spelling and accessibility
|
|
|
|
5. **Nullable reference warnings (CS8625, CS8618):**
|
|
- **Fix**: Add `?` to nullable types or initialize properties
|
|
- Use null-forgiving operator `!` if appropriate
|
|
- Add null checks where needed
|
|
|
|
6. **Package version conflicts:**
|
|
- Warning: "Detected package version outside of dependency constraint"
|
|
- **Fix**: Update package versions in .csproj files
|
|
- Align package versions across projects
|
|
|
|
**For each error:**
|
|
- Identify the error type and location
|
|
- Read the file containing the error
|
|
- Fix the error following .NET best practices
|
|
- Re-run build to verify fix
|
|
- Continue until all errors are resolved
|
|
|
|
**If errors cannot be fixed automatically:**
|
|
- Show detailed error messages
|
|
- Explain what needs to be fixed manually
|
|
- **STOP**: User intervention required
|
|
|
|
### Step 5: Fix Warnings (Optional)
|
|
|
|
If user wants to fix warnings:
|
|
|
|
**Common warning types:**
|
|
|
|
1. **Nullable reference warnings (CS8625, CS8618):**
|
|
- **Fix**: Add nullable annotations or initialize properties
|
|
- Use `string?` for nullable strings
|
|
- Initialize properties in constructors
|
|
|
|
2. **Package version warnings (NU1608, NU1603, NU1701):**
|
|
- **Fix**: Update package versions to compatible versions
|
|
- Align MediatR versions across projects
|
|
- Update Microsoft.Extensions packages
|
|
|
|
3. **Obsolete API warnings:**
|
|
- **Fix**: Replace with recommended alternatives
|
|
- Update to newer API versions
|
|
|
|
**For each warning:**
|
|
- Identify warning type and location
|
|
- Fix following best practices
|
|
- Re-run build to verify fix
|
|
|
|
**If warnings cannot be fixed:**
|
|
- Show warning summary
|
|
- Inform user warnings are acceptable
|
|
- **SUCCESS**: Build completed with acceptable warnings
|
|
|
|
### Step 6: Verify Final Build
|
|
|
|
Run final build to confirm all errors are fixed:
|
|
|
|
Run: `dotnet build src/Managing.sln --no-restore`
|
|
|
|
**If build succeeds:**
|
|
- Show: "✅ Build successful! All errors fixed."
|
|
- Show final warning count (if any)
|
|
- **SUCCESS**: Solution builds successfully
|
|
|
|
**If errors remain:**
|
|
- Show remaining errors
|
|
- Return to Step 4
|
|
- **STOP** if errors cannot be resolved after multiple attempts
|
|
|
|
## Error Handling
|
|
|
|
**If solution file not found:**
|
|
- Check path: `src/Managing.sln`
|
|
- Verify you're in the correct directory
|
|
- **STOP**: Cannot proceed without solution file
|
|
|
|
**If restore fails:**
|
|
- Check network connectivity
|
|
- Verify NuGet.config exists
|
|
- Clear NuGet cache: `dotnet nuget locals all --clear`
|
|
- Check for authentication issues
|
|
- Retry restore
|
|
|
|
**If project reference errors:**
|
|
- Check .csproj files for incorrect references
|
|
- Verify project file names match references
|
|
- Common issue: `Managing.Infrastructure.Database.csproj` vs `Managing.Infrastructure.Databases.csproj`
|
|
- Fix project references
|
|
|
|
**If compilation errors persist:**
|
|
- Read error messages carefully
|
|
- Check file paths and line numbers
|
|
- Verify all dependencies are restored
|
|
- Check for circular references
|
|
- **STOP** if errors require manual intervention
|
|
|
|
**If package version conflicts:**
|
|
- Update MediatR.Extensions.Microsoft.DependencyInjection to match MediatR version
|
|
- Update Microsoft.Extensions.Caching.Memory versions
|
|
- Align AspNetCore.HealthChecks.NpgSql versions
|
|
- Update packages in all affected projects
|
|
|
|
## Example Execution
|
|
|
|
**User input:** `/build-solution`
|
|
|
|
**AI execution:**
|
|
|
|
1. Verify solution: `test -f src/Managing.sln` → ✅ Exists
|
|
2. Restore packages: `dotnet restore src/Managing.sln` → ✅ Restored
|
|
3. Build solution: `dotnet build src/Managing.sln --no-restore`
|
|
- Found error: Project reference to `Managing.Infrastructure.Database.csproj` not found
|
|
4. Fix error: Update `Managing.Workers.Api.csproj` reference to `Managing.Infrastructure.Databases.csproj`
|
|
5. Re-build: `dotnet build src/Managing.sln --no-restore` → ✅ Build successful
|
|
6. Success: "✅ Build successful! All errors fixed."
|
|
|
|
**If nullable warnings:**
|
|
|
|
1-3. Same as above
|
|
4. Build succeeds with warnings: CS8625 nullable warnings
|
|
5. Fix warnings: Add `?` to nullable parameters, initialize properties
|
|
6. Re-build: `dotnet build src/Managing.sln --no-restore` → ✅ Build successful, warnings reduced
|
|
7. Success: "✅ Build successful! Warnings reduced."
|
|
|
|
**If package conflicts:**
|
|
|
|
1-3. Same as above
|
|
4. Build succeeds with warnings: NU1608 MediatR version conflicts
|
|
5. Fix warnings: Update MediatR.Extensions.Microsoft.DependencyInjection to 12.x
|
|
6. Re-build: `dotnet build src/Managing.sln --no-restore` → ✅ Build successful
|
|
7. Success: "✅ Build successful! Package conflicts resolved."
|
|
|
|
## Important Notes
|
|
|
|
- ✅ **Always restore first** - Ensures packages are available
|
|
- ✅ **Fix errors before warnings** - Errors block builds, warnings don't
|
|
- ✅ **Check project references** - Common source of build errors
|
|
- ✅ **Verify file names match** - Project file names must match references exactly
|
|
- ✅ **Nullable reference types** - Use `?` for nullable, initialize non-nullable properties
|
|
- ⚠️ **Package versions** - Keep versions aligned across projects
|
|
- ⚠️ **Warnings are acceptable** - Some warnings (like NU1701) may be acceptable
|
|
- 📦 **Solution location**: `src/Managing.sln`
|
|
- 🔧 **Build command**: `dotnet build src/Managing.sln`
|
|
- 🗄️ **Common fixes**: Project references, nullable types, package versions
|
|
|