This document describes additional setup steps for core FieldWorks developers. Unless you are a core team member, you should follow the steps in CONTRIBUTING.md instead.
Note: Core developers have direct commit access to the main repository and additional responsibilities for code review and release management.
Complete all steps in CONTRIBUTING.md first:
- Install required software (Git, Visual Studio 2022)
- Clone the repository
- Verify you can build successfully
The following tools are required for FieldWorks development:
Install with these workloads:
- .NET desktop development
- Desktop development with C++ (including ATL/MFC components)
See Visual Studio Setup for detailed component list.
Installer builds use SDK-style .wixproj projects and restore WiX v6 tools via NuGet during the build. No separate WiX 3.x installation is required.
# Standard developer machine setup
.\Setup-Developer-Machine.ps1
# Optional: set up installer helper repositories
.\Setup-Developer-Machine.ps1 -InstallerDepsNo WiX-specific environment variables are required for WiX v6 SDK builds.
Run these commands to verify your environment:
# Check Visual Studio
& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest
# Check Git
git --version
# Verify installer build prerequisites
.\Build\Agent\Setup-InstallerBuild.ps1 -ValidateOnly
# Compact dependency preflight summary
.\Build\Agent\Verify-FwDependencies.ps1
# Include optional Serena-related tools with detailed per-check output
.\Build\Agent\Verify-FwDependencies.ps1 -IncludeOptional -DetailedFor automation or scripted setup checks, add -PassThru to return structured dependency results instead of relying only on console output.
Ensure your GitHub account has the correct permissions:
- You should be a member of the sillsdev organization
- Request access to the FieldWorks repository with write permissions
Contact the team lead to request permissions if needed.
For streamlined pushing and pulling, set up an SSH key:
-
Generate an SSH key if you don't have one:
ssh-keygen -t ed25519 -C "your_email@example.com" -
Add the key to your GitHub account:
- Go to GitHub → Settings → SSH and GPG keys → New SSH key
- Paste your public key (
~/.ssh/id_ed25519.pub)
-
Test the connection:
ssh -T git@github.com
-
Update your remote to use SSH:
git remote set-url origin git@github.com:sillsdev/FieldWorks.git
git config user.name "Your Name"
git config user.email "your.email@example.com"git config diff.renameLimit 10000
git config merge.renameLimit 10000Set up tracking for release branches you'll be working on:
# Fetch all branches
git fetch --all
# Track a specific release branch
git checkout release/9.3Recommended VS Code extensions for daily development:
- ReSharper for VS Code (
jetbrains.resharper-code) for C# editing, navigation, refactoring, and test explorer - C# Dev Kit (
ms-dotnettools.csdevkit) and C# (ms-dotnettools.csharp) are discouraged in this workspace - C/C++ (
ms-vscode.cpptools) for native editing/debugging - PowerShell (
ms-vscode.powershell) for build/test scripts
Use Visual Studio 2022 when working on:
- WinForms designer changes
- Mixed managed/native debugging across interop boundaries
- Complex legacy .NET Framework project-system issues
Optional Visual Studio extension:
- ReSharper (if you have a license) for advanced refactoring/navigation
Recommended Git tools:
- Git GUI (included with Git) - For commits and basic operations
- GitKraken or SourceTree - For visual branch management
- VS Code - Has excellent Git integration
feature/<name>- New featuresbugfix/<issue-number>-<description>- Bug fixeshotfix/<version>- Emergency fixes for released versionsrelease/<version>- Release preparation branches
# Create a new feature branch from the default branch
git checkout release/9.3
git pull
git checkout -b feature/my-feature-name-
Push your branch to origin:
git push -u origin feature/my-feature-name
-
Create a Pull Request on GitHub
-
Request review from team members
-
After approval and CI passes, merge the PR
See Pull Request Workflow for detailed guidelines.
If you are a release manager, additional setup may be required. Contact Jason Naylor for:
- Access to release automation scripts
- Build server access
- Installer signing certificates
# Use rebase by default when pulling
git config --global pull.rebase true
# Prune deleted remote branches on fetch
git config --global fetch.prune true
# Use diff3 conflict style for better merge conflict resolution
git config --global merge.conflictstyle diff3
# Enable helpful coloring
git config --global color.ui autoThese are set in the FieldWorks repository:
# Increase rename detection limits
git config diff.renameLimit 10000
git config merge.renameLimit 10000If you get "Permission denied" when pushing:
- Verify you have write access to the repository
- Check your SSH key is properly configured
- Ensure you're not pushing to a protected branch directly
If a branch you're looking for isn't available:
git fetch --all
git branch -a # List all branches including remote- CONTRIBUTING.md - Basic setup for all contributors
- Pull Request Workflow - How to submit changes
- Release Process - Release workflow documentation