Udostępnij przez


Kompilowanie projektu za pomocą polecenia "dotnet build"

Ten artykuł dotyczy: ✔️ zestaw .NET 6 SDK i nowsze wersje

Nazwisko

dotnet build — Tworzy projekt, rozwiązanie lub aplikację opartą na plikach oraz wszystkie jej zależności.

Streszczenie

dotnet build [<PROJECT>|<SOLUTION>|<FILE>] [-a|--arch <ARCHITECTURE>]
    [--artifacts-path <ARTIFACTS_DIR>]  [-bl|--binaryLogger:<FILE>]
    [-c|--configuration <CONFIGURATION>] [--disable-build-servers]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--no-dependencies] [--no-incremental] [--no-restore] [--nologo]
    [--no-self-contained] [-o|--output <OUTPUT_DIRECTORY>] [--os <OS>]
    [-p|--property:<PROPERTYNAME>=<VALUE>] [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--sc|--self-contained] [--source <SOURCE>]
    [--tl:[auto|on|off]] [ --ucr|--use-current-runtime]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet build -h|--help

opis

Polecenie dotnet build kompiluje projekt, rozwiązanie lub aplikację opartą na plikach i jej zależności w zestawie plików binarnych. Pliki binarne zawierają kod projektu w plikach języka pośredniego (IL) z rozszerzeniem .dll . W zależności od typu i ustawień projektu mogą być uwzględniane inne pliki, takie jak:

  • Plik wykonywalny, który może służyć do uruchamiania aplikacji.
  • Pliki symboli używane do debugowania z rozszerzeniem .pdb .
  • Plik .deps.json zawierający listę zależności aplikacji lub biblioteki.
  • Plik .runtimeconfig.json, który określa środowisko uruchomieniowe udostępnione i jego wersję dla aplikacji.
  • Inne biblioteki, od których zależy projekt (za pośrednictwem odwołań do projektu lub odwołań do pakietów NuGet).

W przypadku projektów wykonywalnych przeznaczonych dla platformy .NET Core 3.0 i nowszych zależności bibliotek są kopiowane do folderu wyjściowego. Oznacza to, że jeśli nie ma żadnej innej logiki specyficznej dla publikowania (takiej jak projekty internetowe), dane wyjściowe kompilacji powinny być wdrażalne.

Niejawne przywracanie

Kompilowanie wymaga pliku project.assets.json , który zawiera listę zależności aplikacji. Plik jest tworzony podczas dotnet restore wykonywania. Bez pliku zasobów nie można rozpoznać zestawów odwołań, co powoduje błędy.

Nie trzeba uruchamiaćdotnet restore, ponieważ jest ona uruchamiana niejawnie przez wszystkie polecenia, które wymagają przywrócenia, takie jak dotnet new, , dotnet build, dotnet rundotnet test, , dotnet publish, i dotnet pack. Aby wyłączyć niejawne przywracanie, użyj --no-restore opcji .

Polecenie dotnet restore jest nadal przydatne w niektórych scenariuszach, w których jawne przywracanie ma sens, takie jak kompilacje ciągłej integracji w usługach Azure DevOps Services lub w systemach kompilacji, które muszą jawnie kontrolować, kiedy nastąpi przywracanie.

Aby uzyskać informacje na temat zarządzania kanałami informacyjnymi NuGet, zobacz dokumentacjędotnet restore.

To polecenie obsługuje dotnet restore opcje przekazywane w długim formularzu (na przykład --source). Opcje formularza krótkiego, takie jak -s, nie są obsługiwane.

Dane wyjściowe pliku wykonywalnego lub biblioteki

Określa, czy projekt jest wykonywalny, czy nie jest określany przez <OutputType> właściwość w pliku projektu. W poniższym przykładzie pokazano projekt, który tworzy kod wykonywalny:

<PropertyGroup>
  <OutputType>Exe</OutputType>
</PropertyGroup>

Aby utworzyć bibliotekę, pomiń <OutputType> właściwość lub zmień jej wartość na Library. Biblioteka DLL IL dla biblioteki nie zawiera punktów wejścia i nie można jej wykonać.

MSBuild

dotnet build program używa programu MSBuild do kompilowania projektu, rozwiązania lub aplikacji opartej na plikach. Obsługuje zarówno kompilacje równoległe, jak i przyrostowe. Aby uzyskać więcej informacji, zobacz Incremental Builds (Kompilacje przyrostowe).

Oprócz opcji dotnet build polecenie akceptuje opcje MSBuild, takie jak -p ustawianie właściwości lub -l definiowanie rejestratora. Aby uzyskać więcej informacji na temat tych opcji, zobacz dokumentację wiersza polecenia programu MSBuild. Możesz też użyć polecenia dotnet msbuild .

Uwaga

Gdy dotnet build funkcja jest uruchamiana automatycznie przez dotnet run, argumenty takie jak -property:property=value nie są przestrzegane.

Uruchamianie jest równoważne uruchamianiu dotnet builddotnet msbuild -restore; jednak domyślna szczegółowość danych wyjściowych jest inna.

Pobieranie manifestu obciążenia

Po uruchomieniu tego polecenia inicjuje asynchroniczne pobieranie manifestów reklamowych dla obciążeń. Jeśli pobieranie jest nadal uruchomione po zakończeniu tego polecenia, pobieranie zostanie zatrzymane. Aby uzyskać więcej informacji, zobacz Manifesty reklamowe.

Argumenty

PROJECT | SOLUTION | FILE

Plik projektu lub rozwiązania lub C# (aplikacji opartej na plikach) do działania. Jeśli plik nie zostanie określony, program MSBuild przeszukuje bieżący katalog dla projektu lub rozwiązania.

  • PROJECT to ścieżka i nazwa pliku projektu C#, F# lub Visual Basic albo ścieżka do katalogu zawierającego plik projektu C#, F# lub Visual Basic.

  • SOLUTION to ścieżka i nazwa pliku rozwiązania (.sln lub rozszerzenie .slnx) lub ścieżka do katalogu zawierającego plik rozwiązania.

  • FILE jest argumentem dodanym na platformie .NET 10. Ścieżka i nazwa pliku aplikacji opartej na plikach. Aplikacje oparte na plikach znajdują się w jednym pliku, który jest kompilowany i uruchamiany bez odpowiedniego pliku projektu (csproj). Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji języka C# opartych na plikach.

Opcje

  • -a|--arch <ARCHITECTURE>

    Określa architekturę docelową. Jest to skrócona składnia ustawiania identyfikatora środowiska uruchomieniowego (RID), gdzie podana wartość jest połączona z domyślnym identyfikatorem RID. Na przykład na maszynie win-x64 określenie --arch x86 ustawia identyfikator RID na win-x86wartość . Jeśli używasz tej opcji, nie używaj -r|--runtime opcji . Dostępne od wersji zapoznawczej 7 platformy .NET 6.

  • --artifacts-path <ARTIFACTS_DIR>

    Wszystkie pliki wyjściowe kompilacji z wykonanego polecenia zostaną umieszczone w podfolderach w określonej ścieżce oddzielonej przez projekt. Aby uzyskać więcej informacji, zobacz Artifacts Output Layout (Układ danych wyjściowych artefaktów). Dostępne od zestawu .NET 8 SDK.

  • -bl|--binaryLogger:<FILE>

    Włącza rejestrator binarny i opcjonalnie określa nazwę pliku wyjściowego.
    Jeśli nie podano nazwy pliku, wartość domyślna znajduje się msbuild.binlog w bieżącym katalogu.

    Dziennik binarny zawiera szczegółowe informacje o kompilacji i można go otworzyć za pomocą przeglądarki dzienników strukturalnych MSBuild.

    dotnet build -bl
    dotnet build -bl:build-log.binlog
    
  • -c|--configuration <CONFIGURATION>

    Definiuje konfigurację kompilacji. Wartość domyślna dla większości projektów to Debug, ale można zastąpić ustawienia konfiguracji kompilacji w projekcie.

  • --disable-build-servers

    Wymusza zignorowanie jakichkolwiek trwałych serwerów kompilacji. Ta opcja zapewnia spójny sposób wyłączania całego użycia buforowania kompilacji, co wymusza kompilację od podstaw. Kompilacja, która nie opiera się na pamięciach podręcznych, jest przydatna, gdy pamięci podręczne mogą być uszkodzone lub niepoprawne z jakiegoś powodu. Dostępne od zestawu .NET 7 SDK.

  • -f|--framework <FRAMEWORK>

    Kompiluje dla określonej platformy. Struktura musi być zdefiniowana w pliku projektu. Przykłady: net7.0, net462.

  • --force

    Wymusza rozwiązanie wszystkich zależności, nawet jeśli ostatnie przywracanie zakończyło się pomyślnie. Określenie tej flagi jest takie samo jak usunięcie pliku project.assets.json .

  • --interactive

    Umożliwia zatrzymanie polecenia i oczekiwanie na wprowadzenie lub działanie użytkownika. Na przykład w celu ukończenia uwierzytelniania.

  • --no-dependencies

    Ignoruje odwołania do projektu (P2P) i kompiluje tylko określony projekt główny.

  • --no-incremental

    Oznacza kompilację jako niebezpieczną dla kompilacji przyrostowej. Ta flaga wyłącza kompilację przyrostową i wymusza czystą ponowną kompilację grafu zależności projektu.

  • --no-restore

    Nie wykonuje niejawnego przywracania podczas kompilacji.

  • --nologo

    Nie wyświetla baneru startowego ani wiadomości o prawach autorskich.

  • --no-self-contained

    Opublikuj aplikację jako aplikację zależną od platformy. Aby uruchomić aplikację, na maszynie docelowej musi być zainstalowane zgodne środowisko uruchomieniowe platformy .NET.

  • -o|--output <OUTPUT_DIRECTORY>

    Katalog, w którym mają być umieszczane skompilowane pliki binarne. Jeśli nie zostanie określona, domyślna ścieżka to ./bin/<configuration>/<framework>/. W przypadku projektów z wieloma platformami docelowymi (za pośrednictwem TargetFrameworks właściwości) należy również zdefiniować --framework podczas określania tej opcji.

    • Zestaw .NET 7.0.200 SDK lub nowszy

      Jeśli określisz opcję podczas uruchamiania --output tego polecenia w rozwiązaniu, interfejs wiersza polecenia będzie emitować ostrzeżenie (błąd w wersji 7.0.200) z powodu niejasnej semantyki ścieżki wyjściowej. Opcja --output jest niedozwolona, ponieważ wszystkie dane wyjściowe wszystkich projektów skompilowanych zostaną skopiowane do określonego katalogu, który nie jest zgodny z projektami wielokierunkowymi, a także projektami, które mają różne wersje zależności bezpośrednich i przechodnich. Aby uzyskać więcej informacji, zobacz Opcja na poziomie --output rozwiązania nie jest już prawidłowa dla poleceń związanych z kompilacją.

  • --os <OS>

    Określa docelowy system operacyjny. Jest to skrócona składnia ustawiania identyfikatora środowiska uruchomieniowego (RID), gdzie podana wartość jest połączona z domyślnym identyfikatorem RID. Na przykład na maszynie win-x64 określenie --os linux ustawia identyfikator RID na linux-x64wartość . Jeśli używasz tej opcji, nie używaj -r|--runtime opcji . Dostępne od platformy .NET 6.

  • -p|--property:<PROPERTYNAME>=<VALUE>

    Ustawia co najmniej jedną właściwości programu MSBuild. Określ wiele właściwości rozdzielonych średnikami lub powtarzając opcję:

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    
  • -r|--runtime <RUNTIME_IDENTIFIER>

    Określa docelowe środowisko uruchomieniowe. Aby uzyskać listę identyfikatorów środowiska uruchomieniowego (RID), zobacz wykaz identyfikatorów RID. Jeśli używasz tej opcji z zestawem .NET 6 SDK, użyj --self-contained lub --no-self-contained również. Jeśli nie zostanie określony, wartością domyślną jest kompilacja dla bieżącego systemu operacyjnego i architektury.

  • --sc|--self-contained

    Opublikuj środowisko uruchomieniowe platformy .NET w aplikacji, aby środowisko uruchomieniowe nie musi być zainstalowane na maszynie docelowej.

  • --source <SOURCE>

    Identyfikator URI źródła pakietu NuGet do użycia podczas operacji przywracania.

  • --tl:[auto|on|off]

    Określa, czy rejestrator terminalu ma być używany dla danych wyjściowych kompilacji. Wartość domyślna to auto, która najpierw weryfikuje środowisko przed włączeniem rejestrowania terminalu. Sprawdzanie środowiska sprawdza, czy terminal może korzystać z nowoczesnych funkcji wyjściowych i nie używa przekierowanych standardowych danych wyjściowych przed włączeniem nowego rejestratora. on Pomija sprawdzanie środowiska i włącza rejestrowanie terminalu. off Pomija sprawdzanie środowiska i używa domyślnego rejestratora konsoli.

    Rejestrator terminalu pokazuje fazę przywracania, po której następuje faza kompilacji. W każdej fazie obecnie projekty budowlane są wyświetlane w dolnej części terminalu. Każdy projekt, który tworzy, generuje dane wyjściowe zarówno docelowy programu MSBuild, który jest obecnie kompilowany, jak i ilość czasu spędzonego na tym obiekcie docelowym. Możesz wyszukać te informacje, aby dowiedzieć się więcej o kompilacji. Po zakończeniu kompilowania projektu zostanie napisana pojedyncza sekcja "ukończona kompilacja", która przechwytuje:

    • Nazwa utworzonego projektu.
    • Struktura docelowa (jeśli jest przeznaczona dla wielu celów).
    • Stan tej kompilacji.
    • Podstawowe dane wyjściowe tej kompilacji (która jest hiperlinkowana).
    • Każda diagnostyka wygenerowana dla tego projektu.

    Ta opcja jest dostępna począwszy od platformy .NET 8.

  • --ucr|--use-current-runtime

    Użyj bieżącego środowiska uruchomieniowego jako docelowego środowiska uruchomieniowego.

  • -v|--verbosity <LEVEL>

    Ustawia poziom szczegółowości polecenia. Dozwolone wartości to q[uiet], , m[inimal]n[ormal], d[etailed], i diag[nostic]. Aby uzyskać więcej informacji, zobacz LoggerVerbosity.

  • --version-suffix <VERSION_SUFFIX>

    Ustawia wartość $(VersionSuffix) właściwości, która ma być używana podczas kompilowania projektu. To działa tylko wtedy, gdy $(Version) właściwość nie jest ustawiona. $(Version) Następnie jest ustawiona wartość w połączeniu $(VersionPrefix)$(VersionSuffix)z kreską rozdzieloną kreską.

  • -?|-h|--help

    Wyświetla opis sposobu używania polecenia .

Przykłady

  • Skompiluj projekt i jego zależności:

    dotnet build
    
  • Tworzenie aplikacji opartej na plikach:

    dotnet build MyProject.cs
    

    Dodano obsługę aplikacji opartych na plikach w zestawie .NET SDK 10.0.100.

  • Skompiluj projekt i jego zależności przy użyciu konfiguracji wydania:

    dotnet build --configuration Release
    
  • Skompiluj projekt i jego zależności dla określonego środowiska uruchomieniowego (w tym przykładzie Linux):

    dotnet build --runtime linux-x64
    
  • Skompiluj projekt i użyj określonego źródła pakietu NuGet podczas operacji przywracania:

    dotnet build --source c:\packages\mypackages
    
  • Skompiluj projekt i ustaw wersję 1.2.3.4 jako parametr kompilacji -pprzy użyciu opcji MSBuild:

    dotnet build -p:Version=1.2.3.4