• Microsoft,  SQL Server

    A slight issue when one wants to install SQL 2019 Dev, etc The ODBC 17 SQL Driver

    On my way to getting the latest SQL Server installed on one of my Dev PC’s- I ran across the issue of getting prompt for:


    What the hell…

    ODBC Driver 17 is what that is about. Apparently, the SQL installed is not smart enough to know that one already has ODBC 17 SQL Driver installed and runs into a major “cannot resolve” the problem. The end result is that one does not get the SQL instance installed…

    But after reading lots of “not really helping” blurbs from the Internet, the Solution is simple… well mostly.

    You have to uninstall the “Microsoft ODBC Driver 17 for SQL Server” – one can find it on windows 10 in the APPS & Features. Uninstall it and redo the SQL install. One should have better luck with moving forward with getting SQL installed…


  • .Net,  Microsoft

    The world of Dotnet Templates

    I have long been using templates for dotnet new and of course Visual Studio. So I’ve started down the road of creating my own templates… or a least trying to understand how to create these,

    Now creating templates for dotnet new and especially for Visual Studio has never been a simple task. But let us try.

    The first matter is understanding where templates live. For the most part these are based on your user for your PC. This found by using a PS command:

    join-path -Path $env:USERPROFILE -ChildPath .templateengine

    This will return C:\Users\<your user name>\.templateengine   And as you guess it, there is a .templateengine directory in your users directory. What does that mean, well simply put, when one does a .dotnet new –install, application templates get installed for your user. These actually live in that directory space. Simple enough.

    When you start developing your own templates, you need to be careful, because the list of templates can get very long. That may or may not be a problem.
    A handy PS script to clear out installed templates and put it back to the original set of templates:

    function Reset-Templates{
            [string]$templateEngineUserDir = (join-path -Path $env:USERPROFILE -ChildPath .templateengine)
            'resetting dotnet new templates. folder: "{0}"' -f $templateEngineUserDir | Write-host
            get-childitem -path $templateEngineUserDir -directory | Select-Object -ExpandProperty FullName | remove-item -recurse
            &dotnet new --debug:reinit

    Keep in mind, this clears out all templates you have installed under your user. Use with care. If you have a set of favorite templates… yeap, they will get cleared off too!

    Now, where to start? I would go to Sayed’s GitHub repo @

    It’s a long read, but one can also go over to Channel9 and look for the video series that steps one through the process.

    Another handy resource to search for templates is a web site:



  • .Net

    The Confusing world of Text.Json and .Net 5

    So one of the base libraries over the years that has been our friend is Newtonsoft.Json – the stuff of legend maybe? Well, if not, certainly anyone whose done .Net and used any kind of Json formatted data certainly knows of Newtonsoft.Json… The “go to Json Serializer”! That is until Microsoft set out to prove to the world they could do it better. Better?

    Like many things in the world of .Net over the years, Microsoft watches these open source libraries… and notices when they become the defacto standard (meaning… Micro either left it out of their core offerings…. or more typical someone did better). Hence Microsoft’s System.Text.Json vs. NewtonSoft.Json.  Oh let the confusion begin!

    Now to Microsoft’s credit they have been working to finally bring System.Text.Json up to speed… but of course they continue to state the their intent is not to bring their Json library up to par with Newtonsoft. And there it is… the two world Json library view… now mostly the complaint I have deals with migrating old code up to using Microsoft’s. It’s a bit of a “rub me the wrong way” kind of careful reading as to which direction to take. Why? Well you get into dependency  issues where Newtonsoft and Microsoft’s library don’t always play well together- that can be a problem when it comes to wanting to use old code (NewtonSoft) in a new app while wanting to take advantage of faster MS .Net 5 serializations….. Yeah, why would one ever want to do that?

    Anyway, I take some time to read a great article @

    Layomi has a great write up of things to consider… especially in the section “Choosing between…” the two different libraries…. It’s a good read.


  • .Net,  .Net Core,  ASP.NET Core,  Microsoft,  Visual Studio 2019

    Dot Net 5 is Here… Check it out.

    Wow… some most excellent videos on what is what in .Net 5! Check it out on

    You can also find these on You Tube… search on .Net 5. The Conf 2020 Days 1-3 will be there…


  • Microsoft

    Backing up your WSL Distro and Copying it to another PC

    In our last article we talked about Moving an install WSL Distro from it awful install folder to another drive and path. So let’s make a back up of that distro, and then install it on a different PC.

    Using our new favorite tool LxRunOffline let’s make back up of a distro on our PC.

    However, as one starts down the path of using LxRunOffline, there is a slight issue when it comes to WSL2 Distros:

    lxrunoffline export -n openSUSE-Leap-15-1 -f suse.tar.gz
    [ERROR] The action/argument “export” doesn’t support WSL2.

    Ok, not a huge problem… this article just got longer…. LxRunOffline export will work for WSL 1 type Distros… So let’s do an example of both using LxRunOffline and WSL utilities.

    For WSL 1 type Distros:

    LxRunOffline has a command called List- from a Powershell window my list looks like this

    LxRunOffline.exe list

    Now the LX tool has a command to do a backup. This collects the distro into a Linux tar file (in Linux terms a compressed tape file).

    LxRunOffline export n <NameOfDistro> –f <pathAndNameOfExportFile>

    That’s the general format of the export.

    Now before one goes about exported a Distro – I would really do a WSL –shutdown Why? I think it’s best not to have any Distro’s running when you are trying to export them. It’s not a 100% required, but it is a good practice.

    For WSL 2 type Distros:

    Still do the WSL –shutdown.

    Now we use the WSL command to backup the Distro. Like the LX tool, WSL has basically the same set of commands.
    Get a list of Distros with:

    wsl --list
    Windows Subsystem for Linux Distributions:
    Ubuntu-20.04 (Default)

    And the backup command for WSL:

    wsl --export WLinux .\PengWin.tar.gz
        Directory: D:\cse.Linux
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a---          10/17/2020 12:46 PM     9039769600 PengWin.tar.gz

    Now we have in either case a copy of our Distro that can be imported on another PC with WSL.

    When using WSL.exe

    --import <Distro> <InstallLocation> <FileName> [Options]
            Imports the specified tar file as a new distribution.
            The filename can be - for standard input.
                --version <Version>
                    Specifies the version to use for the new distribution.

    The –import command  Allows one to name the Distro, install to a location, from a filename. The options here, –version allows one to change the WSL version while it’s being imported.

    Now LXRunOffline is a little different:

    lxrunoffline install
      -n arg                Name of the distribution
      -d arg                The directory to install the distribution into.
      -f arg                The tar file containing the root filesystem of the
                            distribution to be installed. If a file of the same
                            name with a .xml extension exists and "-c" isn't
                            specified, that file will be imported as a config file.
      -r arg                The directory in the tar file to extract. This argument
                            is optional.
      -c arg                The config file to use. This argument is optional.
      -v arg (=2)           The version of filesystem to use, latest available one
                            if not specified.
      -s                    Create a shortcut for this distribution on Desktop.

    As we see the install command has a few more options beyond Name, Directory, and tar filename.

    Happy WSL’ing,

    Prev Article: Moving your installed WSL Linux Distro

    Go Back to Index of WSL articles


  • Microsoft

    Moving your installed WSL Linux Distro

    Why start this series with moving Distro’s around and not just about installing? Simple, The distro’s tend to default their install on the C: drive in the login user App Data space (don’t even get me started on over loading c:\users\<YourUserName>).

    So what’s the problem with c:\users\<YourUserName>\AppData\Local?  where do I begin… protected? hidden? Filling up your c: drive… pick one. But the most annoying one when it comes to Windows WSL distros… the install places these in the package folder. So c:\users\<YourUserName>\AppData\Local\Packages, and it does it in a way that usually involves a GUID like naming… Get the picture?

    Ok, enough harping on it… Let’s get to moving things about.

    You start with getting the most handy little utility called LxRunOffline. You can go to their GitHub page:

    Lots of mucking about with install verbiage (that’s a bit on the side of… yeah you really don’t need to do all of that on windows 10). Just go to the release page and download the zip file already:

    Unzip to a favorite directory… one that is in your execute path works fine. This gives one a exe that will execute from either a command window or powershell.

    So let’s step through it…

    First go ahead and install one or more of your favorite distros for WSL.

    Next we move it….

    ##  We will do this in Powershell
    ##  Start with choosing a place we want our distro's to live... in my case the root distro I do is D:\cseWSL\<distroName>
    ## Find your user
    ## I get something like
    ## Next for the location you wish to move the distro to... i.e. in my case d:\cseWSL\Ubuntu18
    ## I'm doing my Ubuntu 18.04 
    ##  We set some access control to that directory
    icacls d:\cseWSL\Ubuntu18 /grant "scott:(OI)(CI)(F)"
    ## Here we are setting some inheriate properties and full file access to my user
    ## you can lookup icacls and what those parameters are from the internet
    ## Finding out what the distro names are
    LxRunOffline list 
    ##This is same as the WSL -l  command
    ## You can list the current location of a distro using
    LxRunOffline get-dir -n Ubuntu
    ## The -n <distro Name> is required for the get-dir command
    ## For my Fedora distro I get something like this
    ....  \AppData\Local\Packages\WhitewaterFoundryLtd.Co.FedoraRemixforWSL_kd1vv0z0vy70w\LocalState
    ## Now the magic part... Moving a distro
    LxRunOffline move -n Ubuntu -d d:\cseWSL\Ubuntu18
    ##  the -n and -d are required for the move command
    ##  if the named distro exists and the directory exists, then this will move the distro over
    ## To check that everything is ok with the move
    ## Do another LxRunOffline get-dir -n
    ## and see the new location
    ## Then of course, run your distro to make sure it starts up
    ## LxRunOffline provides a run command
    LxRunOffline run -n Ubuntu
    ## Or start the moved distro in the normal way

    Seems a little much to do… but not really.  It comes down to Create a Directory destination, set some permissions, and then run a command.

    There we are… distros located in a Happy Place.

    Next up: Backing up your WSL Distro and Copying it to another PC

    Back to Index of WSL Articles




  • Microsoft

    WSL Linux on Windows 10 Series of Articles

    Ok it’s time to start a series on WSL.

    I make no apologies when I say I’m not huge Linux fan, but I’m also not lacking when it comes to understanding how to utilize this OS in my Microsoft world.

    First off, I’m not a newbie when it comes to matters of Linux or Unix- I spent a number of years working on HP UX with Window-X/Motif apps I had to support (so to all the Linux Trolls… yeah whatever).

    So why is a “Microsoft Heavy” a.k.a. Me, ScottGeek bothering with the Linux side? Simple, over the past few years with MS moving to an inclusive approach with it’s Development tooling for cross OS apps, why wouldn’t I add Linux to my stack? Now don’t get me wrong, I’m not about to start writing code in Java or some other fork of the C language beyond C#.  But Linux as a OS to deploy apps on, Linux as an IOT host, Linux as an place to share my API’s that the non-MS folks want to use- yeah that works.

    So shall we begin with some topics on WSL:

    Moving your installed WSL Linux Distro
    Backing up your WSL Distro and Copying it to another PC