Welcome back. How was your week?
Let's hop back in.
The Base Solution
Assuming you're using version control, we'll start by making a new branch. It's probably unnecessary at this point, but it's a good habit to be in.
From your project directory:
git checkout -b foundation
This command will create a new branch called
foundation and switch you to that branch. Now we should be able to work in some degree of freedom without breaking anything in our main branch.
The first thing we should do is create a solution file. This is mostly a construct of big Visual Studio, but having a solution file does make future automations slightly easier.
dotnet new sln -n ResumeGenerator
Whew, that's a file created. Here comes the real dangerous part of the project.
How do we want to interact with the tooling?
We could write a simple console application that outputs a PDF, but it might be better to have a few of some sort so you can see how things look before it spits it out. Just in case.
That being said, we'll start with an empty web project and connect it to our solution.
dotnet new web -n Web
This should create a new folder called
Web with some files inside of it. To link it to the solution, we'll use the
dotnet sln command.
dotnet sln add Web/Web.csproj
To make sure that worked, run the
dotnet build command and you should see an output that looks like this.
$ dotnet build Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. Web -> C:\[YOUR_DIRECTORY]\ResumeGenerator\Web\bin\Debug\netcoreapp3.1\Web.dll Build succeeded. 0 Warning(s) 0 Error(s) Time Elapsed 00:00:03.07
This shows us that the solution file knows to go and build the project. If and when we add future pieces to the project, we can now run
dotnet build from the directory with the solution file and everything should go.
The Base Project
Since we've added a web project to the solution, we should be able to see a pretty empty web page as a reward for out troubles.
$ dotnet run -p Web/Web.csproj info: Microsoft.Hosting.Lifetime Now listening on: https://localhost:5001 info: Microsoft.Hosting.Lifetime Now listening on: http://localhost:5000 info: Microsoft.Hosting.Lifetime Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime Hosting environment: Development info: Microsoft.Hosting.Lifetime Content root path: C:\[YOUR_DIRECTORY}\ResumeGenerator\Web
Opening a browser and going to
http://localhost:5000 shows us our reward for the hard work.
Kind of boring, but it's better than nothing.
An Interrogation of the Hierarchy
Let's take a look at our project directory and see what we have in this project.
- ResumeGenerator - LICENSE - README.md - ResumeGenerator.sln - Web - appsettings.development.json - appsettings.json - bin - obj - Program.cs - Startup.cs - Web.csproj
A lot of these files are just the cost of doing business, but let's look at the important ones.
README.mdare part of your version control if you went through GitHub when you created a new repository. I'll update the
READMEas I go along, but mostly so we can keep it and this post somewhat in sync.
appsettings.*.jsonis where we can store environment variables and keys the project may rely on. This file is very handy in development, but can sometimes be a security risk if you go to deploy, so we won't use it a ton.
Startup.csare the currently the only actual programming we have for our beautiful Hello World page.
For the most part, we can ignore everything else.
I'm going to wrap up here because this post has already gone a little long. Again, assuming you're using version control, we'll do a commit, push, and then a merge through a pull request.
git add . && git commit -a -m "Added Foundation" && git push
This will make sure all of the files are added, commited, and pushed up to the repo. The pull request will be different based on your provider, but here's how to do it in GitHub.
Next time, we'll add some structural components to the Web application to allow us to start adding bigger pieces of information and control the content of the web page it produces.