<?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: Ram Hemasri</title>
    <description>The latest articles on DEV Community by Ram Hemasri (@ramhemasri).</description>
    <link>https://dev.to/ramhemasri</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%2F187688%2F092b3518-4ddd-4366-a90f-f25ff62da237.png</url>
      <title>DEV Community: Ram Hemasri</title>
      <link>https://dev.to/ramhemasri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ramhemasri"/>
    <language>en</language>
    <item>
      <title>Application Insights for Worker Service using Serilog</title>
      <dc:creator>Ram Hemasri</dc:creator>
      <pubDate>Sat, 19 Dec 2020 20:48:50 +0000</pubDate>
      <link>https://dev.to/ramhemasri/application-insights-for-worker-service-using-serilog-1476</link>
      <guid>https://dev.to/ramhemasri/application-insights-for-worker-service-using-serilog-1476</guid>
      <description>&lt;p&gt;This post is a contribution for &lt;a href="https://www.csadvent.christmas/"&gt;C# Advent Calendar 2020&lt;/a&gt;. This is a simple guide for implementing &lt;a href="https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview"&gt;Azure Application Insights&lt;/a&gt; using Serilog in a dotnet core worker service.&lt;/p&gt;

&lt;p&gt;.Net Core worker services are best suited for long-running background tasks. These services can be run as a windows service or linux daemons. Worker services comes with DI, logging and configuration features out-of the box. &lt;/p&gt;

&lt;p&gt;First create a new Worker Service project via your favorite terminal using the following simple command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet new worker -o WorkerService
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the following Serilog Packages in your project directory.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Serilog&lt;/li&gt;
&lt;li&gt;Serilog.Extensions.Hosting&lt;/li&gt;
&lt;li&gt;Serilog.Settings.Configuration&lt;/li&gt;
&lt;li&gt;Serilog.Sinks.Console&lt;/li&gt;
&lt;li&gt;Serilog.Sinks.ApplicationInsights
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet add package Serilog
dotnet add package Serilog.Extensions.Hosting
dotnet add package Serilog.Settings.Configuration
dotnet add package Serilog.Settings.Configuration
dotnet add package Serilog.Settings.Configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy your Application Insights Instrumentation Key from Azure Portal and update your appsettings.json with the following json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Serilog": {
    "MinimumLevel": "Debug",
    "WriteTo": [
      "Console",
      {
        "Name": "ApplicationInsights",
        "Args": {
          "instrumentationKey": "__ApplicationInsightsInstrumentationKey__",
          "restrictedToMinimumLevel": "Information",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ]
  }
}

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

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;Program.cs&lt;/strong&gt; file import Serilog namespace&lt;br&gt;
&lt;code&gt;using Serilog;&lt;/code&gt; and update your &lt;strong&gt;CreateHostBuilder&lt;/strong&gt; to instansiate Serilog logger and chain with &lt;strong&gt;UseSerilog()&lt;/strong&gt; method to replace the default logging provider with Serilog.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static IHostBuilder CreateHostBuilder(string[] args) =&amp;gt;
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =&amp;gt;
                {
                    services.AddHostedService&amp;lt;Worker&amp;gt;();
                     Log.Logger = new LoggerConfiguration()
                    .ReadFrom.Configuration(hostContext.Configuration)
                    .CreateLogger();
                }).UseSerilog();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the following command in your project directory to run the worker service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should start seeing your console messages in your Azure portal Application Insights logs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PZ3XP6F9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0to3n0nuqj1zrbti757h.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PZ3XP6F9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0to3n0nuqj1zrbti757h.PNG" alt="Console messages log"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bb0GusZQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dxz3izp4g3fgemz0yyoe.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bb0GusZQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dxz3izp4g3fgemz0yyoe.PNG" alt="Application Insights Log"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>serilog</category>
      <category>applicationinsights</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Hosting Blazor on Netlify using Github Actions (Part 3 of Series) </title>
      <dc:creator>Ram Hemasri</dc:creator>
      <pubDate>Sun, 05 Jan 2020 14:06:26 +0000</pubDate>
      <link>https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-3-of-series-3939</link>
      <guid>https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-3-of-series-3939</guid>
      <description>&lt;p&gt;This series introduces hosting Blazor WebAssembly on Netlify using Github Actions. Previously, in &lt;a href="https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-1-of-series-3a1k"&gt;part 1&lt;/a&gt;, we have created a Blazor WebAssembly Project using Visual Studio 2019 and in &lt;a href="https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-2-of-series-3k7a"&gt;part 2&lt;/a&gt; we used Visual Studio 2019 to set up Github Project. In this last part we will use Github Actions to push our Blazor WebAssembly to Netlify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Netlify tokens for Github actions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;You should never expose these tokens&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Github actions require your Netlify personal access token and site API ID  to push the Blazor WebAssembly. &lt;br&gt;
User personal access token can be created by going to your &lt;a href="https://app.netlify.com/user/applications/personal"&gt;Netlify settings page&lt;/a&gt;. When you navigate to the &lt;strong&gt;Create a new personal access token&lt;/strong&gt; page, enter &lt;strong&gt;NETLIFY_AUTH_TOKEN&lt;/strong&gt; in the text box and click &lt;strong&gt;Generate Token&lt;/strong&gt; button. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S9NBu2Hl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/putvj7mlydm3x3jf9oui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S9NBu2Hl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/putvj7mlydm3x3jf9oui.png" width="400" height="400" alt="Netlify Auth Token"&gt;&lt;/a&gt;&lt;br&gt;
Netlify site API ID is unique to every site. We can easily create a site by dragging a folder with index.html page on to Netlify. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9foBOHb1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wwbjd6lkf1nqgoc10ue1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9foBOHb1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wwbjd6lkf1nqgoc10ue1.gif" width="400" height="400" alt="Netlify Site"&gt;&lt;/a&gt;&lt;br&gt;
After site is successfully created, go to &lt;strong&gt;Site Settings&lt;/strong&gt; and you can take a note of &lt;strong&gt;API ID&lt;/strong&gt; under site information.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cn6gLq-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sgwe5sh97hiobi0rhfie.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cn6gLq-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sgwe5sh97hiobi0rhfie.PNG" width="400" height="400" alt="Netlify Site ID"&gt;&lt;/a&gt;&lt;br&gt;
Go to your github repository settings created in part 2 and add the secrets. You have to add the two token and API ID generated on Netlify as &lt;strong&gt;NETLIFY_AUTH_TOKEN&lt;/strong&gt; and &lt;strong&gt;NETLIFY_SITE_ID&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mepn_UEU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/q080nueum8p9arji4zuk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mepn_UEU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/q080nueum8p9arji4zuk.png" alt="Github secrets"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  Setting up Github Actions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click on Actions tab in your Github repository
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S7oPoElq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/j42ysltny23b5dq0ns8c.png" width="400" height="400" alt="Github Actions"&gt;
&lt;/li&gt;
&lt;li&gt;Scroll down and click on &lt;strong&gt;Workflows for Python, Maven,Docker and more&lt;/strong&gt; &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RWVPIAry--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hc532yza6z27ief6kdtw.png" width="400" height="400" alt="More Workflows"&gt; &lt;/li&gt;
&lt;li&gt;The previous step will bring more workflows. Scroll until you find &lt;strong&gt;.Net Core&lt;/strong&gt; and click on &lt;strong&gt;Set up this workflow&lt;/strong&gt;. We require .Net workflow for building Blazor WebAssembly.&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--33NIXHiA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hj22mzxv7yhkwhoqs5z2.png" width="400" height="400" alt=".Net workflow"&gt;
&lt;/li&gt;
&lt;li&gt;Github creates &lt;strong&gt;dotnetcore.yml&lt;/strong&gt; in your Blazor project repository.&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SOjNeDAS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/cqrjfasjnf079uip57f1.png" width="400" height="400" alt="dotnetcore.yml"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit your dotnetcore.yml as below and commit your changes. This triggers github workflow and publishes your Blazor site to Netlify.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight yaml"&gt;&lt;code&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;BlazorOnNetlify&lt;/span&gt; &lt;span class="c1"&gt;#your workflow name&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;#on push to your branch run this workflow&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v1&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup .NET Core&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-dotnet@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;dotnet-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.1.100&lt;/span&gt; &lt;span class="c1"&gt;#Blazor WebAssembly requires 3.1.100&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build with dotnet&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet build --configuration Release&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish Blazor webassembly using dotnet&lt;/span&gt; 
&lt;span class="c1"&gt;#create Blazor WebAssembly dist output folder in the project directory&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dotnet publish -c Release --no-build -o ./&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish generated Blazor webassembly to Netlify&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;netlify/actions/cli@master&lt;/span&gt; &lt;span class="c1"&gt;#uses Netlify Cli actions&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# these environment variables are added in github secrets&lt;/span&gt;
          &lt;span class="na"&gt;NETLIFY_AUTH_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.NETLIFY_AUTH_TOKEN }}&lt;/span&gt;
          &lt;span class="na"&gt;NETLIFY_SITE_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.NETLIFY_SITE_ID }}&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deploy --dir=BlazorOnNetlify/dist --prod&lt;/span&gt; &lt;span class="c1"&gt;#push dist folder to Netlify&lt;/span&gt;
          &lt;span class="na"&gt;secrets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;["NETLIFY_AUTH_TOKEN",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"NETLIFY_SITE_ID"]'&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Github workflow status is available in Actions tab&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5-17tvUN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/o7tm9fqu6sey6t4jttgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5-17tvUN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/o7tm9fqu6sey6t4jttgn.png" alt="Github workflow status"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Status Badges
&lt;/h2&gt;

&lt;p&gt;Status badges are useful to know your workflow and netlify deployment statuses. These can be added to your Github Readme file. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--scPGk0kG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6ftln60obmvkziifjrze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--scPGk0kG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6ftln60obmvkziifjrze.png" alt="BlazorOnNetlify status"&gt;&lt;/a&gt;&lt;br&gt;
Github status badge can be created from using the following markdown&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[![Actions Status](https://github.com/{owner}/{repo}/workflows/{workflow_name}/badge.svg)](https://github.com/{owner}/{repo}/actions)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Netlify status badge can be found under your Blazor &lt;strong&gt;Site Settings&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1FR-GmtB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6lttcgd9ete6178o5r74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1FR-GmtB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6lttcgd9ete6178o5r74.png" alt="Netlify status badge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Refernces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://help.github.com/en/actions/automating-your-workflow-with-github-actions/configuring-a-workflow"&gt;Configuring Github Workflow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-gb/aspnet/core/blazor/?view=aspnetcore-3.1#blazor-webassembly"&gt;Blazor WebAssembly&lt;/a&gt;&lt;br&gt;
&lt;a href="https://webassembly.org/"&gt;WebAssembly&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>webassembly</category>
      <category>github</category>
      <category>netlify</category>
    </item>
    <item>
      <title>Hosting Blazor on Netlify using Github Actions (Part 2 of Series)</title>
      <dc:creator>Ram Hemasri</dc:creator>
      <pubDate>Mon, 30 Dec 2019 21:27:52 +0000</pubDate>
      <link>https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-2-of-series-3k7a</link>
      <guid>https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-2-of-series-3k7a</guid>
      <description>&lt;p&gt;This series introduces hosting Blazor WebAssembly on Netlify using Github Actions. Previously, in &lt;a href="https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-1-of-series-3a1k"&gt;part 1&lt;/a&gt;, we have created a Blazor WebAssembly Project using Visual Studio 2019. In part 2 of this series we will use Visual Studio 2019 to set up Github Project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Create Github Project repository from Visual Studio 2019.
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;In your Visual Studio 2019 toolbar select &lt;strong&gt;Add to Source Control&lt;/strong&gt; &amp;gt; &lt;strong&gt;Git&lt;/strong&gt;. This will initialize a git repository and adds all the files to the local git repository
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZZXtqU_9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jzza4j050xavw15prfhm.png" alt="Add to Source Control"&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Team Explorer&lt;/strong&gt; from the right hand sidebar. Click on &lt;strong&gt;Publish to Github&lt;/strong&gt; 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P5FcU1GM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/d1uhkmif54rv84ivmf7m.PNG" alt="Team Explorer"&gt;
&lt;/li&gt;
&lt;li&gt;You have to enter your Github Credentials in &lt;strong&gt;Connect To Github&lt;/strong&gt; window. I am using my Github personal profile. Enter &lt;strong&gt;username&lt;/strong&gt;/&lt;strong&gt;password&lt;/strong&gt; and click &lt;strong&gt;Sign in&lt;/strong&gt; button.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t3zCVPbY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lkhs387zh8koons3mldu.PNG" alt="Connect To Github"&gt;
&lt;/li&gt;
&lt;li&gt;Enter your desired &lt;strong&gt;repository name&lt;/strong&gt; and an optional description. Click &lt;strong&gt;Publish&lt;/strong&gt;.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4yH9CGiQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8l2vzd1pfbgi3yxeqoez.PNG" alt="Publish to Github"&gt;
&lt;/li&gt;
&lt;li&gt;When the repository is successfully pushed you should see an information alert &lt;strong&gt;Repository created successfully&lt;/strong&gt; in &lt;strong&gt;Team Explorer&lt;/strong&gt; side bar.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zythNpI0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tp9d3pey8ashyngjondt.PNG" alt="Repository created successfully"&gt;
&lt;/li&gt;
&lt;li&gt;The published repository can be accessed from &lt;a href="https://github.com/ramhemasri/BlazorOnNetlify/"&gt;BlazorOnNetlify&lt;/a&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--smKRKr9Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/kad9f5dlcwtjcwhokz1j.png" alt="BlazorOnNetlify Github repo"&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>dotnet</category>
      <category>webassembly</category>
      <category>github</category>
      <category>netlify</category>
    </item>
    <item>
      <title>Hosting Blazor on Netlify using Github Actions (Part 1 of Series)</title>
      <dc:creator>Ram Hemasri</dc:creator>
      <pubDate>Mon, 30 Dec 2019 21:20:58 +0000</pubDate>
      <link>https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-1-of-series-3a1k</link>
      <guid>https://dev.to/ramhemasri/hosting-blazor-on-netlify-using-github-actions-part-1-of-series-3a1k</guid>
      <description>&lt;p&gt;This series introduces hosting Blazor WebAssembly on Netlify using Github Actions. In part 1 we will create a Blazor WebAssembly Project using Visual Studio 2019&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Blazor?
&lt;/h3&gt;

&lt;p&gt;Blazor is a feature of ASP.NET Core which lets you build interactive web UIs using C#. Blazor can run on client-side directly in the browser using WebAssembly or it can be hosted on server side in a ASP.NET core app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;As of this writing Blazor WebAssembly is still in preview and it requires .Net Core 3.1 SDK. Check your dotnet version by running &lt;code&gt;dotnet --version&lt;/code&gt; in a command shell. This command should return &lt;strong&gt;3.1.100&lt;/strong&gt;. Otherwise, you have to install &lt;a href="https://dotnet.microsoft.com/download/dotnet-core/3.1"&gt;.NET Core 3.1&lt;/a&gt;. &lt;a href="https://visualstudio.microsoft.com/vs/"&gt;Visual Studio 2019 16.4&lt;/a&gt; or &lt;a href="https://visualstudio.microsoft.com/vs/mac/"&gt;Visual Studio for mac 8.4 preview 4&lt;/a&gt; also includes .NET Core 3.1. Run the following command shell to install Blazor project templates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.1.0-preview4.19579.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create Blazor WebAssembly App in Visual Studio 2019
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In Visual Studio 2019, create a new project by navigating to &lt;strong&gt;File &amp;gt; New &amp;gt; Project&lt;/strong&gt; 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hi_iP7hX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/w14rh7gamqqstxwtxsnv.PNG" alt="Create New Project"&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Blazor App&lt;/strong&gt; from the &lt;strong&gt;Create a new Project&lt;/strong&gt; window and click &lt;strong&gt;Next&lt;/strong&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rFgLoQmk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/l0n1zxr9l3zs2uhg9q3n.png" alt="Cerate Blazor App"&gt;
&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Create a new Blazor app&lt;/strong&gt; window Select &lt;strong&gt;Blazor WebAssembly App&lt;/strong&gt; and uncheck &lt;strong&gt;Asp.NET Core hosted&lt;/strong&gt;. Click on Create.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4KOMDuSh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tba4e81clrp1or0uhpjd.png" alt="Create a new Blazor app"&gt;
&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Configure your new project&lt;/strong&gt; window enter &lt;strong&gt;Project name&lt;/strong&gt; and click on &lt;strong&gt;Create&lt;/strong&gt;. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D1xMAa5q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/lo945bzbuaxq17jbxh5y.png" alt="Set Blazor Project name"&gt;
&lt;/li&gt;
&lt;li&gt;Visual Studio displays the newly created Blazor WebAssembly app in &lt;strong&gt;Solution Explorer&lt;/strong&gt;. You can run the app by pressing &lt;strong&gt;F5&lt;/strong&gt; or clicking &lt;strong&gt;IIS Express&lt;/strong&gt;.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cc3ft0Bl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/qydfg9qiajeqw1mxmtng.png" alt="Run Blazor App"&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fp_t_895--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/b5dcyxjdmp9rcvtn1m0z.gif" alt="Blazor App in Browser"&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>dotnet</category>
      <category>webassembly</category>
      <category>netlify</category>
      <category>github</category>
    </item>
  </channel>
</rss>
