>> Did you know that the command line is so powerful that you can
actually create.NET Core projects within it?
Learn more on this episode of Visual Studio Toolbox.
[MUSIC].
>> Hey everyone. Welcome to Visual Studio Toolbox.
I'm your host, Leslie Richardson coming to you
from my very professional childhood bedroom studio.
Today, I am joined by Sayed Hashimi,
who is a Senior PM on the ASP.NET team. Welcome, Sayed.
>> Hello. How's it going?
Definitely happy to be here.
Been on Visual Studio Toolbox bunch of times in the past.
I always love coming out here to show the latest and greatest.
Thanks very much for having me.
>> Yeah, welcome back.
Today, we are going to be talking
about creating.NET Core projects on the command line, right?
>> Yeah, that's right.
What we're planning on doing is
basically creating a series of videos.
The range of topics will be we'll first
start out with how do you create projects using.NET New.
Then we'll move on to using
community created templates from both.NET New and Visual Studio.
Then we'll move on to then start showing how to actually
create templates and how to customize this for Visual Studio.
This is really just the first video in that video series.
Just like what you mentioned,
in this video we'll be focusing on using.NET New and
understanding the basics before
we get started on creating our own templates here. Yeah.
>> Exciting. Why the command line?
What's the perk or why
should I make a.NET Core project within the command line?
>> Yeah, sure. I think that's a great question.
If we were to rewind the clock like five,
six years back, before there was.NET Core.
there was.NET Framework.
In that world everybody was
creating and building and developing inside Visual Studio itself,
and I mean Visual Studio on Windows.
But now, with.NET Core,
we live in a different world.
If you're creating a project template
and if you want to have the broad reach,
you need to surface that in
a way that can meet users where they're at, right?
Today, users that will develop with Visual Studio 2019
or maybe with Visual Studio Code or Visual Studio for Mac,
there's also third party editors out there like JetBrains Rider.
You can also customize any editors like Sublime
and Notepad++ to also do development with.NET Core.
The way that we've architected this
is we have what's called the template engine.
You can think about that as being like
the foundation that everything would sit on.
We've got the template engine.
Then sitting directly on top of that would be.NET New command
line and also, Visual Studio and Visual Studio for Mac.
The idea is we can create templates using
the template engine and then we can surface
that in all the relevant locations.
If you create a template with template engine,
you can get that to appear in the.NET New command line.
It can also show up in Visual Studio 2019,
Visual Studio for Mac.
Also, I believe Rider's got that extensibility as well
where it will show these community created templates.
To answer the question is
really you just need to meet the users where they're at.
The people developing.NET Core applications,
they're not only in Visual Studio anymore,
they're in various different places.
Then also, I think one another benefit is creating a template with
the template engine is very easy in
comparison to the alternative technologies
that are available out there.
That's why I would say that.
You get the broadest reach.
Then it's also easier to create and maintain
your templates if you author them with the template engine.
>> Great. Yeah. I personally enjoy using the command line and
I always forget that you can actually create
a project in the command line to begin with.
Can you show us how it works?
>> That's right. Yeah. Let's let's go check out the Terminal here.
Let me get my Terminal app opened up here.
I got a helicopter flying in the background Sorry guys about that.
First, let's just explore .NET
New..NET New is delivered with the .NET SDK.
Let's just go ahead and execute.NET
New and see what we get out of this.
If you run .NET New,
it'll go ahead and show you the various different templates
that are available to be used.
Here we can see I've got a mix of different things.
Most of these are built in templates,
but we can also see I've got
some community and custom templates installed here as well.
At the bottom, there's also some examples here,
so let's take a look at that.
If I were to do .NET New,
and then we would give it the name for
the template that we want to create here.
That's what we see here in short name.
There's various different options here.
Let's go in and explore the MVC option here.
If I was to do.NET New MVC,
I could also get help that's
specific for this particular template here.
You can do a.NET New,
template name, -h to get the template's specific help.
You can see we've got a bunch of different
parameters here as well.
The help will basically spit
out the different parameters that you've got here.
Then we can go from there.
There's also some common parameters here.
Where are we at? Those are here.
Some of these that we'll be taking a look at is output.
Then the install we'll be looking at in the next video.
There's also a name value here.
We'll be using name and output here during this video.
Let's go and create a directory here.
I'll say demo one.
Let's go and go into that.
If I just wanted to create an MVC project,
I can just do .NET New MVC and then that'll
go ahead and create a project right in this particular folder here.
Yes. It creates the project and then it will
call NuGet to restore them.
Let's take a look at the contents here.
You can see I created an MVC project and it's named demo1.csproj.
It got this name from the name of the folder here.
If you don't specify a name,
then the folder name will be used by default.
That's the idea here.
Let's also take a look at this demo project real quick,
or actually, sorry about that,
let's take a look at the program.cs.
One thing that I want to point out to you.
Excuse me. The project name was demo1.
We can see that when I created this project,
the name space was customized for that project name.
Now it's created demo1 here.
>> Nice.
>> Yeah. We'll talk a lot more
about how these replacements work and
all that stuff in our additional videos here.
>> Yeah. That's exactly what I'd expect if I
were creating a template via Visual Studio.
>> Yeah, that's right. The mechanism that's
used here is the
same with dotnet new as well as with Visual Studio.
There's another way that I could do that as well.
Let me pick a different template here,
so let's say webapp,
that's the name of another template that we have.
Instead of just going into the directory itself,
you can specify the directory that it should be created at,
and then that will also be the name of the project.
I can say, dotnet new webapp MyCoolWeb.
Let's go ahead and create that.
Now, that will create it into a folder that's called MyCoolWeb.
Let's just take a look at the startup.cs for this one, I guess.
We'll see that the namespace for
this one has also been set to MyCoolWeb.
Now, we've got a project that builds and runs.
I can verify that by doing dotnet build.
Then we could also run
this project with dotnet run or we can go ahead and load this up
into Visual Studio or
whatever editor or IDE that users prefer here.
That was one way of doing it too.
We also mentioned that we would show the name option there.
Let me go into this new folder, demo2.
If I say dotnet new webapi,
and then if I give it a name,
I can say MyWebApi.
Now, that should create it in this folder,
but with the name MyWebApi,
or in the folder called MyWebApi,
and then the name would be MyWebApi.
If I was to inspect the program or
the startup or the weather forecast,
we would see that that namespace has been
declared appropriately as well.
Let's take another look through
the help real quick and see if there's
any additional options here that we haven't talked about.
One was dotnet new list.
Let's go ahead and take a look at that real quick.
dotnet new -l. For dotnet new- l,
this would just list out all the templates
that have been installed here.
Like I mentioned, I do have some custom templates
installed here so if you see something different,
then that means that I've just installed
something additional that you might not have on your box.
>> Yeah, I don't recall seeing sayed tool on mine.
>> Yeah, that's right. Let me explain this output here.
Here, we've got the name of the template.
This is just a user-friendly name.
Here's the short name.
That was the name that I was using before,
we saw MVC, webapp, and webapi.
Those are here, MVC webapp,
and webapi is right there.
Here, we can also see the language options.
Let's say if I was an F# or VB developer,
I can take a look at this language column to tell me,
what templates are available for that particular language as well.
Then the tags are just categories.
If I was interested in a console app, I could do console.
Let's do this, dotnet new -l -h.
What help is available for list here?
We can see that I can filter by language,
and we can also filter by type here.
dotnet new -l -lang F#.
This should display only the F# templates,
and then similarly for VB.
I think we can also do something similar for the tags,
I believe, or the type here, basically.
If I was to say, --type Console.
That one looks like it did enter.
Oh, sorry about that, my bad. This is different.
One thing that I forgot to mention here was on
the list of templates that were output here,
there's a variety of different things.
The vast majority of these are project templates,
but we do have a few item templates here like gitignore,
globaljson, so on and so forth.
That's where the type filter comes in.
If I was to list the project,
I can view dotnet new -l --type Project.
This will just show me all the project templates.
If I wanted to see only the item
templates to replace the type of item there,
you go back and see how can we filter on the tag.
That might not actually be possible here to actually filter on
the tags here but in Visual Studio,
these tags will appear and you can actually
filter in Visual Studio there.
>> That is pretty sweet. I had
no idea you could get all of the same functionality
that we would if we were to open
Visual Studio for the first time just in the command line.
>> Yeah, that's right.
Then the one thing that I forgot to mention here was
everything that I showed here was with built-in templates.
But you would get the same exact functionality
with custom templates as well.
If I were to do dotnet new sayedweb -h,
I would get the template
specific help for that custom template that I've created here.
You get the exact same experience,
whether it's a built-in template created by
Microsoft or if it's a template that you created yourself,
or if a third-party company created it,
you'd get the same exact experience here.
It's not like we're special casing the Microsoft templates here.
We got the same exact experience all across the board.
>> That's really cool. Makes you feel more
official with the templates that you create.
>> Yeah, definitely. That was some feedback
that we have received a lot
over the course of the last several years
was the template authors,
they want their templates to appear in a first-class way.
So when we create a dotnet new,
we made sure to fulfill that promise,
and we're also trying to do the same thing in Visual Studio,
and Visual Studio for Mac as well.
>> That is exciting stuff.
>> Yeah. I think that's really about it here.
We talked about how can we use .NET new
and how can we use the help system to explore,
how to learn more about the command, and also, some basics here.
I think that's really it for this video.
In the next videos that follow,
we'll start seeing how can we install
community templates and then use
those in dotnet new as well as Visual Studio.
>> That is some good stuff, I can't wait.
>> Great.
>> Just to close out,
you mentioned that you need the .NET
SDK for the command line functionality.
Where can users go to make sure they have that installed?
>> Usually, I just go to GitHub,
actually, to get that.
But I think the easiest way is to just do .NET Core download,
and that'll take them to the right place here.
So just dotnet.Microsoft.com to
get the latest download of.NET Core.
>> Can't wait.
>> Everything that I'm showing here applies to both .NET Core
3.1 as well as .NET Core 5.
>> Sweet. That is very exciting.
>> Thank you very much.
>> Thank you. Tune in next time
when we talk more about the awesomeness you
can do with .NET templates and projects.
Until then, happy coding.
[MUSIC]