Návod: Vytvoření souboru projektu MSBuild od začátku

Programovací jazyky, které cílí na rozhraní .NET Framework, používají soubory projektu MSBuild k popisu a řízení procesu sestavení aplikace. Když k vytvoření souboru projektu MSBuild použijete Visual Studio, automaticky se do souboru přidá odpovídající XML. Možná ale potřebujete pochopit, jak je XML uspořádaný a jak ho můžete změnit, abyste mohli řídit sestavení.

Poznámka:

Tento článek je vhodný, pokud chcete zjistit základní základy toho, jak MSBuild funguje nezávisle na jakékoli sadě SDK. Sestavení pomocí sady SDK, například při použití dotnet build nebo přidání atributu Sdk do kořenového elementu projektu, se v tomto článku nezabývá. Viz sady .NET Project SDK.

Informace o vytvoření souboru projektu pro projekt C++ naleznete v tématu MSBuild (C++).

Tento názorný postup ukazuje, jak vytvořit základní soubor projektu přírůstkově pomocí pouze textového editoru. Návod se řídí těmito kroky:

  1. Rozšiřte proměnnou prostředí PATH.

  2. Vytvořte minimální zdrojový soubor aplikace.

  3. Vytvořte minimální soubor projektu MSBuild.

  4. Sestavte aplikaci pomocí souboru projektu.

  5. Přidejte vlastnosti pro řízení sestavení.

  6. Sestavení můžete řídit změnou hodnot vlastností.

  7. Přidejte do sestavení cíle.

  8. Řídit sestavení zadáním cílů.

  9. Sestavte přírůstkově.

Tento návod ukazuje, jak sestavit projekt na příkazovém řádku a prozkoumat výsledky. Další informace o nástroji MSBuild a o tom, jak spustit nástroj MSBuild na příkazovém řádku, naleznete v tématu Návod: Použití nástroje MSBuild.

K dokončení návodu musíte mít nainstalovanou sadu Visual Studio, protože obsahuje msBuild a kompilátor jazyka C#, které jsou vyžadovány pro názorný postup.

Rozšíření cesty

Před použitím nástroje MSBuild je nutné rozšířit proměnnou prostředí PATH tak, aby zahrnovala všechny požadované nástroje. Můžete použít příkazový řádek pro vývojáře pro Visual Studio. Vyhledejte ho ve Windows 10 ve vyhledávacím poli na hlavním panelu Windows. Pokud chcete nastavit prostředí v běžném příkazovém řádku nebo ve skriptovacím prostředí, spusťte VSDevCmd.bat v podsložce Common7/Tools instalace sady Visual Studio.

Vytvoření minimální aplikace

Tato část ukazuje, jak vytvořit minimální zdrojový soubor aplikace V# pomocí textového editoru.

  1. Na příkazovém řádku přejděte do složky, do které chcete aplikaci vytvořit, například \Dokumenty\ nebo \Desktop\.

  2. Vytvořte podsložku s názvem \HelloWorld\ a změňte adresář tak, aby se do ní dostal.

  3. V textovém editoru vytvořte nový soubor HelloWorld.cs a zkopírujte a vložte následující kód:

    using System;
    
    class HelloWorld
    {
        static void Main()
        {
    #if DebugConfig
            Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION");
    #endif
    
            Console.WriteLine("Hello, world!");
        }
    }
    
  4. Sestavte aplikaci zadáním příkazu csc helloworld.cs na příkazovém řádku.

  5. Otestujte aplikaci zadáním helloworld na příkazovém řádku.

    Měla by se zobrazit zpráva Hello, world!.

  6. Odstraňte spustitelný soubor.

Vytvoření minimálního souboru projektu MSBuild

Teď, když máte minimální zdrojový soubor aplikace, můžete vytvořit minimální soubor projektu pro sestavení aplikace. Tento soubor projektu obsahuje následující prvky:

  • Požadovaný kořenový Project uzel.

  • Uzel ItemGroup , který bude obsahovat prvky položky.

  • Prvek položky, který odkazuje na zdrojový soubor aplikace.

  • Uzel Target , který bude obsahovat úlohy potřebné k sestavení aplikace.

  • Element Task pro spuštění kompilátoru jazyka C# pro sestavení aplikace.

Vytvoření minimálního souboru projektu MSBuild

  1. V textovém editoru vytvořte nový soubor HelloWorld.csproj a zadejte následující kód:

    <Project>
      <ItemGroup>
        <Compile Include="helloworld.cs" />
      </ItemGroup>
    </Project>
    

    Obsahuje ItemGroup prvek Compile položky a určuje jeden zdrojový soubor jako položku.

  2. Target Přidejte uzel jako podřízený prvek Project uzlu. Pojmenujte uzel Build.

    <Target Name="Build">
    </Target>
    
  3. Vložte tento prvek úkolu jako podřízený prvek Target uzlu:

    <Csc Sources="@(Compile)"/>
    
  4. Uložte tento soubor projektu a pojmenujte ho Helloworld.csproj.

Minimální soubor projektu by měl vypadat přibližně takto:

<Project>
  <ItemGroup>
    <Compile Include="helloworld.cs"/>
  </ItemGroup>
  <Target Name="Build">
    <Csc Sources="@(Compile)"/>
  </Target>
</Project>

Úlohy v cíli sestavení se spouštějí postupně. V tomto případě je jedinou úlohou kompilátoru Csc jazyka C#. Očekává, že se zkompiluje seznam zdrojových souborů, a to je dáno hodnotou Compile položky. Položka Compile odkazuje pouze na jeden zdrojový soubor Helloworld.cs.

Poznámka:

V elementu item můžete pomocí zástupné znaky hvězdičky (*) odkazovat na všechny soubory, které mají příponu názvu souboru .cs , následujícím způsobem:

<Compile Include="*.cs" />

Sestavení aplikace

Teď k sestavení aplikace použijte soubor projektu, který jste právě vytvořili.

  1. Do příkazového řádku zadejte msbuild helloworld.csproj -t:Build.

    Tím se sestaví cíl sestavení souboru projektu Helloworld vyvoláním kompilátoru jazyka C# k vytvoření aplikace Helloworld.

  2. Otestujte aplikaci zadáním funkce helloworld.

    Měla by se zobrazit zpráva Hello, world!.

Poznámka:

Další podrobnosti o sestavení můžete zobrazit zvýšením úrovně podrobností. Pokud chcete nastavit úroveň podrobností na "podrobné", zadejte tento příkaz na příkazovém řádku:

msbuild helloworld.csproj -t:Build -verbosity:detailed

Přidání vlastností sestavení

Do souboru projektu můžete přidat vlastnosti sestavení, abyste mohli sestavení dále řídit. Teď přidejte tyto vlastnosti:

  • Vlastnost AssemblyName , která určuje název aplikace.

  • Vlastnost OutputPath pro zadání složky, která bude obsahovat aplikaci.

Přidání vlastností sestavení

  1. Odstraňte existující spustitelný soubor aplikace (později přidáte Clean cíl pro zpracování odstranění starých výstupních souborů).

  2. Do souboru projektu vložte tento PropertyGroup prvek těsně za levý Project element:

    <PropertyGroup>
      <AssemblyName>MSBuildSample</AssemblyName>
      <OutputPath>Bin\</OutputPath>
    </PropertyGroup>
    
  3. Přidejte tento úkol do cíle sestavení těsně před Csc úkol:

    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
    

    Úloha MakeDir vytvoří složku pojmenovanou vlastností za předpokladu OutputPath , že v současné době neexistuje žádná složka s tímto názvem.

  4. Přidejte tento OutputAssembly atribut do Csc úkolu:

    <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
    

    To dává kompilátoru jazyka C# pokyn, aby vytvořil sestavení, které je pojmenováno AssemblyName vlastností, a dát ho do složky, která je pojmenována OutputPath vlastností.

  5. Uloží vaše změny.

Soubor projektu by teď měl vypadat přibližně takto:

<Project>
  <PropertyGroup>
    <AssemblyName>MSBuildSample</AssemblyName>
    <OutputPath>Bin\</OutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="helloworld.cs" />
  </ItemGroup>
  <Target Name="Build">
    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
    <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
  </Target>
</Project>

Poznámka:

Doporučujeme přidat oddělovač cesty zpětného lomítka (\) na konec názvu složky, když ho zadáte v elementu OutputPath , místo abyste ho přidali do OutputAssembly atributu Csc úkolu. Z toho plyne:

<OutputPath>Bin\</OutputPath>

OutputAssembly="$(OutputPath)$(AssemblyName).exe" />

je lepší než

<OutputPath>Bin</OutputPath>

OutputAssembly="$(OutputPath)\$(AssemblyName).exe" />

Testování vlastností sestavení

Teď můžete aplikaci sestavit pomocí souboru projektu, ve kterém jste použili vlastnosti sestavení k určení výstupní složky a názvu aplikace.

  1. Do příkazového řádku zadejte msbuild helloworld.csproj -t:Build.

    Tím se vytvoří složka \Bin\ a potom vyvolá kompilátor C#, který vytvoří aplikaci MSBuildSample a umístí ji do složky \Bin\ .

  2. Chcete-li ověřit, zda byla vytvořena složka \Bin\ a zda obsahuje aplikaci MSBuildSample , zadejte dir Bin.

  3. Otestujte aplikaci zadáním příkazu Bin\MSBuildSample pro spuštění spustitelného souboru.

    Měla by se zobrazit zpráva Hello, world!.

Přidání cílů sestavení

Dále do souboru projektu přidejte dva další cíle, a to následujícím způsobem:

  • Čistý cíl, který odstraní staré soubory.

  • Cíl opětovného DependsOnTargets sestavení, který používá atribut k vynucení spuštění úlohy Vyčistit před úlohou sestavení.

Teď, když máte více cílů, můžete nastavit cíl sestavení jako výchozí cíl.

Přidání cílů sestavení

  1. Do souboru projektu přidejte tyto dva cíle hned za cíl sestavení:

    <Target Name="Clean" >
      <Delete Files="$(OutputPath)$(AssemblyName).exe" />
    </Target>
    <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
    

    Cíl vyčistit vyvolá úlohu Odstranit pro odstranění aplikace. Cíl opětovného sestavení se nespustí, dokud se nespustí cíl vyčistit i cíl sestavení. Přestože cíl opětovného sestavení nemá žádné úlohy, způsobí spuštění cíle Vyčistit před cílem sestavení.

  2. Přidejte tento DefaultTargets atribut do počátečního Project elementu:

    <Project DefaultTargets="Build">
    

    Tím se cíl sestavení nastaví jako výchozí cíl.

Soubor projektu by teď měl vypadat přibližně takto:

<Project DefaultTargets="Build">
  <PropertyGroup>
    <AssemblyName>MSBuildSample</AssemblyName>
    <OutputPath>Bin\</OutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="helloworld.cs" />
  </ItemGroup>
  <Target Name="Build">
    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
    <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
  </Target>
  <Target Name="Clean" >
    <Delete Files="$(OutputPath)$(AssemblyName).exe" />
  </Target>
  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
</Project>

Testování cílů sestavení

Nové cíle sestavení můžete využít k otestování těchto funkcí souboru projektu:

  • Sestavení výchozího sestavení

  • Nastavení názvu aplikace na příkazovém řádku

  • Odstranění aplikace před sestavením jiné aplikace

  • Odstranění aplikace bez sestavení jiné aplikace

Otestování cílů sestavení

  1. Do příkazového řádku zadejte msbuild helloworld.csproj -p:AssemblyName=Greetings.

    Vzhledem k tomu, že jste k explicitní nastavení cíle nepoužili přepínač -t , spustí nástroj MSBuild výchozí cíl sestavení. Přepínač -p přepíše AssemblyName vlastnost a dává jí novou hodnotu, Greetings. To způsobí, že se ve složce \Bin\ vytvoří nová aplikace Greetings.exe.

  2. Chcete-li ověřit, zda složka \Bin\ obsahuje aplikaci MSBuildSample i novou aplikaci Greetings , zadejte dir Bin.

  3. Otestujte aplikaci Greetings (například zadáním příkazu Bin\Greetings ve Windows).

    Měla by se zobrazit zpráva Hello, world!.

  4. Odstraňte aplikaci MSBuildSample zadáním příkazu msbuild helloworld.csproj -t:clean.

    Tím se spustí úloha Vyčistit, která odebere aplikaci, která má výchozí AssemblyName hodnotu vlastnosti . MSBuildSample

  5. Odstraňte aplikaci Greetings zadáním příkazu msbuild helloworld.csproj -t:clean -p:AssemblyName=Greetings.

    Tím se spustí úloha Vyčistit, která odebere aplikaci, která má danou hodnotu vlastnosti AssemblyName , Greetings.

  6. Pokud chcete ověřit, že složka \Bin\ je teď prázdná, zadejte dir Bin.

  7. Typ msbuild.

    I když soubor projektu není zadaný, nástroj MSBuild sestaví soubor helloworld.csproj , protože v aktuální složce je pouze jeden soubor projektu. To způsobí, že se aplikace MSBuildSample vytvoří ve složce \Bin\ .

    Chcete-li ověřit, zda složka \Bin\ obsahuje aplikaci MSBuildSample , zadejte dir Bin.

Přírůstkové sestavování

Nástroj MSBuild můžete říct, aby vytvořil cíl pouze v případě, že se změnily zdrojové soubory nebo cílové soubory, na kterých cíl závisí. Nástroj MSBuild používá časové razítko souboru k určení, zda se změnil.

Přírůstkové sestavení

  1. V souboru projektu přidejte do otevřeného cíle sestavení tyto atributy:

    Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"
    

    Určuje, že cíl sestavení závisí na vstupních souborech zadaných ve Compile skupině položek a na tom, že výstupním cílem je soubor aplikace.

    Výsledný cíl sestavení by měl vypadat přibližně takto:

    <Target Name="Build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe">
      <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
      <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
    </Target>
    
  2. Otestujte cíl sestavení zadáním příkazu msbuild -v:d na příkazovém řádku.

    Mějte na paměti, že helloworld.csproj je výchozí soubor projektu a sestavení je výchozím cílem.

    Přepínač -v:d je zkratka parametru -verbosity:detailed , kterou jste použili dříve.

    Pokud jste výstup už vytvořili, měly by se zobrazit tyto řádky:

    Přeskočení cílového sestavení, protože všechny výstupní soubory jsou aktuální vzhledem ke vstupním souborům.

    Nástroj MSBuild přeskočí cíl sestavení, protože se od posledního sestavení aplikace nezměnil žádný ze zdrojových souborů.

Příklad jazyka C#

Následující příklad ukazuje soubor projektu, který zkompiluje aplikaci jazyka C# a zaznamená zprávu obsahující název výstupního souboru.

Kód

<Project DefaultTargets = "Compile">

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldCS</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <CSFile Include = "*.cs"/>
    </ItemGroup>

    <Target Name="Compile">
        <!-- Run the C# compilation using input files of type CSFile -->
        <CSC
            Sources = "@(CSFile)"
            OutputAssembly = "$(appname).exe">
            <!-- Set the OutputAssembly attribute of the CSC task
            to the name of the executable file that is created -->
            <Output
                TaskParameter = "OutputAssembly"
                ItemName = "EXEFile" />
        </CSC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Příklad jazyka Visual Basic

Následující příklad ukazuje soubor projektu, který zkompiluje aplikaci jazyka Visual Basic a zaznamená zprávu obsahující název výstupního souboru.

Kód

<Project DefaultTargets = "Compile">

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldVB</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <VBFile Include = "consolehwvb1.vb"/>
    </ItemGroup>

    <Target Name = "Compile">
        <!-- Run the Visual Basic compilation using input files of type VBFile -->
        <VBC
            Sources = "@(VBFile)"
            OutputAssembly= "$(appname).exe">
            <!-- Set the OutputAssembly attribute of the VBC task
            to the name of the executable file that is created -->
            <Output
                TaskParameter = "OutputAssembly"
                ItemName = "EXEFile" />
        </VBC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

Co dále?

Visual Studio může automaticky provádět většinu práce, která je zobrazena v tomto návodu. Informace o tom, jak pomocí sady Visual Studio vytvářet, upravovat, sestavovat a testovat soubory projektu MSBuild, najdete v tématu Návod: Použití nástroje MSBuild.