<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jeremy Hutchinson</title>
    <description>The latest articles on DEV Community by Jeremy Hutchinson (@hutchcodes).</description>
    <link>https://dev.to/hutchcodes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F142291%2F23b95fcf-43fc-4fde-bab4-00f8e40c2a6e.jpg</url>
      <title>DEV Community: Jeremy Hutchinson</title>
      <link>https://dev.to/hutchcodes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hutchcodes"/>
    <language>en</language>
    <item>
      <title>App Settings in Client-Side Blazor</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Tue, 17 Dec 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/app-settings-in-client-side-blazor-2mmf</link>
      <guid>https://dev.to/hutchcodes/app-settings-in-client-side-blazor-2mmf</guid>
      <description>&lt;p&gt;I’ve been spoiled by Asp.Net and expect app settings to just work, but there is no easily configured app settings story for client-side Blazor &lt;em&gt;yet&lt;/em&gt;. What I’m looking for is the ability to set some settings on a per-environment (dev/test/beta/prod) through Azure App Service Application Settings. The goal is one build artifact that moves from environment to environment with zero changes.&lt;/p&gt;

&lt;p&gt;If you host the Blazor app as static files you’d need to change the app settings file for each different environment. So, I’ve gone with Asp.Net Core Web Hosted. I’ve named the app AppSettingsExample, so in the solution we have AppSettingsExample.Client (the WASM app), AppSettingsExample.Server (the host app), and AppSettingExample.Shared (code that is shared between the Client and Server)&lt;/p&gt;

&lt;h3&gt;
  
  
  Loading Client App Settings
&lt;/h3&gt;

&lt;p&gt;We’ll store and access the client app settings through the built-in configuration in AppSettingsExample.Server. To do that we’ll add an &lt;code&gt;appsettings.json&lt;/code&gt; with the following values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "ClientAppSettings": {
    "BaseApiUrl": "http://somesite.com/api"
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We’ll also create a class in the AppSettingsExample.Shared project to hold those configurations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class ClientAppSettings
{
    public string BaseApiUrl { get; set; }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then in the AppSettingsExample.Server’s Startup we’ll get a reference to the application’s configuration and store it in a local variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;private readonly IConfiguration _configuration;

public Startup(IConfiguration configuration)
{
    _configuration = configuration;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This allows us to use that config to load the settings from &lt;code&gt;appsettings.json&lt;/code&gt; and add it to the dependency injection config as a singleton.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton(_configuration.GetSection("ClientAppSettings").Get&amp;lt;ClientAppSettings&amp;gt;());
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Exposing the Settings to the Client
&lt;/h3&gt;

&lt;p&gt;There isn’t an easy way to just pass the settings into the client-side Blazor app, so we’ll need the app to request them from the server. We’ll create a &lt;code&gt;ClientAppSettingsController&lt;/code&gt; to AppSettingsExample.Server to serve up these settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Route("api/[controller]")]
[ApiController]
public class ClientAppSettingsController : ControllerBase
{
    private readonly ClientAppSettings _clientAppSettings;

    public ClientAppSettingsController(ClientAppSettings clientAppSettings)
    {
        _clientAppSettings = clientAppSettings;
    }

    [HttpGet]
    public ClientAppSettings GetClientAppSettings()
    {
        return _clientAppSettings;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Getting the Settings from the Client
&lt;/h3&gt;

&lt;p&gt;This is where I had the most trouble. I need to completely load these settings before the application can move on. If I did it asynchronously, it would start running the Initialization and ParameterSet methods on the current page before the settings load completed. If I tried to force the asynchronous web request to complete synchronously by calling &lt;code&gt;.Wait()&lt;/code&gt;, the application locked up.&lt;/p&gt;

&lt;p&gt;To get around this we can create a component that loads the settings and once loaded displays its child content. Then we can wrap our content in this component to make sure it doesn’t start initializing or setting parameters until the settings are loaded. First, we create &lt;code&gt;AppSettingsLoader.razor&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@using AppSettingExample.Shared
@inject HttpClient http

@if (IsLoaded)
{
    @ChildContent
}

@code 
{
    [Parameter]
    public RenderFragment ChildContent { get; set; }

    public bool IsLoaded { get; set; }

    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        if (!IsLoaded)
        {
            var appSettings = await http.GetJsonAsync&amp;lt;ClientAppSettings&amp;gt;("api/ClientAppSettings");
            AppSettings.BaseApiUrl = appSettings.BaseApiUrl;
            IsLoaded = true;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Because we can’t (or I couldn’t) load the &lt;code&gt;ClientAppSettings&lt;/code&gt; instance into the Dependency Injection to make it available throughout the application, I’m just putting the values in a static class.&lt;/p&gt;

&lt;p&gt;Now, in the MainLayout.razor we can wrap the &lt;code&gt;@body&lt;/code&gt; with the &lt;code&gt;AppSettingsLoader&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;AppSettingsLoader&amp;gt;
@Body
&amp;lt;/AppSettingsLoader&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And finally, from the &lt;code&gt;Index.razor&lt;/code&gt; page we can reference the &lt;code&gt;AppSettings.BaseApiUrl&lt;/code&gt;. To prove it out, I’ll just display it on the page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@page "/"
&amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;

@AppSettings.BaseApiUrl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And now we can set any setting we like in the ClientAppSettings sections of the AppSettings.json and it will be treated just like a normal app setting, including being able to set the setting through Configuration section of an Azure App Service.&lt;/p&gt;

</description>
      <category>blazor</category>
    </item>
    <item>
      <title>Visual Studio Tips - Code Definition Keyboard Shortcuts</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Wed, 24 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-code-definition-keyboard-shortcuts-21l3</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-code-definition-keyboard-shortcuts-21l3</guid>
      <description>&lt;p&gt;Often when we’re coding, we need to take a look at the definition or sometimes the implementation of a method we’re calling. Visual Studio has a few great ways to speed these tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Goto Definition
&lt;/h3&gt;

&lt;p&gt;To see the definition of a variable, class, interface or method, you place your cursor on the thing you want to see the definition of, and either press &lt;code&gt;F12&lt;/code&gt; or right click and choose &lt;code&gt;Goto Definition&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One catch with Goto Definition is that when you use it to go to a definition of a property or method, it goes it goes to the definition of the object as it is declared. That means that if you hit &lt;code&gt;F12&lt;/code&gt; on all of the &lt;code&gt;SayHello()&lt;/code&gt; methods below you would go to &lt;code&gt;IGreeter.SayHello&lt;/code&gt; for &lt;code&gt;greeter1&lt;/code&gt;, &lt;code&gt;SimpleGreeter.SayHello&lt;/code&gt; for &lt;code&gt;greeter2&lt;/code&gt; and &lt;code&gt;greeter3&lt;/code&gt; and &lt;code&gt;WorldGreeter.SayHello()&lt;/code&gt; for &lt;code&gt;greeter4&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;            IGreeter greeter1 = new SimpleGreeter();
            Console.WriteLine(greeter1.SayHello());

            SimpleGreeter greeter2 = new SimpleGreeter();
            Console.WriteLine(greeter2.SayHello());

            SimpleGreeter greeter3 = new WorldGreeter();
            Console.WriteLine(greeter3.SayHello());

            WorldGreeter greeter4 = new WorldGreeter();
            Console.WriteLine(greeter4.SayHello());

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Peek Definition
&lt;/h3&gt;

&lt;p&gt;If you wanted to take a peek at the definition without navigating to its definition, you can use &lt;code&gt;Alt+F12&lt;/code&gt; or right click and choose &lt;code&gt;Peek Definition&lt;/code&gt;. This brings up the definition in a little window within the code editor. You can still scroll through the code of the definition without losing your place in the code you are editing. &lt;code&gt;Esc&lt;/code&gt; closes the Peek window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3D47O4yw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/PeekDefinition.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3D47O4yw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/PeekDefinition.jpg" alt="alt text" title="View hierarchy window"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Goto Implementation
&lt;/h3&gt;

&lt;p&gt;If you want to view the implementation of a method or property rather than its definition you can press &lt;code&gt;Ctrl+F12&lt;/code&gt; or right click and choose &lt;code&gt;Goto Implementation&lt;/code&gt;. If there is only one implementation for a method, Visual Studio takes you directly to the implementation. If there are multiple implementations, it brings up a window that lists the implementations. You can view the implementations by using your arrow keys or by clicking on them.&lt;/p&gt;

&lt;p&gt;For the code above it would go directly to the implementation for &lt;code&gt;greeter4.SayHello()&lt;/code&gt;, for all the others it would bring up the implementation selector window.&lt;/p&gt;

&lt;h3&gt;
  
  
  Find All References
&lt;/h3&gt;

&lt;p&gt;Sometimes it’s helpful to see what other code is referencing a method or property. For that, you can use the official shortcut &lt;code&gt;Ctrl+K+R&lt;/code&gt;, or the unlisted shortcut &lt;code&gt;Shift+F12&lt;/code&gt;, or you can right click and choose &lt;code&gt;Find All References&lt;/code&gt;. This brings up a window that lists all the references to that method. This displays the same list regardless of how the object is declared.&lt;/p&gt;

&lt;h3&gt;
  
  
  View Call Hierarchy
&lt;/h3&gt;

&lt;p&gt;Sometimes it is handy to be able to see what code is calling a method or property, and what code led to that call. To see that you can right click on the method or property you’re interested in and choose ‘View Call Hierarchy’ or &lt;code&gt;Ctrl+K, Ctrl+T&lt;/code&gt;. This brings up a tree view with the method or property you’re interested in and allows you to dig in until you get to the initial action that caused the method or property to be called. In the case below we can see that the &lt;code&gt;SayHello()&lt;/code&gt; method was called by the &lt;code&gt;Run()&lt;/code&gt; method which was called by the &lt;code&gt;Main([string])&lt;/code&gt;. In the right pane, we can see the line and column that &lt;code&gt;Run()&lt;/code&gt; is called from and double-clicking that takes us to that location.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T0uipK5Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/ViewCallHierarchy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T0uipK5Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/ViewCallHierarchy.jpg" alt="alt text" title="View hierarchy window"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>csharp</category>
      <category>dotnet</category>
      <category>devtips</category>
    </item>
    <item>
      <title>Visual Studio Tips - Bulk Editing Shortcuts</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Mon, 15 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-bulk-editing-shortcuts-4gff</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-bulk-editing-shortcuts-4gff</guid>
      <description>&lt;p&gt;One of the most tedious things we do as developers is making repetitive changes. Maybe we need to set a handful of properties on a single object, or perhaps we want to add a property to the instantiation of a bunch of test objects. Here are a few shortcuts to help you with that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Caret Editing
&lt;/h3&gt;

&lt;p&gt;Let’s start with adding a property to the instantiation of some test objects. This is often the perfect scenario for “muti-caret editing.” To start this you can do two things. The first is to position your caret where you’d like to start editing on the first line, then hold &lt;code&gt;Shift+Alt&lt;/code&gt; and either use your arrows or the mouse to select a column or area. The beautiful thing about this method is it allows you to select a block of text to replace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LNQo4XOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/MultiCaratReplace.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LNQo4XOz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/MultiCaratReplace.gif" alt="alt text" title="Using Shift Alt to replace text on multiple lines"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The drawback of using &lt;code&gt;Shift+Alt&lt;/code&gt; is that the columns you want to edit must line up vertically. But frequently that isn’t the case, and that’s where &lt;code&gt;Ctrl+Alt&lt;/code&gt; comes into play. With &lt;code&gt;Ctrl+Alt&lt;/code&gt; you set the multiple carets by holding &lt;code&gt;Ctrl+Alt&lt;/code&gt; and clicking where you want to edit. You can then insert text in all those places, even multiple times on the same line.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gkWrsnLJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/MultiCaratInsert.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gkWrsnLJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/MultiCaratInsert.gif" alt="alt text" title="Using Control Alt to insert text on multiple lines"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Duplicate Line
&lt;/h3&gt;

&lt;p&gt;Those work great if the lines you want to edit already exist, or if you know how many lines you need to create at once. But I often find myself wanting to duplicate a line and make a few changes to it. For that, you can use the &lt;code&gt;Ctrl+E, Ctrl+V&lt;/code&gt; keyboard shortcut which duplicates the line your cursor is on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TsOcFpaj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DuplicateLine.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TsOcFpaj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DuplicateLine.gif" alt="alt text" title="Duplicate line with Control E, Control V"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clipboard Ring
&lt;/h3&gt;

&lt;p&gt;Another feature I find very useful when I’m making repeated edits is the Clipboard Ring. When you hit &lt;code&gt;Ctrl+Shift+V&lt;/code&gt;, it brings up your clipboard ring which includes the last nine things you’ve copied or cut (more recently used at the top). You can then select the item you want to paste by typing the number, using your arrow keys or clicking with your mouse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--66FDCoxo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/ClipboardRing.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--66FDCoxo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/ClipboardRing.gif" alt="alt text" title="Using Clipboard Ring"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This can be useful when you need to copy multiple things from one file to another. You no longer need to flip back and forth, just copy, copy, paste, paste.&lt;/p&gt;

&lt;h3&gt;
  
  
  Insert File as Text
&lt;/h3&gt;

&lt;p&gt;This last feature I just stumbled upon while looking for something in the Edit menu. It’s not something I expect to use a lot, but it might be useful. In the edit menu is a command “Insert File as Text”, and the command does just what it says.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vHlDEhbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/InsertFileAsText.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vHlDEhbm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/InsertFileAsText.gif" alt="alt text" title="Using Edit, Insert File as Text to insert a file as text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>productivity</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Visual Studio Tips - Test Explorer</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Mon, 08 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-test-explorer-2ik7</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-test-explorer-2ik7</guid>
      <description>&lt;p&gt;Liquid syntax error: 'raw' tag was never closed&lt;/p&gt;
</description>
      <category>vstips</category>
      <category>visualstudio</category>
      <category>csharp</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Visual Studio Tips - Window Management</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Thu, 04 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-window-management-4db4</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-window-management-4db4</guid>
      <description>&lt;p&gt;Everyone has their own favorite layout for the various tool windows in Visual Studio. But sometimes you want different Window layouts based on what you’re working on, or whether you have external screens attached to your laptop.&lt;/p&gt;

&lt;p&gt;First the basics of tool windows.&lt;/p&gt;

&lt;p&gt;You can click and hold any window by its header (or its tab if it is already docked) and drag it. While drag it you will see a bunch of little blue boxes indicating where it can docked, if you drop it on one of those it will dock, otherwise it will float and can even be moved to a second monitor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XVQBFtdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/WindowsDocking.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XVQBFtdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/WindowsDocking.gif" alt="alt text" title="Animation of docking a window"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a window is docked, you can Pin a window with the Thumbtack icon to make it always visible, or if it’s already pinned you can Unpin it to make it Autohide.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--thR0sUqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/WindowPinUnpin.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--thR0sUqM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/WindowPinUnpin.jpg" alt="alt text" title="Window header with pin/unpin icon highlighted"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Save Your Window Layouts
&lt;/h3&gt;

&lt;p&gt;Once you have all your windows where you want them you can Save the layout by going to Window -&amp;gt; Save Window Layout. You’ll be prompted to name your layout. This saves which windows are open, where they are docked, whether they are pinned or autohidden, &lt;strong&gt;and&lt;/strong&gt; their size.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0Q7nbLft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/WindowSaveLayout.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0Q7nbLft--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/WindowSaveLayout.jpg" alt="alt text" title="Window Save Layout menu item"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve save a layout or two, you can either go back to the Window menu, click Apply Window Layout and select your layout from the list. Or you can use the hot key combination for the layout (ie &lt;code&gt;Ctrl+Shift+1&lt;/code&gt; for layout 1)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YwERL83A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/WindowApplyLayout.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YwERL83A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/WindowApplyLayout.jpg" alt="alt text" title="Window Apply Layout menu item"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Catch
&lt;/h3&gt;

&lt;p&gt;The one slightly unintuitive part of saving window layouts is that when you save a layout, that is for both the layout for editing &lt;em&gt;and&lt;/em&gt; the layout for debugging which are often different. So to set a layout, you need to get all the windows where you want them in edit mode, then start a debug session to get all of those windows where you want them, then save the layout. Otherwise you’ll find yourself needing to switch layouts every time you go from editing to debugging and back.&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
      <category>productivity</category>
      <category>visualstudio</category>
    </item>
    <item>
      <title>Visual Studio Tips - Keyboard Shortcuts for Debugging</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Wed, 03 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-keyboard-shortcuts-for-debugging-4e77</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-keyboard-shortcuts-for-debugging-4e77</guid>
      <description>&lt;p&gt;There are literally hundreds of keyboard shortcuts in Visual Studio, and few people have them all memorized, but it is definitely worthwhile to memorize at least a few. Here are some that are useful while you’re debugging.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;F5&lt;/code&gt; - Run - This both starts the debugging session and continues the debugging session if the session is paused.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;F10&lt;/code&gt; - Step Over - This runs just the next statement. If the next statement is a function call, it runs the whole function before pausing execution again (unless there is a breakpoint in the function).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;F11&lt;/code&gt; - Step Into - This runs just the next statement. If the next statement is a function call, it will bring you to that function and pause before the first statement in there is run.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Shift+F11&lt;/code&gt; - Step Out - This runs until the code returns from the currently running function. It’s really handy when you are done debugging a function, but that function still has a lot of statements to execute.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl+F10&lt;/code&gt; - Run to Cursor - This allows you to move the cursor to a line of code then run until the debugger gets there. This is handy if you want to skip over a block of code. You could also press &lt;code&gt;F9&lt;/code&gt; then &lt;code&gt;F5&lt;/code&gt; which would add a Breakpoint at your cursor, then run to it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl+Shift+F10&lt;/code&gt; - Set Next Statement - This sets the line your cursor is on as the next statement the debugger will run. Really handy if you missed something and want to backup and debug it again.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Alt+Num *&lt;/code&gt; - Show Next Statement - Sorry laptop users, this one only works with the &lt;code&gt;*&lt;/code&gt; on the number pad. This one takes you to the next statement that will run. Really handy if you’ve been sifting through code and want to quickly return to your debugging without executing any statements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Shift+F5&lt;/code&gt; - Stop Debugging - Ends your debugging session.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl+Shift+F5&lt;/code&gt; - Restart Debugging - Getting the message “Edits were made to the code which cannot be applied while debugging”? This will quickly restart the debug session and have you on your way.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these are of course available through the UI, but if you often find yourself looking for them in the command bar, or right clicking and trying to find them in the context menu, memorizing at least some of these shortcuts will keep you focused on the debugging.&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
      <category>productivity</category>
      <category>visualstudio</category>
    </item>
    <item>
      <title>Visual Studio Tips - Trace Points</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Tue, 02 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-trace-points-4kd6</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-trace-points-4kd6</guid>
      <description>&lt;p&gt;Tracepoints are not a new feature, they’ve been in Visual Studio since 2005, but they are a new feature to me. I just stumbled on them while researching for this series of posts. Tracepoints allow you to turn a Breakpoint into what is essentially a call to &lt;code&gt;Debug.WriteLine()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A Tracepoint is just a special kind of Breakpoint that allows you to log a message to the Output window and continue execution. This can be really helpful in situations where stopping at a breakpoint makes reproducing a bug difficult or impossible.&lt;/p&gt;

&lt;p&gt;And since Tracepoints are just a kind of Breakpoint, you can also put conditions on them and manage them just like Breakpoints. To learn more about Breakpoints see this &lt;a href="https://dev.to/2019/03/visual-studio-break-points/"&gt;post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To set a Tracepoint, you set a normal breakpoint, then go into the settings of that Breakpoint and check &lt;code&gt;Actions&lt;/code&gt;. That will display a textbox for you to create your log message and another checkbox to specify whether execution should stop or continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FTracepoints.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FTracepoints.gif" title="Visual of creating and using a Tracepoint." alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Visual Studio Tips - Using Data Tips</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Mon, 01 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-using-data-tips-4bh4</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-using-data-tips-4bh4</guid>
      <description>&lt;p&gt;Data tips, the Visual Studio feature that allows you to hover over a variable and see its value while debugging, can be super useful. Here are a few tricks that you may not know about them.&lt;/p&gt;

&lt;p&gt;Have you ever been looking in the DataTips then need to look at the code behind them? Great news, you can. Just press and hold &lt;code&gt;Ctrl&lt;/code&gt; key, the DataTips become transparent until you release the &lt;code&gt;Ctrl&lt;/code&gt; key. This is particularly useful when you’ve drilled down a bit in the DataTip or you’re trying to compare&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KRczt_iE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsTransparent.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KRczt_iE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsTransparent.gif" alt="alt text" title="Visual of making the data tips transparent."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another thing you can do is either pin the DataTips. This persists the DataTip so you can navigate to other code, restart debugging or even restart Visual Studio and still have the DataTip be there when you break in that block the next time. Once you’ve pinned a DataTip you can move the data tip around by clicking and dragging, you can remove it by clicking the &lt;code&gt;x&lt;/code&gt;, or you can float the DataTip by clicking the pin icon. This allows you to view that DataTip while you scroll the code or view another file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9EmAdIWc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsPinFloat.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9EmAdIWc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsPinFloat.gif" alt="alt text" title="Visual of pinning, floating and closing a DataTip"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve pinned a DataTip, you can add expressions to that DataTip by right-clicking on the DataTip and choosing “Add Expression”. This can let you pin something more useful than what might normally display for an object. In this case, the &lt;a href="https://dev.to/2019/03/visual-studio-tips-debugger-display/"&gt;DebuggerDisplay&lt;/a&gt; shows &lt;code&gt;LastName, FirstName&lt;/code&gt;, but we can add an expression to display the Person object as &lt;code&gt;FirstName LastName&lt;/code&gt;. This is really handy for when you can’t change the &lt;code&gt;DebuggerDisplay&lt;/code&gt; of an object.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZcOKvRdS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsAddExpression.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZcOKvRdS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsAddExpression.gif" alt="alt text" title="Visual of adding a DataTip comment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other interesting feature of DataTips is that you can add comments to them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XyIzKr4T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsComment.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XyIzKr4T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/DataTipsComment.gif" alt="alt text" title="Visual of adding a DataTip comment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But what good are comments if you can’t share them? Well, you can export your DataTips to an XML file and either share them or check them in with your source. You could have a set of DataTips that you load up whenever you’re facing a common debugging scenario.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u33D9yTc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/DataTipsImportExport.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u33D9yTc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/DataTipsImportExport.jpg" alt="alt text" title="Visual of adding a DataTip comment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might also notice there are options in there to “Clear All DataTips”, and “Clear All DataTips from [CurrentFileName]”.&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Visual Studio Tips - Solution Explorer Search</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Fri, 29 Mar 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-solution-explorer-search-34op</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-solution-explorer-search-34op</guid>
      <description>&lt;p&gt;Solution Explorer Search has been in Visual Studio for a while, but there are a few features that I think many developers overlook (myself included). Here are a few that you might have missed.&lt;/p&gt;

&lt;p&gt;By default, the search will search &lt;code&gt;Ctrl+;&lt;/code&gt; both the file names and the contents. This is what we want most of the time, but it is possible to search just the file names.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FSolutionExplorerSearchNoContents.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FSolutionExplorerSearchNoContents.gif" title="Visual of disabling search within file contents." alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some other filters you can apply to your search are Open Files &lt;code&gt;Ctrl+[,O&lt;/code&gt; and Pending Changes &lt;code&gt;Ctrl+[,P&lt;/code&gt;. These can be particularly useful when you’re working on a feature that requires changes across multiple files in different layers of your solution. In the gif below I show these filters being used via the UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FSolutionExplorerSearchFilters.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FSolutionExplorerSearchFilters.gif" title="Visual of using search search filters." alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Visual Studio Tips - Breakpoints</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Thu, 28 Mar 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-breakpoints-d5f</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-breakpoints-d5f</guid>
      <description>&lt;p&gt;Most of us know about Breakpoints and how to use them, but there are a few under-utilized features of breakpoints that you should be aware of.&lt;/p&gt;

&lt;p&gt;You can set a simple breakpoint in a number of ways&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move the cursor to the line you want to break on and hit the F9 key&lt;/li&gt;
&lt;li&gt;Right click on the line of code&lt;/li&gt;
&lt;li&gt;Clicking in the gutter&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once you have a breakpoint set you can do a few things with it. First, you can disable it, if you don’t need the breakpoint right now, but think you might come back to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FBreakpointDisable.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FBreakpointDisable.gif" title="Visual of disabling a breakpoint." alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also disable all breakpoints from Debug -&amp;gt; Disable all breakpoint. This is handy for when you need to run and get reset, then re-enable all breakpoints and start your debugging again.&lt;/p&gt;

&lt;p&gt;You can also make the breakpoint conditional based on the value of a variable or any boolean expression (yes, you can use the &lt;a href="https://dev.to/2019/03/visual-studio-tips-no-side-effects-function-eval/"&gt;No Side Effects&lt;/a&gt; formatter). This can be helpful if you want to break when the value of a variable is a certain value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FBreakpointConditional.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FBreakpointConditional.gif" title="Visual of creating a conditional breakpoint based on a boolean expression." alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also make the breakpoint conditional base on the number of times a breakpoint is hit. For example, you might know that the first time a breakpoint is hit isn’t interesting to your debugging scenario but every time after that is interesting. You could set hit count &amp;gt; 1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FBreakpointHitcount.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhutchcodes.net%2Fimg%2F2019%2FBreakpointHitcount.gif" title="Visual of creating a conditional breakpoint based on hit count." alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also filter your breakpoints to a single thread or to exclude a thread, either by name or id.&lt;/p&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Visual Studio Tips - Source Map in the Scroll Bar</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Wed, 27 Mar 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-source-map-in-the-scroll-bar-3o97</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-source-map-in-the-scroll-bar-3o97</guid>
      <description>&lt;p&gt;Do you find yourself scrolling up and down in a large file in Visual Studio? “Show Source Maps in Scroll Bar” gives you a 1000 foot view of your code and allows you to navigate with a simple click.&lt;/p&gt;

&lt;p&gt;To turn this feature on go to Tool -&amp;gt; Options -&amp;gt; Text Editor -&amp;gt; Scroll Bars. In the Behavior section select “Use map mode for vertical scroll bar”. I also like to select “Show Preview Tooltip” as well. You can choose your own width, but I’ve been happy with “Medium”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W4GQL3Rl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/TurnOnSourceMap.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W4GQL3Rl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://hutchcodes.net/img/2019/TurnOnSourceMap.jpg" alt="alt text" title="Visual of turning on Source Map scroll bar."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once that’s done you can navigate your code like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lZ5zE7yS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/SourceMapScrollBar.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lZ5zE7yS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://hutchcodes.net/img/2019/SourceMapScrollBar.gif" alt="alt text" title="Visual of turning on using the Source Map scroll bar."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that both there are 3 artifacts on the Source Map.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A white bar that indicates where you are in the document&lt;/li&gt;
&lt;li&gt;A white block on the left side of the source map to indicate a bookmark&lt;/li&gt;
&lt;li&gt;A red block on the left side of the source map to indicate a breakpoint&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>vstips</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Visual Studio Tips - Evaluate a Function Without Side Effects</title>
      <dc:creator>Jeremy Hutchinson</dc:creator>
      <pubDate>Tue, 26 Mar 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/hutchcodes/visual-studio-tips-evaluate-a-function-without-side-effects-3mal</link>
      <guid>https://dev.to/hutchcodes/visual-studio-tips-evaluate-a-function-without-side-effects-3mal</guid>
      <description>&lt;p&gt;Liquid syntax error: 'raw' tag was never closed&lt;/p&gt;
</description>
      <category>vstips</category>
      <category>csharp</category>
    </item>
  </channel>
</rss>
