Debugging with SourceLink

    Microsoft and Visual Studio have introduced a new debugging technology called 'SourceLink' that enables source code debugging of certain .NET assemblies from NuGet. In version Umbraco 8.1+, 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 IUserComposer 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. Visual Studio 2019 SourceLink dialog
    • How far can you F11 aka 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()
            {
            }
        }
    }