Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vermeir_nico_introducing_net_6_getting_started_with_blazor_m.pdf
Скачиваний:
19
Добавлен:
26.06.2023
Размер:
11.64 Mб
Скачать

Chapter 3 Command Line Interface

There are other interesting but less used sections available. Table 3-5 shows a complete overview for completeness.

Table 3-5.  Overview of NuGet.config sections

Element

Description

 

 

<config>

General configuration

<bindingRedirects>

Sets whether or not NuGet handles automatic redirects

<packageRestore>

Controls if package restore is enabled and automatic on build

<solution>

Enables/disables source control integration of the solution file

<packageSource>

Adds extra NuGet package sources to restore packages from

<trustedSigners>

Sets trusted package authors, with their signature and repository feeds

<fallbackPackageFolders>

Points to folders that act as a local, offline cache for packages

<packageManagement>

Allows projects to use the older packages.config instead of

 

PackageReference

 

 

Dotnet Build

Dotnet build builds (what a shock!) your project and all of its dependencies. It’s a straightforward command with a limited set of options. Listing 3-7 shows its options.

Listing 3-7.  Options for dotnet build

Usage:

dotnet [options] build [<PROJECT | SOLUTION>...]

Arguments:

<PROJECT | SOLUTION> The project or solution file to operate on. If a file is not specified, the command will search the current directory for one.

Options:

--use-current-runtime Use current runtime as the target runtime.

46

 

Chapter 3 Command Line Interface

-f, --framework <FRAMEWORK>

The target framework to build for.

 

The target framework must also be

 

specified in the project file.

-c, --configuration <CONFIGURATION>

The configuration to use for

 

building the project. The default

 

for most projects is 'Debug.'

-r, --runtime <RUNTIME_IDENTIFIER>

The target runtime to build for.

--version-suffix <VERSION_SUFFIX>

Set the value of the

 

$(VersionSuffix) property to use

 

when building the project.

--no-restore

Do not restore the project before

 

building.

--interactive

Allows the command to stop and wait

 

for user input or action (e.g., to

 

complete authentication).

-v, --verbosity <LEVEL>

Set the MSBuild verbosity level.

 

Allowed values are q[uiet],

 

m[inimal], n[ormal], d[etailed], and

 

diag[nostic].

--debug

 

-o, --output <OUTPUT_DIR>

The output directory to place built

 

artifacts in.

--no-incremental

Do not use incremental building.

--no-dependencies

Do not build project-to-project

 

references and only build the

 

specified project.

--nologo

Do not display the startup banner or

 

the copyright message.

--sc, --self-contained

Publish the .NET runtime with your

 

application so the runtime doesn't

 

need to be installed on the target

 

machine.

 

The default is 'true' if a runtime

 

identifier is specified.

47

Chapter 3 Command Line Interface

 

--no-self-contained

Publish your application as a

 

framework-dependent application.

 

A compatible .NET runtime must be

 

installed on the target machine to

 

run your application.

-a, --arch <arch>

The target architecture.

--os <os>

The target operating system.

-?, -h, --help

Show command line help.

Dotnet build triggers the same workflow as Build Solution does in Visual Studio; whenever you click Build Solution in Visual Studio, it launches dotnet build under the hood. It takes your code and its dependencies and compiles it into DLLs, executables, symbols, and so on.

Before we can build an application, we need to make sure that all dependencies are restored. This can be done by running dotnet restore which we’ve seen earlier in this chapter. However, we don’t have to run dotnet restore every time before building a project; it runs implicitly when executing dotnet build. Unless we use dotnet build --no-restore.

Dotnet build uses msbuild to do the actual compiling of the code. MSBuild options can be passed in through parameters like -l for logging. MSBuild can be called directly from the dotnet tool by using dotnet msbuild <arguments>. We won’t dive into the msbuild options in this book. The dotnet build command is basically the same as msbuild -restore although the output looks different.

Two important parameters for the dotnet build command are configuration and runtime. Configuration specifies the configuration used for this build, while the runtime parameter specifies what version of the .NET runtime we’re building against.

The default configurations in .NET are Release and Debug. If we don’t specify a configuration, the Debug configuration will be used by default. Depending on the selected configuration, the build output will by default appear in bin\<config>\net6.0. These configurations differ in the way they optimize code for either debugging purposes or performance. Listing 3-8 shows how we can switch configurations.

Listing 3-8.  Running a build in the Release configuration

dotnet build -c release

48

Chapter 3 Command Line Interface

Runtimes are specified using a runtime identifier (RID). RIDs are used to define on the type of system architecture the application will run. An application needs to be compiled differently for a 64-bit Intel processor compared to a 64-bit ARM processor

and for the different operating systems and their versions. An RID follows the pattern as shown in Listing 3-9.

Listing 3-9.  RID pattern

<os>.<version>-<architecture>-<additional>

For example, let’s build an application for use on ARM64, which is an architecture that Windows can run on and try to run the application. Figure 3-6 shows the build and the attempt to run the application.

Figure 3-6.  Running an ARM application on x64

The .NET runtime contains a runtime.json file. In this file is a runtime graph; it specifies what operating systems and what versions/architectures are available or what the fallback is. Listing 3-10 shows an example entry from runtime.json.

49

Chapter 3 Command Line Interface

Listing 3-10.  Example entry in runtime.json

"alpine.3.13": { "#import": [

"alpine.3.12"

]

}

Listing 3-10 shows the entry for Alpine Linux, a lightweight Linux distribution. The entry specifies Alpine version 3.13 but imports 3.12; when .NET tries to restore NuGet packages for a project targeting Alpine Linux, it will try to find packages targeting Alpine 3.13. Should there be a package that does not target this version, it will look for a fallback to Alpine 3.12 support. The complete runtime.json file can be found on GitHub https:// github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.NETCore. Platforms/src/runtime.json.

Listing 3-11.  dotnet runtimes

Listing 3-11 lists the most common runtimes for .NET:

•\

Windows Portable

 

•\

win-x64

 

•\

win-x86

 

•\

win-arm

 

•\

win-arm64

•\

Windows 7/Windows Server 2008 R2

 

•\

win7-x64

 

•\

win7-x86

•\

Windows 8.1/Windows Server 2012 R2

 

•\

win81-x64

 

•\

win81-x86

 

•\

win81-arm

50

 

 

Chapter 3 Command Line Interface

•\

Windows 10/Windows Server 2016

 

•\

win10-x64

 

•\

win10-x86

 

•\

win10-arm

 

•\

win10-arm64

•\

Linux Portable

 

•\

linux-x64

 

•\ linux-musl-x64

 

•\

linux-arm

 

•\

linux-arm64

•\

Red Hat Enterprise Linux

 

•\

rhel-x64

 

•\

rhel.6-x64

•\

MacOS Portable

 

•\

osx-x64 (Minimum OS version is macOS 10.12 Sierra.)

•\

macOS 10.x

 

•\

osx.10.10-x64

 

•\

osx.10.11-x64

 

•\

osx.10.12-x64

 

•\

osx.10.13-x64

 

•\

osx.10.14-x64

 

•\

osx.10.15-x64

•\

macOS 11.x

 

•\

osx.11.0-x64

 

•\

osx.11.0-arm64

Chapter 2 of this book dives deeper into runtimes, platforms, and extensibility packs.

51