It's no secret, I like Cake. When I have to write a script to build my source code, I use Cake. On my most recent expedition writing a Cake script to publish a UWP application, I noticed Hockey App publish failed, Cake.HockeyApp was throwing an exception.
When I realized it wasn't the way my script interacted with Cake, but an issue with the addin itself, I immediately hit the Cake Gitter channel. I was in search of some documentation that allowed me to debug a Cake addin so I could address the issue that I was having Friday afternoon at half past quitting time.
One of the members of the project team suggested the following:
build your addin in debug, reference it from Cake script and attach to process from VS. Start Cake.exe with
--debugflag so you have time to attach to process
Now that I know where to start I created myself a task list:
- Change build.ps1 to run with --debug flag
- Build addin source
- Load addin from source in build.cake
- Find the error and fix it!
For the purposes of this post, I will cover steps 1 and 3. Step 2 is no more than building the addin source code in Visual Studio.
Changing the bootstrapper
This is the easiest part. I modified the
Invoke-Expression line of the bootstrapper to resemble the following.
NOTE: We should revert this before we commit.
Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs --debug"
And on the next execution of
Preparing to run build script... Running build script... Attach debugger to process 80276 to continue
Loading the addin from source
In the build.cake file I add the following preprocessor directive
I navigate back to Visual Studio Debug -> Attach to Process (or Ctrl + Alt + P), pick the Cake execution with the corresponding process id and I hit break points!!!
Now I can debug the issue I am seeing, determine if it is user error or the addin, and resolve it either way!