Today we are celebrating 15 years of commercial-free podcasting on . NET-related issues.
Thank you for your ongoing interest and support. Stay tuned for a very special podcast on Visual Studio coming sometime next week.
Today we are celebrating 15 years of commercial-free podcasting on . NET-related issues.
Thank you for your ongoing interest and support. Stay tuned for a very special podcast on Visual Studio coming sometime next week.
Mads K of Microsoft talks about the targeting of Visual Studio and VSCode. Towards the end, I ask him about a few of his favorite plugins.

Jeff Fritz (Microsoft) joins me to talk about .NET Aspire, CoPilot Agents and Vibe programming. This is a show not to miss; his enthusiasm is catching and his knowledge is astonishing.
Forage is an AI email assistant that sorts your mail into categories, provides a summary once or twice a day (your choice) and summarizes newsletters into bullet points.
I talk with Richie Bonilla (CEO and co-founder)* about his startup, what lead him to create Forage and how it works.
* Co-founder? Co-Founder? Cofounder?
Prepare to have your mind blown. Copilot Agents are powerful AI tools for Visual Studio Code and Visual Studio. Used to CoPilot? — you ain’t seen nothing yet!
James Montemagno and Burke Holland of Microsoft discuss how to get it, and how to use it.


GitHub Copilot for Skeptics Who Still Think AI is Overrated | BRK124
OpenAPI is the framework of choice for documenting APIs

OpenAPI support in ASP.NET Core API apps
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/overview?view=aspnetcore-9.0
Generate OpenAPI documents at build-time
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/aspnetcore-openapi?view=aspnetcore-9.0&tabs=visual-studio%2Cvisual-studio-code#generate-openapi-documents-at-build-time
The project file property to set the directory where the OpenAPI should be saved is “OpenApiDocumentsDirectory” and it is documented here:
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/aspnetcore-openapi?view=aspnetcore-9.0&tabs=visual-studio%2Cvisual-studio-code#modifying-the-output-directory-of-the-generated-open-api-file
This section contains a summary of how C# types and attributes map to OpenAPI schemas.
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/openapi/include-metadata?view=aspnetcore-9.0&tabs=minimal-apis#include-openapi-metadata-for-data-types
We talked about the OpenAPI specification — the latest version is here:
https://spec.openapis.org/oas/v3.1.1.html
I also briefly touched on the Overlay specification — that is here:
https://spec.openapis.org/overlay/v1.0.0.html
and the Arazzo Specification — that is here:
https://spec.openapis.org/arazzo/v1.0.1.html
The Roadmap for ASP.NET Core features in .NET 10 is here:
https://github.com/dotnet/aspnetcore/issues/59443
There’s a new AI kid on the block (https://claude.ai) and he is very powerful for programming and many other things. At the risk of being obnoxious, here is what he said about me:
Jesse Liberty is a well-known software developer, author, and educator in the computer programming and software development world. He has written numerous books on programming languages and technologies, particularly focusing on C++, C#, and .NET development.
NET provides support for passing options via environment variables, appsettings.json, and XML files. as well as command line arguments. In short, each higher level overrides the settings in lower levels.
To add options:
It’s time to set up the startup configuration. When you are done, your Program.cs should look like this:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices((context, services) =>
{
services.AddApplicationInsightsTelemetryWorkerService()
.ConfigureFunctionsApplicationInsights()
.AddOptions<MyOptions>
.BindConfiguration("");
})
.Build();
host.Run();
The next step is to inject IOptions<MyOptions> and in the constructor set a member variable.
The Run method will look like this:
[Function("Function1")]
public IActionResult Run(HttpTrigger(AuthorizationLevel
.Anonymous, "get", "post")] HttpRequest req)
{
return new OKObjectResult(options.value.retValue);
}
My site says we just crossed 144,000 users. I’m stunned.
Episode 50: The Technical Journey of Jesse Liberty
Episode 51: The Technical Wisdom of Jesse Liberty
In the previous part of this series, we looked at creating our first API. But how do you determine which API is being invoked? This is accomplished with routing.
If you have a Products class your entry (end point) might look like this:
[Function(nameof(Products))]
public IActionResult Run(HttpTrigger(AuthorizationLevel.Anonymous,
"get", Route="products/{category}/{id: int}")]
HttpRequest req, string category, int id)
{
return new OkObjectResult(new {category, id});
}
Notice the routing property (“products/{category}/{id: int}” — this allows us to customize and restrict the arguments from the desired endpoint. The customer/user can now use the same endpoint for a variety of situations.