Debugging with SourceLink

Information on SourceLink and how to use it to debug the Umbraco CMS source code

Microsoft and Visual Studio have introduced a new debugging technology called 'SourceLink' that enables source code debugging of certain .NET assemblies from NuGet. This feature has been enabled to allow developers to step into the native Umbraco CMS source code.

  1. Navigate to Tools -> Options -> Debugging -> General.

  2. In the General window, uncheck Enable Just My Code option and check Enable Source Link support option.

  3. Click OK to save the changes.

    Visual Studio 2019 Debug Settings for SourceLink

To read about SourceLink, you can take a look at the following websites:

  • Create a new .NET 5.0 Framework blank/empty website.

  • Install the latest Umbraco CMS 9.0+ Nuget Packages from Nuget.org

  • Create an IComposer or similar code in your new site/SLN that you want to F11/Step Into. Example Code Snippet to try with SourceLink

  • Prompt will appear and the original source code file is fetched directly from GitHub.

  • How far can you F11, also known as Step Into, and go down the rabbit hole of the Umbraco CMS source code?

using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Services;
using Umbraco.Extensions;

namespace WebApplication23
{
    public class MyComposer : IComposer
    {
        public void Compose(IUmbracoBuilder builder)
        {
            builder.Components().Append<MyComponent>();
        }
    }

    public class MyComponent : IComponent
    {
        private IContentService _contentService;

        public MyComponent(IContentService contentService)
        {
            _contentService = contentService;
        }

        public void Initialize()
        {
            // Add break point & F11 into me
            var root = _contentService.GetRootContent();

            foreach (var item in root)
            {
                // Add break point & F11 into me
                var udi = item.GetUdi();
                var foo = 5;
            }
        }

        public void Terminate()
        {
        }
    }
}

Last updated