<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <atom:link rel="self" type="application/rss+xml" href="https://imar.spaanjaars.com/rss" />
    <title>Imar.Spaanjaars.Com</title>
    <link>https://imar.spaanjaars.com/rss</link>
    <description>RSS feed with recent stuff posted at https://imar.spaanjaars.com/</description>
    <copyright>Imar Spaanjaars (c) 2020</copyright>
    <language>en</language>
    <item>
      <title>Fixing the error "rzc rewritecss exited with code -2147450730."</title>
      <link>https://imar.spaanjaars.com/635/fixing-the-error-rzc-rewritecss-exited-with-code-2147450730</link>
      <description>&lt;p&gt;While working on an existing .NET Core project I ran into a number of SSL issues (where suddenly certain ports on my localhost would no longer serve up a site with a valid SSL certificate). In order to rule out an issue with my existing project, I created a new .NET Core 6.0 web application. However, that failed to compile and presented me with this error message:&lt;/p&gt;
	  &lt;div class="CodeBorder"&gt;
	    &lt;pre class="CodeForeground"&gt;rzc rewritecss exited with code -2147450730.&lt;/pre&gt;
      &lt;/div&gt;
&lt;p&gt;I searched Google and found a few references to this error but they all seemed to deal with .NET Core 3.x and none of the answers worked for me.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/635/fixing-the-error-rzc-rewritecss-exited-with-code-2147450730</guid>
      <pubDate>Wed, 16 Feb 2022 13:01:37 GMT</pubDate>
    </item>
    <item>
      <title>Introducing a new article series: Building a NuGet packages architecture</title>
      <link>https://imar.spaanjaars.com/634/introducing-a-new-article-series-building-a-nuget-packages-architecture</link>
      <description>&lt;p&gt;I just finished writing a new article series on building a modern software architecture using NuGet packages and feeds. All six parts in the series have now been published. 
&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Blogs</category>
      <category>Imar's Blogs</category>
      <guid>https://imar.spaanjaars.com/634/introducing-a-new-article-series-building-a-nuget-packages-architecture</guid>
      <pubDate>Mon, 31 Jan 2022 16:30:41 GMT</pubDate>
    </item>
    <item>
      <title>Building a NuGet Packages Architecture Part 6 - Enhancing your packages</title>
      <link>https://imar.spaanjaars.com/633/building-a-nuget-packages-architecture-part-6-enhancing-your-packages</link>
      <description>&lt;p&gt;Welcome to the last episode in the article series on  building a NuGet packages architecture for your own software development  purposes. This is the last part in a series of 6 articles about building a  software architecture based on NuGet packages and feeds. In this series you  will see:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to refactor your codebase to make it work  with packages&lt;/li&gt;
          &lt;li&gt;How to build packages on your local machine&lt;/li&gt;
          &lt;li&gt;How to build packages using an Azure build  pipeline and add the generated packages to a feed&lt;/li&gt;
          &lt;li&gt;How to consume your packages in your  applications&lt;/li&gt;
          &lt;li&gt;Different ways to improve usage of your packages  and types with service registration methods&lt;/li&gt;
          &lt;li&gt;Various tips and tricks to enhance your package  and how to use them&lt;/li&gt;
        &lt;/ul&gt;
        &lt;div class="toc d-print-none"&gt;
        &lt;p&gt;You'll find all the articles in the series here:&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;&lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;Building packages&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Adding packages to a feed using a pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/631/building-a-nuget-package-architecture-part-4-consuming-packages-and-managing-changes"&gt;Consuming packages and managing changes&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/632/building-a-nuget-package-architecture-part-5-service-registration-methods"&gt;Service Registration Methods&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;Enhancing your packages&lt;/a&gt; &lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;&lt;/a&gt; (you're reading it now)&lt;/li&gt;
        &lt;/ol&gt;
        &lt;/div&gt;
        &lt;p&gt;In this article I'll wrap up the series by providing some  additional tips and tricks to improve your packages, their usability and your  development process using packages in general. In particular, I'll discuss:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to add additional metadata and an icon to  your package&lt;/li&gt;
          &lt;li&gt;How to add XML documentation for the types in  your packages&lt;/li&gt;
          &lt;li&gt;How to add unit tests and run them as part of  your build pipeline&lt;/li&gt;
          &lt;li&gt;How to debug the code in your  packages&lt;/li&gt;
        &lt;/ul&gt;
        &lt;p&gt;If you're interested in purchasing the entire article series now as a 60+ page PDF document, check out this post: &lt;a href="/634/introducing-a-new-article-series-building-a-nuget-packages-architecture"&gt;Introducing a new article series: Building a NuGet packages architecture&lt;/a&gt;.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/633/building-a-nuget-packages-architecture-part-6-enhancing-your-packages</guid>
      <pubDate>Thu, 21 Apr 2022 09:05:43 GMT</pubDate>
    </item>
    <item>
      <title>Building a NuGet Packages Architecture Part 5 – Service Registration Methods</title>
      <link>https://imar.spaanjaars.com/632/building-a-nuget-packages-architecture-part-5-service-registration-methods</link>
      <description>&lt;p&gt;This is part 5 in a series of 5 articles about building a  software architecture based on NuGet packages and feeds. In this series you  will see:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to refactor your codebase to make it work  with packages&lt;/li&gt;
          &lt;li&gt;How to build packages on your local machine&lt;/li&gt;
          &lt;li&gt;How to build packages using an Azure build  pipeline and add the generated packages to a feed&lt;/li&gt;
          &lt;li&gt;How to consume your packages in your  applications&lt;/li&gt;
          &lt;li&gt;Different ways to improve usage of your packages  and types with service registration methods&lt;/li&gt;
          &lt;li&gt;Various tips and tricks to enhance your package  and how to use them&lt;/li&gt;
        &lt;/ul&gt;
                &lt;div class="toc d-print-none"&gt;

        &lt;p&gt;You'll find all the articles in the series here:&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;&lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;Building packages&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Adding packages to a feed using a pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/631/building-a-nuget-package-architecture-part-4-consuming-packages-and-managing-changes"&gt;Consuming packages and managing changes&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/632/building-a-nuget-package-architecture-part-5-service-registration-methods"&gt;Service Registration Methods&lt;/a&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;&lt;/a&gt; &lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;&lt;/a&gt; (you're reading it now)&lt;/li&gt;
          &lt;li&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;Enhancing your packages&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;/div&gt;
        &lt;p&gt;In this part you see different ways to add service  registration methods to your packages, making consuming and configuring your  types simple and straightforward.&lt;/p&gt;
        &lt;p&gt;If you're interested in purchasing the entire article series now as a 60+ page PDF document, check out this post: &lt;a href="/634/introducing-a-new-article-series-building-a-nuget-packages-architecture"&gt;Introducing a new article series: Building a NuGet packages architecture&lt;/a&gt;.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/632/building-a-nuget-packages-architecture-part-5-service-registration-methods</guid>
      <pubDate>Sun, 20 Mar 2022 14:38:35 GMT</pubDate>
    </item>
    <item>
      <title>Building a NuGet Packages Architecture Part 4 - Consuming packages and managing changes</title>
      <link>https://imar.spaanjaars.com/631/building-a-nuget-packages-architecture-part-4-consuming-packages-and-managing-changes</link>
      <description>&lt;p&gt;This is part 4 in a series of 6 articles about building a  software architecture based on NuGet packages and feeds. In this series you  will see:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to refactor your codebase to make it work  with packages&lt;/li&gt;
          &lt;li&gt;How to build packages on your local machine&lt;/li&gt;
          &lt;li&gt;How to build packages using an Azure build  pipeline and add the generated packages to a feed&lt;/li&gt;
          &lt;li&gt;How to consume your packages in your  applications&lt;/li&gt;
          &lt;li&gt;Different ways to improve usage of your packages  and types with service registration methods&lt;/li&gt;
          &lt;li&gt;Various tips and tricks to enhance your package  and how to use them&lt;/li&gt;
        &lt;/ul&gt;
                &lt;div class="toc d-print-none"&gt;

        &lt;p&gt;You'll find all the articles in the series here:&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;&lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;Building packages&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Adding packages to a feed using a pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/631/building-a-nuget-package-architecture-part-4-consuming-packages-and-managing-changes"&gt;Consuming packages and managing changes&lt;/a&gt; &lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;&lt;/a&gt; (you're reading it now)&lt;/li&gt;
          &lt;li&gt;&lt;a href="/632/building-a-nuget-package-architecture-part-5-service-registration-methods"&gt;Service Registration Methods&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;Enhancing your packages&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;/div&gt;
        &lt;p&gt;In this article I'll complete the process of migrating to a  package-based architecture by updating the demo application. I'll remove all  project references and replace them with a package reference instead.&lt;/p&gt;
        &lt;p&gt;If you're interested in purchasing the entire article series now as a 60+ page PDF document, check out this post: &lt;a href="/634/introducing-a-new-article-series-building-a-nuget-packages-architecture"&gt;Introducing a new article series: Building a NuGet packages architecture&lt;/a&gt;.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/631/building-a-nuget-packages-architecture-part-4-consuming-packages-and-managing-changes</guid>
      <pubDate>Wed, 02 Mar 2022 14:33:02 GMT</pubDate>
    </item>
    <item>
      <title>Building a NuGet Packages Architecture Part 3 - Adding packages to a feed using a pipeline in Azure DevOps</title>
      <link>https://imar.spaanjaars.com/630/building-a-nuget-packages-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops</link>
      <description>&lt;p&gt;This is part 3 in a series of 6 articles about building a  software architecture based on NuGet packages and feeds. In this series you  will see:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to refactor your codebase to make it work  with packages&lt;/li&gt;
          &lt;li&gt;How to build packages on your local machine&lt;/li&gt;
          &lt;li&gt;How to build packages using an Azure build  pipeline and add the generated packages to a feed&lt;/li&gt;
          &lt;li&gt;How to consume your packages in your  applications&lt;/li&gt;
          &lt;li&gt;Different ways to improve usage of your packages  and types with service registration methods&lt;/li&gt;
          &lt;li&gt;Various tips and tricks to enhance your package  and how to use them&lt;/li&gt;
        &lt;/ul&gt;
                &lt;div class="toc d-print-none"&gt;

        &lt;p&gt;You'll find all the articles in the series here:&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;&lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;Building packages&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Adding packages to a feed using a pipeline in Azure DevOps&lt;/a&gt; &lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;&lt;/a&gt; (you're reading it now)&lt;/li&gt;
          &lt;li&gt;&lt;a href="/631/building-a-nuget-package-architecture-part-4-consuming-packages-and-managing-changes"&gt;Consuming packages and managing changes&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/632/building-a-nuget-package-architecture-part-5-service-registration-methods"&gt;Service Registration Methods&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;Enhancing your packages&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;/div&gt;
        &lt;p&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;In the previous article you saw how to create packages from  your projects&lt;/a&gt; on your local machine. In this article I'll take these concepts a  step further and set up a build pipeline in Azure DevOps to automatically build  NuGet packages and publish them to a feed so they can be accessed by Visual  Studio and other tools.&lt;/p&gt;
        &lt;p&gt;If you're interested in purchasing the entire article series now as a 60+ page PDF document, check out this post: &lt;a href="/634/introducing-a-new-article-series-building-a-nuget-packages-architecture"&gt;Introducing a new article series: Building a NuGet packages architecture&lt;/a&gt;.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/630/building-a-nuget-packages-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops</guid>
      <pubDate>Thu, 17 Feb 2022 10:02:01 GMT</pubDate>
    </item>
    <item>
      <title>Building a NuGet Packages Architecture Part 2 - Building packages</title>
      <link>https://imar.spaanjaars.com/629/building-a-nuget-packages-architecture-part-2-building-packages</link>
      <description>&lt;p&gt;This is part 2 in a series of 6 articles about building a  software architecture based on NuGet packages and feeds. In this series you  will see:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to refactor your codebase to make it work  with packages&lt;/li&gt;
          &lt;li&gt;How to build packages on your local machine&lt;/li&gt;
          &lt;li&gt;How to build packages using an Azure build pipeline  and add the generated packages to a feed&lt;/li&gt;
          &lt;li&gt;How to consume your packages in your applications&lt;/li&gt;
          &lt;li&gt;Different ways to improve usage of your packages  and types with service registration methods&lt;/li&gt;
          &lt;li&gt;Various tips and tricks to enhance your package  and how to use them&lt;/li&gt;
        &lt;/ul&gt;
                &lt;div class="toc d-print-none"&gt;

        &lt;p&gt;You'll find all the articles in the series here:&lt;/p&gt;
        &lt;ol&gt;
          &lt;li&gt;&lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;Building packages&lt;/a&gt; &lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;&lt;/a&gt; (you're reading it now)&lt;/li&gt;
          &lt;li&gt;&lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Adding packages to a feed using a pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/631/building-a-nuget-package-architecture-part-4-consuming-packages-and-managing-changes"&gt;Consuming packages and managing changes&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/632/building-a-nuget-package-architecture-part-5-service-registration-methods"&gt;Service Registration Methods&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;Enhancing your packages&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;/div&gt;
        &lt;p&gt;In this second article, I'll take the application I refactored  in part 1 and build packages locally from the projects I extracted out to a  separate solution. I'll also show you how to test and use your packages  locally. &lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Part 3 then shows you how to automate this process&lt;/a&gt; with an Azure DevOps  build pipeline.&lt;/p&gt;
        &lt;p&gt;If you're interested in purchasing the entire article series now as a 60+ page PDF document, check out this post: &lt;a href="/634/introducing-a-new-article-series-building-a-nuget-packages-architecture"&gt;Introducing a new article series: Building a NuGet packages architecture&lt;/a&gt;.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/629/building-a-nuget-packages-architecture-part-2-building-packages</guid>
      <pubDate>Tue, 08 Feb 2022 14:49:38 GMT</pubDate>
    </item>
    <item>
      <title>Building a NuGet Packages Architecture Part 1 - Introduction</title>
      <link>https://imar.spaanjaars.com/628/building-a-nuget-packages-architecture-part-1-introduction</link>
      <description>&lt;p&gt;This is part 1 in a series of 6 articles about building a  software architecture based on NuGet packages and feeds. In this series you  will see:&lt;/p&gt;
        &lt;ul&gt;
          &lt;li&gt;How to refactor your codebase to make it work  with custom NuGet packages&lt;/li&gt;
          &lt;li&gt;How to build packages on your local machine&lt;/li&gt;
          &lt;li&gt;How to build packages using an Azure build pipeline  and add the generated packages to a feed&lt;/li&gt;
          &lt;li&gt;How to consume your packages in your applications&lt;/li&gt;
          &lt;li&gt;Different ways to improve usage of your packages  and types with service registration methods&lt;/li&gt;
          &lt;li&gt;Various tips and tricks to enhance your package  and how to use them&lt;/li&gt;
        &lt;/ul&gt;
                &lt;div class="toc d-print-none"&gt;

        &lt;p&gt;You'll find all the articles in the series here:&lt;/p&gt;
        &lt;ol&gt;
          
          &lt;li&gt;&lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;Introduction&lt;/a&gt; &lt;a href="/628/building-a-nuget-package-architecture-part-1-introduction"&gt;&lt;/a&gt; (you're reading it now)&lt;/li&gt;
          &lt;li&gt;&lt;a href="/629/building-a-nuget-package-architecture-part-2-building-packages"&gt;Building packages&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/630/building-a-nuget-package-architecture-part-3-adding-packages-to-a-feed-using-a-pipeline-in-azure-devops"&gt;Adding packages to a feed using a pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/631/building-a-nuget-package-architecture-part-4-consuming-packages-and-managing-changes"&gt;Consuming packages and managing changes&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/632/building-a-nuget-package-architecture-part-5-service-registration-methods"&gt;Service Registration Methods&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/633/building-a-nuget-package-architecture-part-6-enhancing-your-packages"&gt;Enhancing your packages&lt;/a&gt;&lt;/li&gt;
        &lt;/ol&gt;
        &lt;/div&gt;
&lt;p&gt;In this first article, I'll set the stage with an introduction  to NuGet and the sample application I'll use throughout this article series. You'll  see how I refactored my code so I can extract packages from it. In part 2 I'll  then show you how to create packages from these refactored projects on your  local machine. Later articles then show you how to build these packages  automatically and add them to a feed using an automated Azure DevOps pipeline.&lt;/p&gt;
&lt;p&gt;If you're interested in purchasing the entire article series now as a 60+ page PDF document, check out this post: &lt;a href="/634/introducing-a-new-article-series-building-a-nuget-packages-architecture"&gt;Introducing a new article series: Building a NuGet packages architecture&lt;/a&gt;.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/628/building-a-nuget-packages-architecture-part-1-introduction</guid>
      <pubDate>Mon, 31 Jan 2022 16:17:42 GMT</pubDate>
    </item>
    <item>
      <title>Improving your ASP.NET Core site's file handling capabilities – part 2 – Data migration</title>
      <link>https://imar.spaanjaars.com/627/improving-your-aspnet-core-sites-file-handling-capabilities-part-2-data-migration</link>
      <description>&lt;p&gt;&lt;a href="/626/improving-your-aspnet-core-sites-file-handling-capabilities-part-1-introduction"&gt;In part 1 of this article&lt;/a&gt;, I showed you how to hide file management in an ASP.NET Core application behind an interface and how to build concrete implementations of File Providers that target the local filesystem and Azure storage. With that setup, the application can work with files without knowing where they are stored. This in turn makes it easy to move away from files on the local filesystem to files in a remote location like Azure storage and also facilitates unit testing.&lt;/p&gt;
		&lt;p&gt;But how do you actually switch your data from one storage location to another? That's the topic of this article.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/627/improving-your-aspnet-core-sites-file-handling-capabilities-part-2-data-migration</guid>
      <pubDate>Sun, 31 Oct 2021 11:49:59 GMT</pubDate>
    </item>
    <item>
      <title>Improving your ASP.NET Core site's file handling capabilities – part 1 – Introduction</title>
      <link>https://imar.spaanjaars.com/626/improving-your-aspnet-core-sites-file-handling-capabilities-part-1-introduction</link>
      <description>&lt;p&gt;&lt;a href="/614/improving-your-aspnet-core-sites-e-mailing-capabilities"&gt;In a previous article I talked about hiding email capabilities behind an interface&lt;/a&gt; to make your code easier to unit test, to centralize  configuration and to make it simple to switch to a completely different solution such as a cloud-based email handler like SendGrid, MailChimp or MailGun. Instead of newing up an &lt;span class="CodeInText"&gt;SmtpClient&lt;/span&gt; directly, I created an interface called &lt;span class="CodeInText"&gt;IMailSender&lt;/span&gt; and several concrete implementations that handle the sending of email differently (such as storing it on disk as .eml messages, sending it over SMTP or sending it with SendGrid).&lt;/p&gt;
		&lt;p&gt;
		  In this article (&lt;a href="/627/improving-your-aspnet-core-sites-file-handling-capabilities-part-2-data-migration"&gt;and the next&lt;/a&gt;) I am going to talk about a similar improvement: handling files in a filesystem. I'll show you how to hide file handling - reading, writing and deleting files - behind an interface, similar to how I hid the emailing details behind &lt;span class="CodeInText"&gt;IMailSender&lt;/span&gt;. I'll then create two concrete implementations: one using the local filesystem, the other using Azure storage. I'll then show you how to use dependency injection to inject one of the concrete classes at run-time to determine where your files are located and how to access them. With this setup, it's easy to write code to target yet another (remote) file storage solution like Box or OneDrive and plug that in without making any changes your application code.&lt;/p&gt;
		</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/626/improving-your-aspnet-core-sites-file-handling-capabilities-part-1-introduction</guid>
      <pubDate>Wed, 20 Oct 2021 15:29:44 GMT</pubDate>
    </item>
    <item>
      <title>Introducing a new article series: Building and auto-deploying an ASP.NET Core application with EF Core 5.0</title>
      <link>https://imar.spaanjaars.com/625/introducing-a-new-article-series-building-and-auto-deploying-an-aspnet-core-application-with-ef-core-50</link>
      <description>&lt;p&gt;Over the past couple of weeks I have been working on a new article series on building and auto-deploying an ASP.NET Core application using ASP.NET Core 5.0, Entity Framework Core 5.0, Git, GitHub and Azure DevOps. Just this week I wrapped up the last article and the series is now done! I've published the first article in the series today, and the remaining 6 parts will come online in the coming weeks.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Blogs</category>
      <category>Imar's Blogs</category>
      <guid>https://imar.spaanjaars.com/625/introducing-a-new-article-series-building-and-auto-deploying-an-aspnet-core-application-with-ef-core-50</guid>
      <pubDate>Wed, 20 Jan 2021 17:21:22 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 7 - Improving your build and release processes</title>
      <link>https://imar.spaanjaars.com/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes</link>
      <description>&lt;p&gt;This is the last part in a series of 7 articles showing you how to build a database-driven ASP.NET Core 5.0 app and deploy it to a remote web server using continuous integration and deployment with GitHub and Azure DevOps. In this final part I'll touch on two improvements you can make to the process you've seen in the earlier articles. In particular, I'll show you how to set up your own build agent to build your software on a custom server rather than on a standard Azure DevOps agent to speed up the build process. I'll also show you how you can minimize downtime when deploying your site to a Microsoft Azure App Service by using deployment slots. This article closes with a quick summary of all I've discussed in this series of articles.&lt;/p&gt;
&lt;div class="d-pdf-none"&gt;
		&lt;p&gt;If you haven't read the earlier parts in this series yet, you're encouraged to do that now. Here's the full list of the articles in the series:        &lt;/p&gt;
		&lt;ol&gt;
          &lt;li&gt;&lt;a href="/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;Creating the web application&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change"&gt;Using GitHub and managing change in your application&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;Setting up a CI Pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;Setting up a CD pipeline: Deploying with web deploy to a Virtual Machine or on-premises server&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;Setting up a CD pipeline: Deploying to an Azure App Service&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href="/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes"&gt;Improving your builds with a custom build agent and Azure Deployment Slots&lt;/a&gt; &lt;span class="d-print-none"&gt;(you're reading it now)&lt;/span&gt;&lt;/li&gt;
	    &lt;/ol&gt;
        &lt;/div&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes</guid>
      <pubDate>Mon, 17 May 2021 20:34:48 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 6 - Setting up a CD pipeline - Deploying to an Azure App Service </title>
      <link>https://imar.spaanjaars.com/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service</link>
      <description>
		&lt;p&gt;
		In &lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;the previous 
		article&lt;/a&gt; you saw how to take your compiled application and deploy it to a web server running IIS. This is a convenient scenario when you own or manage the remote server completely as you need to install a release agent on it. You also saw how to use a SQL task in the release pipeline to automatically apply the EF migrations to your database on release.&lt;/p&gt;
		&lt;p&gt;In this article you see how to do the same, but with an Azure App Service and an Azure SQL database instead. An App Service is a  fully managed web hosting&amp;nbsp;service&amp;nbsp;for running web&amp;nbsp;sites, mobile back ends, and RESTful APIs. It allows you to run web sites on the Internet without the need to manage a complete server yourself. Azure SQL is Microsoft's cloud version of their popular database system SQL Server.&lt;/p&gt;
		&lt;p&gt;App services and SQL Azure are popular choices for running a data-driven web site in Microsoft's cloud solution. I use them a lot for many of my customers' solutions and therefore thought it made sense to demonstrate and discuss them here as well. In this article I'll show you how to create a release pipeline in Azure DevOps that deploys your application to an Azure App Service. In addition, you see how to create and configure an Azure SQL server and database and how to automatically update the database's schema during the release with changes coming from your EF migrations.&lt;/p&gt;
&lt;div class="d-pdf-none"&gt;
		&lt;p&gt;If you haven't read the previous parts in this series you're encouraged to do that now. Here's the full list of the articles in the series:&lt;/p&gt;
		&lt;ol&gt;
      &lt;li&gt;&lt;a href="/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;Creating the web application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change"&gt;Using GitHub and managing change in your application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;Setting up a CI Pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;Setting up a CD pipeline: Deploying with web deploy to a Virtual Machine or on-premises server&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;Setting up a CD pipeline: Deploying to an Azure App Service&lt;/a&gt; &lt;span class="d-print-none"&gt;(you're reading it now)&lt;/span&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href="/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes"&gt;Improving your builds with a custom build agent and Azure Deployment Slots&lt;/a&gt;&lt;/li&gt;
	    &lt;/ol&gt;
        &lt;/div&gt;
		</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service</guid>
      <pubDate>Mon, 19 Apr 2021 14:18:53 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 5 - Setting up a CD pipeline - Deploying with web deploy to a VM</title>
      <link>https://imar.spaanjaars.com/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm</link>
      <description>
		&lt;p&gt;In &lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-ci-pipeline-in-azure-devops"&gt;the previous article&lt;/a&gt; you saw how to create a build pipeline in Azure DevOps to automatically build and test your software every time changes are submitted to your GitHub repository. &lt;/p&gt;
		&lt;p&gt;In this article and the next you see how to complement this process with an additional pipeline that automatically releases your software to a remote server so it can be accessed by your end users. In this article you see how to deploy your site site to a server running IIS, such as a virtual machine in the cloud or a (virtual or physical) machine in your own network. The &lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;next article then shows how to do the same but for an Azure App Service&lt;/a&gt;,  an HTTP-based service for hosting web applications, REST APIs, and mobile back ends in the Microsoft Azure cloud.&lt;/p&gt;
		&lt;p&gt;Note: if you like to purchase the entire series now and not wait for the remaining parts to come online, check out &lt;a href="/625/introducing-a-new-article-series-building-and-auto-deploying-an-aspnet-core-application-with-ef-core-50"&gt;this blog post that explains how you can purchase it for only $8&lt;/a&gt;. &lt;/p&gt;
&lt;div class="d-pdf-none"&gt;
		&lt;p&gt;If you haven't read the previous parts in this series you're encouraged to do that now. Here's the full list of the articles in the series:&lt;/p&gt;
		&lt;ol&gt;
      &lt;li&gt;&lt;a href="/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;Creating the web application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change"&gt;Using GitHub and managing change in your application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;Setting up a CI Pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;Setting up a CD pipeline: Deploying with web deploy to a Virtual Machine or on-premises server&lt;/a&gt; &lt;span class="d-print-none"&gt;(you're reading it now)&lt;/span&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;Setting up a CD pipeline: Deploying to an Azure App Service&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href="/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes"&gt;Improving your builds with a custom build agent and Azure Deployment Slots&lt;/a&gt;&lt;/li&gt;
	    &lt;/ol&gt;
        &lt;/div&gt;
		</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm</guid>
      <pubDate>Thu, 01 Apr 2021 10:05:13 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 4 - Setting up a CI pipeline in Azure DevOps to build and test your code</title>
      <link>https://imar.spaanjaars.com/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code</link>
      <description>&lt;p&gt;In this article I finally get to showing you how to create pipelines in Azure DevOps. I've been mentioning this for a few articles now but there was some groundwork I had to take care of first. In this article, the 4th in a series of 7, I'll show you the following:&lt;/p&gt;
    &lt;ul&gt;
      &lt;li&gt;What YAML is and why you need it&lt;/li&gt;
      &lt;li&gt;How to build a pipeline in Azure DevOps to build your source code every time you do a check in on GitHub.&lt;/li&gt;
      &lt;li&gt;How to modify your build to save the results so they can be deployed to a remote server at a later stage&lt;/li&gt;
      &lt;li&gt;How to add a unit test project to your solution and configure the build to execute your tests&lt;/li&gt;
      &lt;li&gt;How to create EF Migration scripts which can be run against the database during the release&lt;/li&gt;
      &lt;/ul&gt;
      &lt;div class="d-pdf-none"&gt;
    &lt;p&gt;If you haven't read the previous parts in this series you're encouraged to do that now. Here's the full list of the articles in the series:&lt;/p&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href="/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;Creating the web application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change"&gt;Using GitHub and managing change in your application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;Setting up a CI Pipeline in Azure DevOps&lt;/a&gt; &lt;span class="d-print-none"&gt;(you're reading it now)&lt;/span&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;Setting up a CD pipeline: Deploying with web deploy to a Virtual Machine or on-premises server&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;Setting up a CD pipeline: Deploying to an Azure App Service&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes"&gt;Improving your builds with a custom build agent and Azure Deployment Slots&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;&lt;/div&gt;
    
    
    &lt;p&gt;Note: if you like to purchase the entire series now and not wait for the remaining parts to come online, check out &lt;a href="/625/introducing-a-new-article-series-building-and-auto-deploying-an-aspnet-core-application-with-ef-core-50"&gt;this blog post that explains how you can purchase it for only $8&lt;/a&gt;.
&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code</guid>
      <pubDate>Mon, 08 Mar 2021 09:25:13 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 3 - Dealing with change</title>
      <link>https://imar.spaanjaars.com/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change</link>
      <description>
      &lt;p&gt;In &lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;the previous article&lt;/a&gt; in this series I showed how to set up the initial web application and add Entity Framework as the database persistence framework. This provides a good starting point for the application. As you'll be expanding the application you need a good way to manage code and database schema changes. In this article you'll see how to leverage Git, GitHub and EF migrations to manage code changes. &lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;In the next article in the series I'll then finally show you how to set up a CI pipeline&lt;/a&gt; followed by a CD pipeline in a later article.&lt;/p&gt;

&lt;div class="d-pdf-none"&gt;
      	&lt;p&gt;If you haven't read the previous parts in this series you're encouraged to do that now. Here's the full list of the articles in the series:&lt;/p&gt;
      	&lt;ol&gt;
      &lt;li&gt;&lt;a href="/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;Creating the web application&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change"&gt;Using GitHub and managing change in your application&lt;/a&gt; &lt;span class="d-print-none"&gt;(you're reading it now)&lt;/span&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;Setting up a CI Pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
      	  &lt;li&gt;&lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;Setting up a CD pipeline: Deploying with web deploy to a Virtual Machine or on-premises server&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;Setting up a CD pipeline: Deploying to an Azure App Service&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes"&gt;Improving your builds with a custom build agent and Azure Deployment Slots&lt;/a&gt;&lt;/li&gt;   	  &lt;/ol&gt;
      &lt;/div&gt;
      &lt;p&gt;Note: if you like to purchase the entire series now and not wait for the remaining parts to come online, check out &lt;a href="/625/introducing-a-new-article-series-building-and-auto-deploying-an-aspnet-core-application-with-ef-core-50"&gt;this blog post that explains how you can purchase it for only $8&lt;/a&gt;.
&lt;/p&gt;

      </description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change</guid>
      <pubDate>Sun, 21 Feb 2021 15:13:12 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 2 - Creating the web application</title>
      <link>https://imar.spaanjaars.com/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application</link>
      <description>
		&lt;p&gt;This is part 2 in a series of 7 articles showing you how to build a database-driven ASP.NET Core 5.0 app and deploy it to a remote web server using continuous integration and deployment with GitHub and Azure DevOps. In this part I'll show you how to set up the basic application, add a model that uses Entity Framework Core 5.0 to persist data to the database and how to create to the initial database.&lt;/p&gt;
        &lt;p&gt;Note: if you like to purchase the entire series now and not wait for the remaining parts to come online, check out &lt;a href="/625/introducing-a-new-article-series-building-and-auto-deploying-an-aspnet-core-application-with-ef-core-50"&gt;this blog post that explains how you can purchase it for only $8&lt;/a&gt;.
&lt;/p&gt;

&lt;div class="d-pdf-none"&gt;
		&lt;p&gt;If you haven't read the first part of this series you're encouraged to do that now. Here's the full list of the articles in the series:&lt;/p&gt;
&lt;ol&gt;
      &lt;li&gt;&lt;a href="/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application"&gt;Creating the web application&lt;/a&gt; &lt;span class="d-print-none"&gt;(you're reading it now)&lt;/span&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/620/building-and-auto-deploying-an-aspnet-core-application-part-3-dealing-with-change"&gt;Using GitHub and managing change in your application&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/621/building-and-auto-deploying-an-aspnet-core-application-part-4-setting-up-a-ci-pipeline-in-azure-devops-to-build-and-test-your-code"&gt;Setting up a CI Pipeline in Azure DevOps&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/622/building-and-auto-deploying-an-aspnet-core-application-part-5-setting-up-a-cd-pipeline-deploying-with-web-deploy-to-a-vm"&gt;Setting up a CD pipeline: Deploying with web deploy to a Virtual Machine or on-premises server&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/623/building-and-auto-deploying-an-aspnet-core-application-part-6-setting-up-a-cd-pipeline-deploying-to-an-azure-app-service"&gt;Setting up a CD pipeline: Deploying to an Azure App Service&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="/624/building-and-auto-deploying-an-aspnet-core-application-part-7-improving-your-build-and-release-processes"&gt;Improving your builds with a custom build agent and Azure Deployment Slots&lt;/a&gt;&lt;/li&gt;
      &lt;/ol&gt;&lt;/div&gt;
	  </description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/619/building-and-auto-deploying-an-aspnet-core-application-part-2-creating-the-web-application</guid>
      <pubDate>Wed, 03 Feb 2021 22:05:12 GMT</pubDate>
    </item>
    <item>
      <title>Building and auto-deploying an ASP.NET Core application - Part 1 - Introduction</title>
      <link>https://imar.spaanjaars.com/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction</link>
      <description>  &lt;p&gt;
      I have been programming for many years and over those years, I have seen the development landscape change quite a
      lot.
      Things have become both simpler and more complex at the same time. For example, setting up a web server on Windows to run a Classic
      ASP site with COM+ components was pretty complicated back in the days. Setting up an Azure app service today to do
      more or less the same as that old web server did takes just a couple of clicks in the Azure portal. At the same
      time, things have
      become more complicated because possibilities, demands and requirements have changed. For example, when I started
      programming,
      distributed source control usually meant a shared network drive where everyone would write to and that was
      occasionally backed up ;-) But nowadays, we have powerful source control systems like Git that allow for more
      feature-rich management of your source code including history, branching and a lot more. And combined with
      powerful online platforms like Azure DevOps and GitHub, you have all the tools you need at your fingertips.
    &lt;/p&gt;
		</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>DevOps</category>
      <guid>https://imar.spaanjaars.com/617/building-and-auto-deploying-an-aspnet-core-application-part-1-introduction</guid>
      <pubDate>Wed, 20 Jan 2021 17:23:22 GMT</pubDate>
    </item>
    <item>
      <title>Unit Testing Authorization on your Controllers</title>
      <link>https://imar.spaanjaars.com/616/unit-testing-authorization-on-your-controllers</link>
      <description> &lt;p&gt;
      In many of my ASP.NET web applications (mostly MVC or Web APIs) I have a mix of content with endpoints that either require authentication and authorization or that can be accessed anonymously. For example I have mostly public content (such as my own web
      site) with a protected management (admin) section. Or I have a Web API project with many endpoints protected by
      authorization but with a few of them publicly available. To ensure you protect your controllers well, you have many different options. In this article I'll show you a short unit test that you can use to ensure your controllers are properly configured when using a mixed authorization scenario.
    &lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Snippets</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/616/unit-testing-authorization-on-your-controllers</guid>
      <pubDate>Sun, 15 Nov 2020 14:26:12 GMT</pubDate>
    </item>
    <item>
      <title>Improving IntelliSense for the asp-page Tag Helper using T4 Templates</title>
      <link>https://imar.spaanjaars.com/615/improving-intellisense-for-the-asp-page-tag-helper-using-t4-templates</link>
      <description>&lt;p&gt;
      I find ASP.NET Tag Helpers super helpful. They provide powerful features and yet use clean markup. As an example,
      here's a tag helper that creates a link to an action method in some controller:&lt;/p&gt;

    &lt;div class="CodeBorder"&gt;
      &lt;pre
        class="CodeForeground"&gt;&amp;lt;a asp-controller=&amp;quot;Contact&amp;quot; asp-action=&amp;quot;Index&amp;quot;&amp;gt;Get in Touch&amp;lt;/a&amp;gt;&lt;/pre&gt;
    &lt;/div&gt;
    &lt;p&gt;
      At run-time, ASP.NET then generates the correct URL for this action method and creates an &lt;span
        class="CodeInText"&gt;href&lt;/span&gt; attribute on the
      anchor for it:
    &lt;/p&gt;
    &lt;div class="CodeBorder"&gt;
      &lt;pre class="CodeForeground"&gt;&amp;lt;a href=&amp;quot;/contact&amp;quot;&amp;gt;Get in Touch&amp;lt;/a&amp;gt;&lt;/pre&gt;
    &lt;/div&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/615/improving-intellisense-for-the-asp-page-tag-helper-using-t4-templates</guid>
      <pubDate>Wed, 11 Nov 2020 13:18:06 GMT</pubDate>
    </item>
    <item>
      <title>Improving your ASP.NET Core site's e-mailing capabilities</title>
      <link>https://imar.spaanjaars.com/614/improving-your-aspnet-core-sites-e-mailing-capabilities</link>
      <description>   &lt;p&gt;Many websites depend heavily on e-mail: they send account confirmation e-mails, password reset e-mails, order
      confirmations, back-in-stock notifications and much more. Despite its importance, I often see that sending e-mail
      is an overlooked area when writing well maintainable and stable code. It's also often overlooked when monitoring
      sites and lots of code I have seen just assumes the mail server is up and running. But problems will occur; mail
      servers will go down, passwords do expire or get changed without updating the web site and more.&lt;/p&gt;
    &lt;p&gt;In &lt;a href="/612/using-standard-health-checks-and-building-your-own-in-aspnet-core"&gt;a preceding article you saw how to monitor your site's SMTP server using an ASP.NET Core health check&lt;/a&gt;. While
      it's great to be notified when your SMTP server is unavailable, it would be even better if your site has an
      alternative way to deliver the messages when the primary SMTP is not available.&lt;/p&gt;
    &lt;p&gt;
      In this article, I'll show you a couple of ways to improve the way you send e-mails from your ASP.NET Core
      applications. In particular, I'll discuss:
    &lt;/p&gt;
    &lt;p&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="#p1" class="text-decoration-none"&gt;Hiding send functionality behind an interface&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#p2" class="text-decoration-none"&gt;Providing multiple concrete implementations to send e-mails in
          different ways and configure the
          best one at runtime&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#p3" class="text-decoration-none"&gt;Implementing a fallback solution for cases where your primary mail
          server is not available&lt;/a&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href="#p4" class="text-decoration-none"&gt;How to use MailKit to replace the built-in SmtpClient which is now
          considered obsolete by
          Microsoft&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#p5" class="text-decoration-none"&gt;How to use the SendGrid API to send e-mails from your
          application&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;

    &lt;/p&gt;
    &lt;p&gt;
      You'll find the full code for the article as a download &lt;a href="#downloads"&gt;at the end of this article&lt;/a&gt;, as
      well as in &lt;a href="https://github.com/Imar/Articles.SmtpDemo"&gt;the Github repository for this article&lt;/a&gt;.
    &lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/614/improving-your-aspnet-core-sites-e-mailing-capabilities</guid>
      <pubDate>Tue, 24 Nov 2020 08:43:23 GMT</pubDate>
    </item>
    <item>
      <title>Using Standard Health Checks and Building your Own in ASP.NET Core</title>
      <link>https://imar.spaanjaars.com/612/using-standard-health-checks-and-building-your-own-in-aspnet-core</link>
      <description>    &lt;p&gt;Being able to monitor your ASP.NET Core web applications and APIs and detect any issues early on is crucial in
      ensuring your sites are up and running and in a healthy state. In previous articles I talked about &lt;a href="/609/implementing-health-checks-in-aspnet-framework-applications"&gt;creating a
      custom health check solution for ASP.NET Framework applications&lt;/a&gt; and &lt;a href="/611/implementing-health-checks-in-aspnet-core"&gt;implementing ASP.NET Core health checks with
      standard functionality&lt;/a&gt;.
      In this article I'll show you how to add and configure some existing, open-source health checks to monitor an SMTP
      server and the web server's disk space (these are just examples; there are many more health checks available that
      you can plug in to your own web site). And if the standard health checks aren't sufficient, you can build your own;
      something you'll see how to do in the second part of this article.
    &lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/612/using-standard-health-checks-and-building-your-own-in-aspnet-core</guid>
      <pubDate>Tue, 17 Nov 2020 13:16:56 GMT</pubDate>
    </item>
    <item>
      <title>Implementing Health Checks in ASP.NET Core</title>
      <link>https://imar.spaanjaars.com/611/implementing-health-checks-in-aspnet-core</link>
      <description>    &lt;p&gt;Being able to monitor your ASP.NET Core web applications and APIs and detect any issues early on is crucial in
      ensuring your sites are up and running and in a healthy state. In &lt;a href="/609/implementing-health-checks-in-aspnet-framework-applications"&gt;a previous article&lt;/a&gt; I talked about creating a
      custom health check solution for ASP.NET Framework applications. In this article I'll show you how to leverage the
      built-in Health Check framework along with some third-party open-source add-ons available for ASP.NET Core
      applications. You may want to &lt;a href="/609/implementing-health-checks-in-aspnet-framework-applications"&gt;check out the previous article&lt;/a&gt; to better understand health checks and why they are
      useful. And seeing the custom solution for the .NET Framework may have you appreciate the built-in ASP.NET Core
      functionality even more. And in &lt;a href="/612/using-standard-health-checks-and-building-your-own-in-aspnet-core"&gt;this article I'll dive a little deeper into some existing third-party health
      checks&lt;/a&gt; that make monitoring your sites and services super easy and show you how to build your own health checks
      and plug them into the system.
    &lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET Core</category>
      <guid>https://imar.spaanjaars.com/611/implementing-health-checks-in-aspnet-core</guid>
      <pubDate>Sun, 08 Nov 2020 13:39:44 GMT</pubDate>
    </item>
    <item>
      <title>Implementing Health Checks in ASP.NET Framework Applications</title>
      <link>https://imar.spaanjaars.com/609/implementing-health-checks-in-aspnet-framework-applications</link>
      <description> &lt;p&gt;Being able to monitor your ASP.NET web applications and APIs and detect any issues early on is crucial in
      ensuring your sites are up and running and in a healthy state.
      With ASP.NET Core 2.2 and later this now comes in the box (as I'll show you in later articles) but for .NET
      Framework apps you'll have to use to kind of custom solution. To implement simple monitoring in ASP.NET Framework
      apps (i.e. non-Core applications), I usually add some custom code to my projects to provide health information
      from an endpoint and then use external tools to monitor that endpoint. In this article I'll show you how you can
      implement health checks using custom code targeting the .NET Framework (although it should also work on .NET
      Core). In future articles I'll then show you how
      you can &lt;a href="/611/implementing-health-checks-in-aspnet-core"&gt;set up similar checks in an ASP.NET Core app with standard functionality&lt;/a&gt; and 
      &lt;a href="/612/using-standard-health-checks-and-building-your-own-in-aspnet-core"&gt;how to extend the base
      system using existing third-party health checks like an SMTP server monitor&lt;/a&gt;, to make your health checks even more
      powerful.
    &lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET 4.5</category>
      <guid>https://imar.spaanjaars.com/609/implementing-health-checks-in-aspnet-framework-applications</guid>
      <pubDate>Sun, 01 Nov 2020 21:18:15 GMT</pubDate>
    </item>
    <item>
      <title>I'm back!</title>
      <link>https://imar.spaanjaars.com/608/im-back</link>
      <description>&lt;p&gt;I can't believe it's been almost 7 years since I last posted something here! Wow, time flies. Here's what happened.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Blogs</category>
      <category>Imar's Blogs</category>
      <guid>https://imar.spaanjaars.com/608/im-back</guid>
      <pubDate>Sun, 01 Nov 2020 21:17:23 GMT</pubDate>
    </item>
    <item>
      <title>Prefixing ID columns with the table name in Entity Framework</title>
      <link>https://imar.spaanjaars.com/588/prefixing-id-columns-with-the-table-name-in-entity-framework</link>
      <description>I recently got a question about the database configuration part of my &lt;a href="/573/aspnet-n-layered-applications-introduction-part-1"&gt;article series on N-Layer design&lt;/a&gt; in ASP.NET. In my model, all classes inherit &lt;span class="CodeInText"&gt;DomainEntity&amp;lt;T&amp;gt;&lt;/span&gt; that defines a primary key called &lt;span class="CodeInText"&gt;Id&lt;/span&gt;. This in turn means all primary key columns in the database are called &lt;span class="CodeInText"&gt;Id&lt;/span&gt; as well. The reader wanted to know if it was possible to prefix that column with the entity / table name. So, the &lt;span class="CodeInText"&gt;Id&lt;/span&gt; column in the &lt;span class="CodeInText"&gt;People&lt;/span&gt; table would be called &lt;span class="CodeInText"&gt;PersonId&lt;/span&gt;, the &lt;span class="CodeInText"&gt;Id&lt;/span&gt; in &lt;span class="CodeInText"&gt;EmailAddress&lt;/span&gt; would be called &lt;span class="CodeInText"&gt;EmailAddressId&lt;/span&gt; and so on. This has always been possible (and easy to do) for separate entities, but EF 6's custom conventions makes it a lot easier to do it for the entire model.</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>.NET General</category>
      <guid>https://imar.spaanjaars.com/588/prefixing-id-columns-with-the-table-name-in-entity-framework</guid>
      <pubDate>Wed, 08 Jan 2014 10:22:48 GMT</pubDate>
    </item>
    <item>
      <title>New Article Series on ASP.NET 4.5 N-Layered Design Now Available for Purchase</title>
      <link>https://imar.spaanjaars.com/587/new-article-series-on-aspnet-45-n-layered-design-now-available-for-purchase</link>
      <description>
		&lt;p&gt;I am glad to announce the immediate availability of my new article series on N-Layered Design in ASP.NET 4.5! &lt;/p&gt;
		</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Blogs</category>
      <category>Imar's Blogs</category>
      <guid>https://imar.spaanjaars.com/587/new-article-series-on-aspnet-45-n-layered-design-now-available-for-purchase</guid>
      <pubDate>Fri, 28 Jun 2013 16:45:40 GMT</pubDate>
    </item>
    <item>
      <title>Book Review: Instant jQuery 2.0 Table Manipulation How-to by Charlie Griefer</title>
      <link>https://imar.spaanjaars.com/584/book-review-instant-jquery-20-table-manipulation-how-to-by-charlie-griefer</link>
      <description>Talks about the book Instant jQuery 2.0 Table Manipulation How-to by Charlie Griefer
&lt;p&gt;I recently got the opportunity to review the book Instant jQuery 2.0 Table Manipulation How-to by Charlie Griefer. Being a fan and heavy user of jQuery, I happily accepted the offer.&lt;/p&gt;</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Blogs</category>
      <category>Book Reviews</category>
      <guid>https://imar.spaanjaars.com/584/book-review-instant-jquery-20-table-manipulation-how-to-by-charlie-griefer</guid>
      <pubDate>Sun, 26 May 2013 22:34:11 GMT</pubDate>
    </item>
    <item>
      <title>Looking for Reviewers for my new Series on N-Layer Design with ASP.NET 4.5 and Entity Framework 5 Code First</title>
      <link>https://imar.spaanjaars.com/583/looking-for-reviewers-for-my-new-series-on-n-layer-design-with-aspnet-45-and-entity-framework-5-code-first</link>
      <description>&lt;p&gt;During the past couple of months, I've been hard at work writing a follow up of my article series on N-Layer design for ASP.NET. This was long overdue, as I completed the previous series in early 2009, more than four years ago!&lt;/p&gt;
</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Blogs</category>
      <category>Imar's Blogs</category>
      <guid>https://imar.spaanjaars.com/583/looking-for-reviewers-for-my-new-series-on-n-layer-design-with-aspnet-45-and-entity-framework-5-code-first</guid>
      <pubDate>Tue, 23 Apr 2013 22:03:57 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET N-Layered Applications - Extensions, Tools and Wrapping Up (Part 10) </title>
      <link>https://imar.spaanjaars.com/582/aspnet-n-layered-applications-extensions-tools-and-wrapping-up-part-10</link>
      <description>&lt;p&gt;&lt;strong&gt;Note: this is part ten in a series of ten. If you rather read   this entire series off-line, you can buy the full series as a convenient PDF   document that comes with the full source. Besides the convenience,   buying the PDF will also make you feel good as it shows your   appreciation for the articles and helps me pay the bills for my server   and hosting so I can keep running imar.spaanjaars.com and continue to   provide you with great content. For more details, check out &lt;a href="/587/new-article-series-on-aspnet-45-n-layered-design-now-available-for-purchase"&gt;this post that shows you how you can buy the entire series right now&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;This is Part 10 in a series of 10 that show you how to build N-Layered applications using ASP.NET 4.5 and Entity Framework 5 Code First. In this part I&amp;rsquo;ll discuss a few miscellaneous topics that I haven&amp;rsquo;t touched in previous articles in the series.&lt;/p&gt;
			</description>
      <author> (Imar Spaanjaaars)</author>
      <category>Articles</category>
      <category>ASP.NET 4.5</category>
      <guid>https://imar.spaanjaars.com/582/aspnet-n-layered-applications-extensions-tools-and-wrapping-up-part-10</guid>
      <pubDate>Wed, 18 Dec 2013 17:02:31 GMT</pubDate>
    </item>
  </channel>
</rss>