Category: .NET Core

Db2Code–part 2- architecture

What we will build you can see here :

Each class will have it is own CodeTemplates\EFCore  templates from which will generate the code.

Let’s start with ExampleModels : Here will be the class definitions . From the table defintion , the DB2Code will generate

1. A definition of a interface with table columns as properties

public interface I_Department_Table 
{
 long IDDepartment { get; set; }
 string Name { get; set; }
}

2. A class with relationships

public partial class Department
{
    [Key]
    public long IDDepartment { get; set; }

    [StringLength(50)]
    [Unicode(false)]
    public string Name { get; set; } = null!;

    [InverseProperty("IDDepartmentNavigation")]
    public virtual ICollection<Employee> Employee { get; } = new List<Employee>();
}

3. class without relationship

public class Department_Table : I_Department_Table
{
 public long IDDepartment { get; set; }
 public string Name { get; set; }
 }

4. Explicit operator to convert 2 to 3

public static explicit operator Department_Table?(Department obj) { 
if(obj == null)
return null;
//System.Diagnostics.Debugger.Break();
var ret= new Department_Table();
ret.CopyFrom(obj as I_Department_Table );
return ret;
}
public static explicit operator Department?(Department_Table obj) { 
if(obj == null)
return null;
//System.Diagnostics.Debugger.Break();
var ret= new Department();
ret.CopyFrom(obj as I_Department_Table) ;
return ret;
}

5. Public method CopyFrom( interface)


public void CopyFrom(I_Department_Table other)  {
 this.IDDepartment = other.IDDepartment;
 this.Name = other.Name;
}

5. Enum with name of the columns

public enum eDepartmentColumns {
None = 0
,IDDepartment 
,Name 
}

6. Metadata with name of the tables and the columns

public static MetaTable metaData = new("Department");
static Department_Table (){
 MetaColumn mc=null;
 mc=new ("IDDepartment","long",false);
 metaData.AddColumn(mc);
 mc=new ("Name","string",false);
 metaData.AddColumn(mc);
}

 

Now it comes ExampleContext . Here will the database context and various search definitions that you need (e.g. for a column of type int, search will generate  = , > , < , between , in array  ) . More , it will generate metadata for the tables that are part of the context.

public  IAsyncEnumerable&lt;Department&gt; DepartmentSimpleSearch(GeneratorFromDB.SearchCriteria sc, eDepartmentColumns colToSearch, string value){}
public  IAsyncEnumerable&lt;Department&gt; DepartmentGetAll(){}
public async Task&lt;Department[]&gt; DepartmentFind_Array( SearchDepartment? search){}
public Task&lt;long&gt; DepartmentCount( SearchDepartment search)

 

Now it comes ExampleControllers  . This will generate controllers for REST API for the table and also Search Controllers for any kind of search that you may want.

//this is the REST controller
[ApiController]
[Route("[controller]")]    
public partial class RESTDepartmentController : Controller
{
    private ApplicationDBContext _context;
    public RESTDepartmentController(ApplicationDBContext context)
	{
        _context=context;
	}
    [HttpGet]
    public async Task&lt;Department_Table[]&gt; Get(){
        var data= await _context.Department.ToArrayAsync();
        var ret = data.Select(it =&gt; (Department_Table)it!).ToArray();
        return ret;

        
    }
    
        [HttpGet("{id}")]
    public async Task&lt;ActionResult&lt;Department_Table&gt;&gt; GetDepartment(long id)
    {
        if (_context.Department == null)
        {
            return NotFound();
        }
        var item = await _context.Department.FirstOrDefaultAsync(e =&gt; e.IDDepartment==id);

        if (item == null)
        {
            return NotFound();
        }

        return (Department_Table)item!;
    }


    [HttpPatch("{id}")]
        public async Task&lt;IActionResult&gt; PutDepartment(long id, Department value)
        {
            if (id != value.IDDepartment)
            {
                return BadRequest();
            }

            _context.Entry(value).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!DepartmentExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return NoContent();
        }

        [HttpPost]
        public async Task&lt;ActionResult&lt;Department&gt;&gt; PostDepartment(Department_Table value)
        {
          
            var val = new Department();
            val.CopyFrom(value);
            _context.Department.Add(val);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetDepartment", new { id = val.IDDepartment }, val);
        }
        [HttpDelete("{id}")]
        public async Task&lt;IActionResult&gt; DeleteDepartment(long id)
        {
            if (_context.Department == null)
            {
                return NotFound();
            }
            var item = await _context.Department.FirstOrDefaultAsync(e =&gt; e.IDDepartment==id);
            if (item == null)
            {
                return NotFound();
            }

            _context.Department .Remove(item);
            await _context.SaveChangesAsync();

            return NoContent();
        }

        private bool DepartmentExists(long id)
        {
            return (_context.Department.Any(e =&gt; e.IDDepartment  == id));
        }

    }    

And also a SEARCH controller

[ApiController]
[Route("[controller]/[action]")]    
public partial class AdvancedSearchDepartmentController : Controller
{
    private ISearchDataDepartment _search;
    public AdvancedSearchDepartmentController(ISearchDataDepartment search)
	{
        _search=search;
	}

    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; GetAll()
    {
        await foreach(var item in _search.DepartmentFind_AsyncEnumerable(null))
        {
            yield return (Department_Table)item!;
        }
        
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; GetWithSearch(SearchDepartment s)
    {
        await foreach(var item in _search.DepartmentFind_AsyncEnumerable(s))
        {
            yield return (Department_Table)item!;
        }
        
    }

//has one key
    [HttpGet]
    public async Task&lt;Department_Table?&gt; GetSingle(long id){
        var data=await _search.DepartmentGetSingle(id);
       if(data == null)
        return null;
       return (Department_Table)data;
    }

                  [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; EqualValues_IDDepartment( long[]  values)
    {
        string? value=null;
        if(values.Length&gt;0)
            value=string.Join( ",",values);
        var sc=SearchDepartment.FromSearch(GeneratorFromDB.SearchCriteria.InArray,eDepartmentColumns.IDDepartment,value);
        await foreach (var item in _search.DepartmentFind_AsyncEnumerable(sc))
        {
        
            yield return (Department_Table)item!;
        }
    }
     [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; DifferentValues_IDDepartment( long[]  values)
    {
        string? value=null;
        if(values.Length&gt;0)
            value=string.Join( ",",values);
        var sc=SearchDepartment.FromSearch(GeneratorFromDB.SearchCriteria.NotInArray,eDepartmentColumns.IDDepartment,value);
        await foreach (var item in _search.DepartmentFind_AsyncEnumerable(sc))
        {
        
            yield return (Department_Table)item!;
        }
    }
         [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; EqualValue_IDDepartment( long  value)
    {
        var sc = GeneratorFromDB.SearchCriteria.Equal;
        await foreach (var item in _search.DepartmentSimpleSearch_IDDepartment(sc, value))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; DifferentValue_IDDepartment( long  value)
    {
        var sc = GeneratorFromDB.SearchCriteria.Different;
        await foreach (var item in _search.DepartmentSimpleSearch_IDDepartment(sc, value))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public  async IAsyncEnumerable&lt;Department_Table&gt; SimpleSearch_IDDepartment(GeneratorFromDB.SearchCriteria sc,  long value){
        await foreach(var item in _search.DepartmentSimpleSearch_IDDepartment(sc,value))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; FindNull_IDDepartment(){
        var sc = GeneratorFromDB.SearchCriteria.Equal;
        await foreach(var item in _search.DepartmentSimpleSearchNull_IDDepartment(sc))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; FindNotNull_IDDepartment(){
        var sc = GeneratorFromDB.SearchCriteria.Different;
        await foreach(var item in _search.DepartmentSimpleSearchNull_IDDepartment(sc))
        {
            yield return (Department_Table)item!;
        }
    }
              [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; EqualValues_Name( string[]  values)
    {
        string? value=null;
        if(values.Length&gt;0)
            value=string.Join( ",",values);
        var sc=SearchDepartment.FromSearch(GeneratorFromDB.SearchCriteria.InArray,eDepartmentColumns.Name,value);
        await foreach (var item in _search.DepartmentFind_AsyncEnumerable(sc))
        {
        
            yield return (Department_Table)item!;
        }
    }
     [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; DifferentValues_Name( string[]  values)
    {
        string? value=null;
        if(values.Length&gt;0)
            value=string.Join( ",",values);
        var sc=SearchDepartment.FromSearch(GeneratorFromDB.SearchCriteria.NotInArray,eDepartmentColumns.Name,value);
        await foreach (var item in _search.DepartmentFind_AsyncEnumerable(sc))
        {
        
            yield return (Department_Table)item!;
        }
    }
         [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; EqualValue_Name( string  value)
    {
        var sc = GeneratorFromDB.SearchCriteria.Equal;
        await foreach (var item in _search.DepartmentSimpleSearch_Name(sc, value))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; DifferentValue_Name( string  value)
    {
        var sc = GeneratorFromDB.SearchCriteria.Different;
        await foreach (var item in _search.DepartmentSimpleSearch_Name(sc, value))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public  async IAsyncEnumerable&lt;Department_Table&gt; SimpleSearch_Name(GeneratorFromDB.SearchCriteria sc,  string value){
        await foreach(var item in _search.DepartmentSimpleSearch_Name(sc,value))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; FindNull_Name(){
        var sc = GeneratorFromDB.SearchCriteria.Equal;
        await foreach(var item in _search.DepartmentSimpleSearchNull_Name(sc))
        {
            yield return (Department_Table)item!;
        }
    }
    [HttpGet]
    public async IAsyncEnumerable&lt;Department_Table&gt; FindNotNull_Name(){
        var sc = GeneratorFromDB.SearchCriteria.Different;
        await foreach(var item in _search.DepartmentSimpleSearchNull_Name(sc))
        {
            yield return (Department_Table)item!;
        }
    }
        


    


}//end class

 

Finally , ExampleWebAPI . This will add the controllers from the ExampleControllers   to show the use .

var assControllers = typeof(UtilsControllers).Assembly;
builder.Services.AddControllers()
              .PartManager.ApplicationParts.Add(new AssemblyPart(assControllers)); ;
        

 

Of course , the name Example will be replaced , from the template, with the name of your project

Db2Code–part 1–idea

From the second year that I have started programming, I find tedious to replicate the tables structure to code and to generate classes and SQL . I started asking questions  – and no one has ever envisaged near me an ORM ( it was not a definition then ). I have made my own ORM  – and it was paying . However, I did not know how to market  – so oblivion was his fate.

Moving to this year , there are many ORM . One of those is EFCore – that has also a revers engineer /  scaffolding ready : https://learn.microsoft.com/en-us/ef/core/managing-schemas/scaffolding/ . But how generate all classes , controllers and others ? I was into https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview – but this does not allow programmers to modify what it generates. But , fortunately, this year EFCore7 has templates, based on t4 templates : https://learn.microsoft.com/en-us/ef/core/managing-schemas/scaffolding/templates?tabs=dotnet-core-cli . That means that now we could generate whatever we need!

So this is the project : A DB2Code Visual Studio Template. You can download from https://marketplace.visualstudio.com/items?itemName=ignatandrei.databasetocode  . Also, the source code is at https://github.com/ignatandrei/queryViewer/ . Download, modify the connectionDetails.txt and it will generate from you everything to WebAPI from SqlServer or Sqlite ( more providers soon). Also, it generates  different projects ( models, context, controllers) – and you can also modify the templates. It works ( for the moment) just with tables with 0 or 1 PK.

The next parts will be only about the challenges to develop such a solution.

SRE with .NET

I have found https://oschvr.com/posts/what-id-like-as-sre/  and I trying to answer from the .NET Core application .

How can I check the health of the service ?

Simple : Use https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks

How can I safely and gracefully restart the service

Simple : Use https://www.nuget.org/packages/NetCoreUsefullEndpoints#readme-body-tab

How and why would the service fail ?

Partial answer : same with the health : See sql server at https://tiltwebapp.azurewebsites.net/healthchecks-ui

Do you use appropriate logging levels depending on the environments ?

Answer: Use logging frameworks such as https://www.nuget.org/packages/NLog/ with config file –to let SRE modify levels logged at runtime

What kind of metrics are you exposing

Simple : use grafana, prometheus, azure instrumentation. See https://learn.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core?tabs=netcorenew%2Cnetcore6

Is there any documentation/design specification for the service ?

Partial answer: Use OpenAPI  / swagger https://learn.microsoft.com/en-us/training/modules/improve-api-developer-experience-with-swagger/ . For advanced uses  see https://www.nuget.org/packages/NetCore2Blockly/

How does the data flow through the service ?

Not having (yet ) an answer

What is the testing coverage ?

Simple : Use XUnit, NUnit, MsTest with Coverlet with ReportGenerator . For advanced uses see https://github.com/LightBDD/LightBDD and SpecFlow

NetCoreUsefullEndpoints-part 10- adding LongRunningTasks

In the Nuget NetCoreUsefullEndpoints I have already an  endpoint to shutdown  –  see http://msprogrammer.serviciipeweb.ro/2023/02/20/netcoreusefullendpoints-part-9-adding-endpoints-for-shutdown/ .

However, this means that there are no ( or some … )  long running operations that are running … How to identify those ?

For the starting point , I was thinking at something simple, like an IDisposable that knows when the Long Running operation is finished

[HttpGet(Name = “GetWeatherForecast”)]
         public async Task<WeatherForecast[]> Get()
         {
             using var lr = UsefullExtensions.UsefullExtensions.AddLRTS(“weather”+DateTime.UtcNow.Ticks);
             await Task.Delay(5000);
             return Enumerable.Range(1, 5).Select(index => new WeatherForecast
             {
                 Date = DateTime.Now.AddDays(index),
                 TemperatureC = Random.Shared.Next(-20, 55),
                 Summary = Summaries[Random.Shared.Next(Summaries.Length)]
             })
             .ToArray();
         }

The implementation is very simple for adding:

internal static Dictionary<string, LongRunningTask> lrts = new();
public static LongRunningTask AddLRTS(string id, string? name = null)
{
     if(lrts.ContainsKey(id))
     {
         lrts[id].Dispose();
     }
     lrts.Add(id,new LongRunningTask(id, name ?? id));
     return lrts[id];
}

And for removing itself:

public record LongRunningTask(string id, string? name = “”) : IDisposable
{
     public void Dispose()
     {
         UsefullExtensions.lrts.Remove(id);
         GC.SuppressFinalize(this);
     }

}

Also, an endpoint will be registered for the user know what are the operations

var rh = route.MapGet(“api/usefull/LongRunningTasks/”,
             (HttpContext httpContext) =>
             {
                 var data=lrts.Select(it=>new { it.Key, it.Value.name }).ToArray();
                 return data;
             });

        var rhCount = route.MapGet(“api/usefull/LongRunningTasks/Count”,
             (HttpContext httpContext) =>
             {
                 return lrts.LongCount();
             });

And that will be to register and found what are the long running tasks in ASP.NET Core

NetCoreUsefullEndpoints-part 9- adding endpoints for shutdown

In my NuGet NetCoreUsefullEndpoints package  I want to can shutdown the application . Could be hard way, like calling Environment.Exit or the easy way , like calling a cancellation token. Also, what should happen with all the requests that are coming ? ( And I do not want to mention long running tasks – I do not found a useful registration / un-registration for those)

So I come with the following implementation for forced exit

//IEndpointRouteBuilder

var rhForced = route.MapPost(“api/usefull/shutdownForced/{id:int}”,
     (int id) =>
     {
         Environment.Exit(id);
     });

For the shutdown that is requested , I come with 3 modifications:

1.In Program.cs , I put a Middleware for not serving the HTTP

builder.Services.AddSingleton<MiddlewareShutdown>();

app.UseMiddleware<MiddlewareShutdown>();

await app.RunAsync(UsefullExtensions.UsefullExtensions.cts.Token);

2.  Register the routes in order to use the cancellation token

//IEndpointRouteBuilder

var rhSec = route.MapPost(“api/usefull/shutdownAfter/{seconds}”,
             (HttpContext httpContext, int seconds) =>
             {
                 RequestedShutdownAt = DateTime.UtcNow;
                 var h = cts.Token.GetHashCode();
                 cts?.CancelAfter(Math.Abs(seconds)*1000);
                 return h;

            });

3. Use a middleware to return 418 Status Code if the application is shutting down

public class MiddlewareShutdown : IMiddleware
{
     public async Task InvokeAsync(HttpContext context, RequestDelegate next)
     {
         if (UsefullExtensions.RequestedShutdownAt != null)
         {
             context.Response.StatusCode = 418;
             await context.Response.WriteAsync(“Service is stopping at ” + UsefullExtensions.RequestedShutdownAt!.Value.ToString(“s”));
             return;
         }
         await next(context);
         return;
     }
}

And with those you can shutdown gracefully any ASP.NET Core application ( without long running tasks!)

[ADCES]React – first steps(again) and SRE and .NET

Presentation 1: React( first steps) – again
Presenter: Andrei Ignat, http://msprogrammer.serviciipeweb.ro/
Descriere : O sa fie atinse urmatoarele concepte prin exemple practice:

1. React ca librarie, nu ca framework
2. Create-react-app – cu typescript si modificarile care trebuie aduse
3. Componente si Utilizarea de Hooks
4. Comunicarea intre componente de React – de la parinte la copil si intre copii diferiti cu RxJS
4. Utilizarea de librarii: React Router, MUI

Presentation 2: What a SRE wants and how .NET provides
Descriere: We will answer to https://oschvr.com/posts/what-id-like-as-sre/ with examples and tests 😉

Va astept la https://www.meetup.com/bucharest-a-d-c-e-s-meetup/events/291291505/

NetCoreUsefullEndpoints-part 8- adding start date

In my NuGet NetCoreUsefullEndpoints package  I have had already registered the actual date as

var rh = route.MapGet(“api/usefull/dateUTC”, (HttpContext httpContext) =>
            {
                return Results.Ok(DateTime.UtcNow);
            });

Now I want to register also the start date – the date where the application has been started.

1. How to do this  ?

2. What will be the route ?

For 1 can be a static constructor or, better , the singleton in C# :

private static DateTime startDateUTC = DateTime.UtcNow;

For 2 it is more complicated

My solution ( just break compatibility, since I have not a v1 and v2) was the following

var rh = route.MapGet(“api/usefull/date/startUTC”, (HttpContext httpContext) =>
{
     return Results.Ok(startDateUTC);
});

var rhUTC = route.MapGet(“api/usefull/date/nowUTC/”,
     (HttpContext httpContext) =>
     {
         return TypedResults.Ok(DateTime.UtcNow);
     });

rhUTC.AddDefault(corsPolicy, authorization);

So now I have same routing api/usefull/date

Nuget packages and Github repositories

You can see the Github repositories that you have worked  last year by going to https://docs.github.com/en/graphql/overview/explorer and entering

query ContributionGraph {
   user(login: “ignatandrei”) {
     contributionsCollection(
       from: “2022-01-01T00:00:00+00:00”
       to: “2022-12-31T00:00:00+00:00”
     ) {
       commitContributionsByRepository(maxRepositories:100){
         repository{
           nameWithOwner
           url
           updatedAt
         }
       }     
     }
   }
}

Mine are

ignatandrei/TILT
ignatandrei/BlocklyAutomation
ignatandrei/QueryViewer
ignatandrei/RSCG_AMS
ignatandrei/rxDemo
ignatandrei/NetCoreUsefullEndpoints
ignatandrei/Presentations
ignatandrei/NETCoreBlockly
ignatandrei/FunctionsDI
ignatandrei/GeneratorOfHelp
ignatandrei/MicroservicesPortChooser
ignatandrei/AOP_With_Roslyn
ignatandrei/RSCG_TimeBombComment
ignatandrei/RSCG_Examples

And those  are the NuGet packages:

programmerall
GOH
QueryGenerator
RSCG_FunctionsWithDI_Base
RSCG_FunctionsWithDI
AMS_Base
AMSWebAPI
RSCG_AMS
AOPMethodsGenerator
AOPMethodsCommon
RSCG_TimeBombComment
NetCoreBlockly

[Programmer Tools]Dotnet tools (local and global)

The list have been obtained with the help of VisualAPI, former BlocklyAutomation.
You can obtain a list on your device by running

<code>
dotnet tool update –global programmerall –no-cache
programerall
</code>

Then browse to http://localhost:37283/blocklyAutomation/automation/loadexample/dotnetTool and press Execute
( You can have automation the same for your site – just contact me)

Those are my .NET Tools ( either local or global)

  1. coveralls.net:
    Coveralls.io uploader for .NET Code Coverage. Supports opencover and visual studio’s codecoverage.exe on windows, and monocov for mono
  2. coverlet.console:
    Coverlet is a cross platform code coverage tool for .NET, with support for line, branch and method coverage.
  3. csharptotypescript.clitool:
    Convert C# Models, ViewModels and DTOs into their TypeScript equivalents.
  4. dotmorten.omdgenerator:
    Automatically generates an HTML Document with an object model diagram for your C# library<
  5. dotnet-aop:
    Simple AOP for .NET with RoslynTo use Install as global tool asdotnet tool install -g dotnet-aopgo to your solution folder rundotnet aopFor customizing , see https://github.com/ignatandrei/AOP_With_Roslyn/blob/master/AOPR
  6. dotnet-coverage:
    Dynamic code coverage tools.
  7. dotnet-depends:
    Dependency explorer for .NET
  8. dotnet-ef:
    Entity Framework Core Tools for the .NET Command-Line Interface.Enables these commonly used dotnet-ef commands:dotnet ef migrations adddotnet ef migrations listdotnet ef migrations scriptdotnet ef dbcontext infodotnet ef
  9. dotnet-outdated-tool:
    A .NET Core global tool to update project dependencies.
  10. dotnet-project-licenses:
    Package Description
  11. dotnet-property:
    .NET Core command-line (CLI) tool to update project properties and version numbers on build.
  12. dotnet-repl:

    dotnet-repl

    This project is an experiment using .NET Interactive / Polyglot Notebooks and Spectre.Console to create a polyglot .NET REPL for use on

  13. dotnet-reportgenerator-globaltool:
    ReportGenerator converts coverage reports generated by coverlet, OpenCover, dotCover, Visual Studio, NCover, Cobertura, JaCoCo, Clover, gcov or lcov into human readable reports in various formats. The reports do not only
  14. dotnet-sonarscanner:
    The SonarScanner for .Net Core from version 2.1 allows easy analysis of any .NET project with SonarCloud/SonarQube.
  15. dotnet-suggest:
    Package Description
  16. dotnet-versioninfo:
    Display version information of .NET Core assemblies
  17. dotnetthx:
    Dotnet tool listing all authors of packages you are using in your project
  18. grynwald.mddocs:
    MdDocs is a tool generate documentation as markdown files. This package provides MdDocs as .NET Core global tool.
  19. markdownsnippets.tool:
    .NET Core Global Tool for merging code snippets with markdown documents
  20. microsoft.dotnet.mage:
    Package Description
  21. moniker.cli:
    Moniker CLI is a tiny .NET Core Global Tool for generating fun names.
  22. nswag.consolecore:
    NSwag: The OpenAPI/Swagger API toolchain for .NET and TypeScript
  23. powershell:
    PowerShell global tool
  24. programmerall:

    ProgrammerAll is a collection of HTTP API Utils, that can be used by Swagger or VisualAPI
    How to install
    Install as .NET Tool ( local or global)
    dotn

  25. run-script:

    dotnet-run-script

    A dotnet tool to run arbitrary commands from a project’s “scripts” object.

  26. skbkontur.typescript.contractgenerator.cli:
    A tool that can generate TypeScript types from C# classes
  27. ubiety.versionit:
    VersionIt is for automatically generating versions and changelog based on conventional commits.
  28. xunit-cli:
    A global .NET Core tool for running xunit tests.Installation: dotnet tool install -g xunit-cliUsage: xunit [additionalArgs]    This package was build from source code at https://github.com/natemcmaster/xuni

[Programmer Tools] Applications

The list have been obtained with the help of VisualAPI, former BlocklyAutomation.
You can obtain a list on your device by running


dotnet tool update --global programmerall --no-cache
programerall

Then browse to http://localhost:37283/blocklyAutomation/automation/loadexample/winget and press Execute
( You can have automation the same for your site – just contact me)

Those are the application on my PC:

  1. 7-Zip [7zip.7zip]: Free and open source file archiver with a high compression ratio.
  2. Cisco Webex Meetings [Cisco.CiscoWebexMeetings]: Cisco Webex is the leading enterprise solution for video conferencing, online meetings, screen share, and webinars. Web conferencing, cloud calling and equipment.
  3. Docker Desktop [Docker.DockerDesktop]: Docker Desktop is an application for macOS and Windows machines for the building and sharing of containerized applications. Access Docker Desktop and follow the guided onboarding to build your first containerized application in minutes.
  4. Git [Git.Git]: Git for Windows focuses on offering a lightweight, native set of tools that bring the full feature set of the Git SCM to Windows while providing appropriate user interfaces for experienced Git users and novices alike.
  5. GitHub Desktop [GitHub.GitHubDesktop]: Focus on what matters instead of fighting with Git. Whether you’re new to Git or a seasoned user, GitHub Desktop simplifies your development workflow.
  6. Google Chrome [Google.Chrome]: A more simple, secure, and faster web browser than ever, with GoogleΓÇÖs smarts built-in.
  7. Java 8 [Oracle.JavaRuntimeEnvironment]: Java allows you to play online games, chat with people around the world, calculate your mortgage interest, and view images in 3D, just to name a few. Its also integral to the intranet applications and other e-business solutions that are the foundation of corporate computing. Please note you now need a Java License from Oracle to use unless installed for Personal Use and Development Use.
  8. Kali Linux [kalilinux.kalilinux]: Kali Linux is a Debian-derived Linux distribution designed for digital forensics and penetration testing.
  9. Logitech Unifying Software [Logitech.UnifyingSoftware]: Logitech Unifying-Software lets you add and remove devices that use a Unifying receiver.
  10. Microsoft .NET Runtime 3.1 [Microsoft.DotNet.Runtime.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  11. Microsoft .NET Runtime 3.1 [Microsoft.DotNet.Runtime.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  12. Microsoft .NET Runtime 5.0 [Microsoft.DotNet.Runtime.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  13. Microsoft .NET Runtime 5.0 [Microsoft.DotNet.Runtime.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  14. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  15. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  16. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  17. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  18. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  19. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  20. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  21. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  22. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  23. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  24. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  25. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  26. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  27. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  28. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  29. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  30. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  31. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  32. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  33. Microsoft .NET SDK 3.1 [Microsoft.DotNet.SDK.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  34. Microsoft .NET SDK 5.0 [Microsoft.DotNet.SDK.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  35. Microsoft .NET SDK 5.0 [Microsoft.DotNet.SDK.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  36. Microsoft .NET Windows Desktop Runtime 3.1 [Microsoft.DotNet.DesktopRuntime.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  37. Microsoft .NET Windows Desktop Runtime 5.0 [Microsoft.DotNet.DesktopRuntime.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  38. Microsoft .NET Windows Desktop Runtime 6.0 [Microsoft.DotNet.DesktopRuntime.6]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  39. Microsoft ASP.NET Core Hosting Bundle 3.1 [Microsoft.DotNet.HostingBundle.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  40. Microsoft ASP.NET Core Hosting Bundle 5.0 [Microsoft.DotNet.HostingBundle.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  41. Microsoft ASP.NET Core Runtime 3.1 [Microsoft.DotNet.AspNetCore.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  42. Microsoft ASP.NET Core Runtime 3.1 [Microsoft.DotNet.AspNetCore.3_1]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  43. Microsoft ASP.NET Core Runtime 5.0 [Microsoft.DotNet.AspNetCore.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  44. Microsoft ASP.NET Core Runtime 5.0 [Microsoft.DotNet.AspNetCore.5]: .NET is a free, cross-platform, open-source developer platform for building many different types of applications.
  45. Microsoft Build of OpenJDK with Hotspot 11 [Microsoft.OpenJDK.11]: The Microsoft Build of OpenJDK is a new no-cost long-term supported distribution and Microsoft’s new way to collaborate and contribute to the Java ecosystem.
  46. Microsoft Edge [Microsoft.Edge]: World-class performance with more privacy, more productivity, and more value while you browse.
  47. Microsoft Edge WebView2 Runtime [Microsoft.EdgeWebView2Runtime]: Embed web content (HTML, CSS, and JavaScript) in your native applications with Microsoft Edge WebView2.
  48. Microsoft MPI [Microsoft.msmpi]: Microsoft MPI (MS-MPI) is a Microsoft implementation of the Message Passing Interface standard for developing and running parallel applications on the Windows platform.
  49. Microsoft OneDrive [Microsoft.OneDrive]: Save your files and photos to OneDrive and access them from any device, anywhere.
  50. Microsoft PowerBI Desktop [Microsoft.PowerBI]: Create stunning reports and visualizations with Power BI Desktop.
  51. Microsoft SQL Server 2012 Native Client [Microsoft.SQLServer2012NativeClient]: ODBC and OLE DB drivers for SQL Server.
  52. Microsoft SQL Server Management Studio [Microsoft.SQLServerManagementStudio]: SQL Server Management Studio (SSMS) is an integrated environment for managing any SQL infrastructure, from SQL Server to Azure SQL Database. SSMS provides tools to configure, monitor, and administer instances of SQL Server and databases. Use SSMS to deploy, monitor, and upgrade the data-tier components used by your applications, and build queries and scripts.
  53. Microsoft System CLR Types for SQL Server 2019 [Microsoft.CLRTypesSQLServer.2019]: The SQL Server System CLR Types package contains the components implementing the geometry, geography, and hierarchy ID types in SQL Server
  54. Microsoft Teams [Microsoft.Teams]: Make amazing things happen together at home, work, and school.
  55. Microsoft Visual C++ 2005 Redistributable [Microsoft.VCRedist.2005.x86]: The Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 32-bit applications developed with Visual C++ 2005 SP1 on a computer that does not have Visual C++ 2005 SP1 installed.
  56. Microsoft Visual C++ 2008 Redistributable – x64 [Microsoft.VCRedist.2008.x64]: The Microsoft Visual C++ 2008 SP1 Redistributable Package (x64) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2008 SP1 on a computer that does not have Visual C++ 2008 SP1 installed.
  57. Microsoft Visual C++ 2008 Redistributable – x86 [Microsoft.VCRedist.2008.x86]: The Microsoft Visual C++ 2008 SP1 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 32-bit applications developed with Visual C++ 2008 SP1 on a computer that does not have Visual C++ 2008 SP1 installed.
  58. Microsoft Visual C++ 2010 x64 Redistributable [Microsoft.VCRedist.2010.x64]: The Microsoft Visual C++ 2010 SP1 Redistributable Package (x64) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2010 SP1 on a computer that does not have Visual C++ 2010 SP1 installed.
  59. Microsoft Visual C++ 2010 x86 Redistributable [Microsoft.VCRedist.2010.x86]: The Microsoft Visual C++ 2010 SP1 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2010 SP1 on a computer that does not have Visual C++ 2010 SP1 installed.
  60. Microsoft Visual C++ 2012 Redistributable (x64) [Microsoft.VCRedist.2012.x64]: The Microsoft Visual C++ 2012 Redistributable Package (x64) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2012 on a computer that does not have Visual C++ 2012 installed.
  61. Microsoft Visual C++ 2012 Redistributable (x86) [Microsoft.VCRedist.2012.x86]: The Microsoft Visual C++ 2012 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 32-bit applications developed with Visual C++ 2012 on a computer that does not have Visual C++ 2012 installed.
  62. Microsoft Visual C++ 2013 Redistributable (x64) [Microsoft.VCRedist.2013.x64]: The Microsoft Visual C++ 2013 Redistributable Package (x64) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2013 on a computer that does not have Visual C++ 2013 installed.
  63. Microsoft Visual C++ 2013 Redistributable (x64) [Microsoft.VCRedist.2013.x64]: The Microsoft Visual C++ 2013 Redistributable Package (x64) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2013 on a computer that does not have Visual C++ 2013 installed.
  64. Microsoft Visual C++ 2013 Redistributable (x86) [Microsoft.VCRedist.2013.x86]: The Microsoft Visual C++ 2013 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2013 on a computer that does not have Visual C++ 2013 installed.
  65. Microsoft Visual C++ 2013 Redistributable (x86) [Microsoft.VCRedist.2013.x86]: The Microsoft Visual C++ 2013 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2013 on a computer that does not have Visual C++ 2013 installed.
  66. Microsoft Visual C++ 2015-2022 Redistributable (x64) [Microsoft.VCRedist.2015+.x64]: The Microsoft Visual C++ 2015-2022 Redistributable Package (x64) installs runtime components of Visual C++ Libraries required to run 64-bit applications developed with Visual C++ 2015, 2017, 2019 and 2022 on a computer that does not have Visual C++ 2015, 2017, 2019 and 2022 installed.
  67. Microsoft Visual C++ 2015-2022 Redistributable (x86) [Microsoft.VCRedist.2015+.x86]: The Microsoft Visual C++ 2015-2022 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run 32-bit applications developed with Visual C++ 2015, 2017, 2019 and 2022 on a computer that does not have Visual C++ 2015, 2017, 2019 and 2022 installed.
  68. Microsoft Visual Studio Code [Microsoft.VisualStudioCode]: Microsoft Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Microsoft Visual Studio Code is free and available on your favorite platform – Linux, macOS, and Windows.
  69. Microsoft Web Deploy [Microsoft.WebDeploy]: Web Deploy (msdeploy) simplifies deployment of Web applications and Web sites to IIS servers. Administrators can use Web Deploy to synchronize IIS servers or to migrate to newer versions of IIS. Web Deploy Tool also enables administrators and delegated users to use IIS Manager to deploy ASP.NET and PHP applications to an IIS server.
  70. Microsoft Web Platform Installer [Microsoft.webpicmd]: A little tool for deploying your favorite open-source web applications and all the necessary platform components required to get you up and running quickly and seamlessly.
  71. Node.js LTS [OpenJS.NodeJS.LTS]: Node.js is a JavaScript runtime built on Chrome”s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js” package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
  72. Notepad++ [Notepad++.Notepad++]: Notepad++ is a free (as in ΓÇ£free speechΓÇ¥ and also as in ΓÇ£free beerΓÇ¥) source code editor and Notepad replacement that supports several languages. Running in the MS Windows environment, its use is governed by GNU General Public License.
  73. NVIDIA GeForce Experience [Nvidia.GeForceExperience]: GeForce Experience takes the hassle out of PC gaming by configuring your gameΓÇÖs graphics settings for you.
  74. NVIDIA PhysX System Software [Nvidia.PhysX]: PhysX System software provides updates necessary for some games to run PhysX content properly
  75. Oh My Posh [JanDeDobbeleer.OhMyPosh]: Prompt theme engine for any shell
  76. Postman [Postman.Postman]: Postman is a collaboration platform for API development. Postman’s features simplify each step of building an API and streamline collaboration so you can create better APIs ΓÇö faster.
  77. Power Automate for desktop [Microsoft.PowerAutomateDesktop]: Automate workflows across modern and legacy applications on your desktop by recording actions such as mouse and keyboard clicks
  78. PowerShell [Microsoft.PowerShell]: PowerShell is a cross-platform (Windows, Linux, and macOS) automation and configuration tool/framework that works well with your existing tools and is optimized for dealing with structured data (e.g. JSON, CSV, XML, etc.), REST APIs, and object models.
  79. R for Windows [RProject.R]: The base binary distribution of R statistics language.
  80. RescueTime [RescueTime.DesktopApp]: Desktop client for RescueTime time tracking service (rescuetime.com). Automatically track and get insights on how you spend your time on apps and websites. No manual time entry, finicky timers, or start/stop buttons required. Free version available; upgrade required for full feature set.
  81. Slack [SlackTechnologies.Slack]: Slack is a collaboration hub for work, no matter what work you do. It’s a place where conversations happen, decisions are made, and information is always at your fingertips. With Slack, your team is better connected.
  82. Smart Switch [Samsung.SmartSwitch]: User data can be transferred to Galaxy phones using Smart Switch from Windows, iOS, etc.
  83. Sourcetree [Atlassian.Sourcetree]: Sourcetree is a free Git desktop client for developers on Windows. Say goodbye to the command line and use the full capabilities of Git through Sourcetree’s beautifully simple interface (and stop being jealous of what your Mac friends are using).
  84. TeamViewer [TeamViewer.TeamViewer]: TeamViewer is a comprehensive, remote access, remote control and remote support solution that works with almost every desktop and mobile platform, including Windows, macOS, Android, and iOS.
  85. Ubuntu [Canonical.Ubuntu]: Ubuntu on Windows allows you to use Ubuntu Terminal and run Ubuntu command line utilities including bash, ssh, git, apt and many more. This is the latest LTS release.
  86. Visual Studio Enterprise 2022 [Microsoft.VisualStudio.2022.Enterprise]: An integrated, end-to-end solution for developers looking for high productivity and seamless coordination across teams of any size.
  87. VLC media player [VideoLAN.VLC]: VLC is a free and open source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols.
  88. Windows Package Manager Manifest Creator [Microsoft.WingetCreate]: Windows Package Manager Manifest Creator is an Open Source tool designed to help developers create, update, and submit manifest files to the Windows Package Manager repository.
  89. Windows PC Health Check [Microsoft.WindowsPCHealthCheck]: Windows 11 Compatibility Checker
  90. Windows PC Health Check [Microsoft.WindowsPCHealthCheck]: Windows 11 Compatibility Checker
  91. Windows Software Development Kit [Microsoft.WindowsSDK]: The Windows SDK (10.0.22621.1) for Windows 11 provides the latest headers, libraries, metadata, and tools for building Windows apps.
  92. Windows Software Development Kit [Microsoft.WindowsSDK]: The Windows SDK (10.0.22621.1) for Windows 11 provides the latest headers, libraries, metadata, and tools for building Windows apps.
  93. Windows Software Development Kit [Microsoft.WindowsSDK]: The Windows SDK (10.0.22621.1) for Windows 11 provides the latest headers, libraries, metadata, and tools for building Windows apps.
  94. Windows Software Development Kit [Microsoft.WindowsSDK]: The Windows SDK (10.0.22621.1) for Windows 11 provides the latest headers, libraries, metadata, and tools for building Windows apps.
  95. Windows Software Development Kit [Microsoft.WindowsSDK]: The Windows SDK (10.0.22621.1) for Windows 11 provides the latest headers, libraries, metadata, and tools for building Windows apps.
  96. Windows Software Development Kit [Microsoft.WindowsSDK]: The Windows SDK (10.0.22621.1) for Windows 11 provides the latest headers, libraries, metadata, and tools for building Windows apps.
  97. Windows Terminal [Microsoft.WindowsTerminal]: The new Windows Terminal, a tabbed command line experience for Windows.
  98. Zoom [Zoom.Zoom]: Zoom’s secure, reliable video platform powers all of your communication needs, including meetings, chat, phone, webinars, and online events.

Andrei Ignat weekly software news(mostly .NET)

* indicates required

Please select all the ways you would like to hear from me:

You can unsubscribe at any time by clicking the link in the footer of our emails. For information about our privacy practices, please visit our website.

We use Mailchimp as our marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp's privacy practices here.