Návod: Vytvoření souboru projektu MSBuild od začátku
Programovací jazyky, které se zaměřují na rozhraní .NET Framework pomocí souborů projektu MSBuild k popsání a řídí proces sestavení aplikace.Při použití sady Visual Studio k vytvoření souboru projektu MSBuild je odpovídající kód XML do souboru přidán automaticky.Může však být užitečné porozumět uspořádání XML a způsobu jeho změny tak, aby řídil sestavení.
Informace o vytváření souboru projektu pro projekt C++ naleznete v tématu MSBuild (Visual C++).
Tento návod ukazuje, jak vytvořit soubor základního projektu postupně pouze pomocí textového editoru.Návod postupuje podle těchto kroků:
Vytvořte zdrojový soubor minimální aplikace.
Vytvořte minimální soubor projektu MSBuild.
Rozšiřte proměnnou prostředí PATH, aby zahrnovala nástroj MSBuild.
Vytvoření aplikace pomocí souboru projektu.
Přidání vlastností do ovládacího prvku sestavení.
Řízení sestavení změnou hodnoty vlastnosti.
Přidejte cíle pro sestavení.
Řízení sestavení určením cílů.
Přírůstkové sestavení.
Tento návod ukazuje, jak sestavit projekt na příkazovém řádku a zkontrolovat výsledky.Další informace o MSBuild a o způsobu spuštění MSBuild v příkazovém řádku naleznete v části Návod: Použití nástroje MSBuild.
Chcete-li dokončit tohoto průvodce, musíte mít nainstalované rozhraní .NET Framework (verze 2.0, 3.5, 4.0 nebo 4.5), protože obsahuje nástroj MSBuild a kompilátor Visual C#, které jsou v tomto průvodci potřeba.
Vytvoření minimální aplikace
V této části ukazuje, jak vytvořit minimální Visual C# aplikace zdrojový soubor pomocí textového editoru.
Vytvoření minimální aplikace
Na příkazovém řádku přejděte do složky, kde chcete vytvořit aplikaci, například \My Documents\ nebo \Desktop\.
Zadejte md HelloWorld, chcete-li vytvořit podsložku s názvem \HelloWorld\.
Zadejte cd HelloWorld, chcete-li změnit na novou složku.
Spusťte Poznámkový blok nebo jiný textový editor a poté zadejte 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!"); } }
Uložte tento soubor se zdrojovým kódem a pojmenujte ho Helloworld.cs.
Sestavte aplikaci zadáním csc helloworld.cs v příkazovém řádku.
Otestujte aplikaci zadáním helloworld v příkazovém řádku.
Zobrazí se zpráva Hello, world!.
Smazat aplikaci zadáním del helloworld.exe v příkazovém řádku.
Vytvořte minimální soubor projektu MSBuild
Nyní, 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ý uzel Project.
Uzel ItemGroup, který má obsahovat prvky položky.
Prvek položky, který odkazuje na zdrojový soubor aplikace.
Uzel Target obsahuje úkoly, které jsou nutné pro sestavení aplikace.
Prvek Task pro spuštění kompilátoru Visual C# pro sestavení aplikace.
Vytvoření minimálního soubor projektu MSBuild.
V textovém editoru nahraďte existující text těmito dvěma řádky:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"> </Project>
Vložte tento uzel ItemGroup jako podřízený prvek uzlu Project:
<ItemGroup> <Compile Include="helloworld.cs" /> </ItemGroup>
Všimněte si že tato ItemGroup již obsahuje prvek položky.
Přidejte uzel Target jako podřízený prvek uzlu Project.Pojmenujte uzel Sestavení.
<Target Name="Build"> </Target>
Vložte tento prvek úkolu jako podřízený prvek uzlu Target:
<Csc Sources="@(Compile)"/>
Uložte tento soubor projektu a pojmenujte ho Helloworld.csproj.
Váš soubor minimálního projektu by měl vypadat následovně:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="helloworld.cs" />
</ItemGroup>
<Target Name="Build">
<Csc Sources="@(Compile)"/>
</Target>
</Project>
Úkoly v cíl sestavení jsou spouštěny postupně.V tomto případě úkol Csc kompilátoru jazyka Visual C# je jediným úkolem.Očekává seznam zdrojových souborů, které se mají kompilovat, a ten je dán hodnotou položky Compile.Položka Compile odkazuje pouze na jeden zdrojový soubor, Helloworld.cs.
[!POZNÁMKA]
V prvku položky můžete použít zástupný znak hvězdička (*) k odkazování na všechny soubory s příponou názvu .cs, takto:
<Compile Include="*.cs" />
Nedoporučujeme však použití zástupných znaků, protože to ztěžuje ladění a selektivní, pokud jsou zdrojové soubory přidány nebo odstraněny.
Rozšíření cesty, aby zahrnovala nástroj MSBuild
Předtím, než může získat přístup k MSBuild, je nutné rozšířit proměnné prostředí PATH tak, aby obsahoval složce rozhraní .NET Framework.
Chcete-li přidat MSBuild do cesty
Spuštění v sadě Visual Studio 2013, můžete vyhledat MSBuild.exe ve složce MSBuild (%ProgramFiles%\MSBuild na 32bitový operační systém, nebo %ProgramFiles(x86)%\MSBuild v operačním systému 64bitová verze).
Na příkazovém řádku zadejte set PATH=%PATH%;%ProgramFiles%\MSBuild nebo set PATH=%PATH%;%ProgramFiles(x86)%\MSBuild.
Alternativně, pokud používáte sadu Visual Studio, můžete použít příkazový řádek sady Visual Studio, který obsahuje cestu obsahující složku nástroje MSBuild.
Použití souboru projektu k sestavení aplikace
Nyní k sestavení aplikace použijte soubor projektu, který jste právě vytvořili.
Sestavení aplikace
Na příkazovém řádku zadejte msbuild helloworld.csproj /t:Build.
To vytvoří cíl sestavení souboru projektu Helloworld vyvoláním kompilátoru Visual C# pro vytvoření aplikace Helloworld.
Otestujte aplikace zadáním helloworld.
Zobrazí se zpráva Hello, world!.
[!POZNÁMKA]
Zvýšením úrovně podrobností můžete zobrazit další informace o sestavení.Chcete-li nastavit úroveň podrobností na „podrobné“, zadejte některý z následujících příkazů na příkazovém řádku:
msbuild helloworld.csproj /t:Build /verbosity:detailed
Přidání vlastností sestavení
Můžete přidat vlastnosti sestavení do souboru projektu k dalšímu řízení sestavení.Nyní přidejte tyto vlastnosti:
Vlastnost AssemblyName k určení názvu aplikace.
Vlastnost OutputPath k určení složky obsahující aplikaci.
Přidání vlastností sestavení
Smazat stávající aplikaci zadáním del helloworld.exe v příkazovém řádku.
V souboru projektu vložte tento prvek PropertyGroup ihned za úvodní prvek Project:
<PropertyGroup> <AssemblyName>MSBuildSample</AssemblyName> <OutputPath>Bin\</OutputPath> </PropertyGroup>
Přidejte tento úkol do cíle sestavení, těsně před úkol Csc:
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
Úkol MakeDir vytváří složku pojmenovanou vlastností OutputPath, pokud aktuálně neexistuje žádná složka s tímto názvem.
Přidejte tento atribut OutputAssembly do úkolu Csc:
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
Toto dá pokyn kompilátoru Visual C# k vytvoření sestavení s názvem definovaným vlastností AssemblyName a jeho umístění do složky s názvem definovaným vlastností OutputPath.
Uložte provedené změny.
Váš soubor projektu by měl nyní vypadat následovně:
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<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 při jeho zadání v prvku OutputPath místo jeho přidání do atributu OutputAssembly úlohy Csc.Z toho plyne,
<OutputPath>Bin\</OutputPath>
OutputAssembly=="$(OutputPath)$(AssemblyName).exe" />
je lepší než
<OutputPath>Bin</OutputPath>
OutputAssembly=="$(OutputPath)\$(AssemblyName).exe" />
Testování vlastností sestavení
Nyní můžete vytvořit aplikaci pomocí souboru projektu, ve kterém jste použili vlastnosti sestavení pro určení výstupní složky a názvu aplikace.
Testování vlastností sestavení
Na příkazovém řádku zadejte msbuild helloworld.csproj /t:Build.
To vytvoří složku \Bin\ a poté vyvolá kompilátor Visual C#, aby vytvořil aplikaci MSBuildSample a umístí ji do složky \Bin\.
Chcete-li ověřit, zda byla složka \Bin\ vytvořena a zda obsahuje aplikaci MSBuildSample, zadejte dir Bin.
Otestujte aplikace zadáním Bin\MSBuildSample.
Zobrazí se zpráva Hello, world!.
Přidání cílů pro sestavení
Dále přidejte další dva cíle do souboru projektu, a to takto:
Cíl čištění, který odstraní staré soubory.
Přestavení cíl, který používá DependsOnTargets atribut, který chcete vynutit čistého úlohu pro spuštění před úlohu sestavení.
Nyní, když máte více cílů, můžete nastavit cíl sestavení jako výchozí cíl.
Přidání cílů pro sestavení
V souboru projektu přidejte tyto dva cíle ihned za úvodní 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 Znovu sestavit nelze spustit, dokud nebyly spuštěny cíle Vyčistit i Sestavit.Ačkoli cíl opětovného sestavení neobsahuje žádné úkoly, způsobí, že cílové cíl čištění se spustí před cílem sestavení.
Přidat tento atribut DefaultTargets do otevíracího prvku Project:
<Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
Tím se nastaví cíl sestavení jako výchozí cíl.
Váš soubor projektu by měl nyní vypadat následovně:
<Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<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ů pro sestavení
Může zkoušet nové cíle sestavení k testování těchto funkcí souboru projektu:
Vytváření výchozího sestavení.
Nastavení názvu aplikace v příkazovém řádku.
Odstranění aplikace před sestavením jiné aplikace.
Odstranění aplikace bez sestavení jiné aplikace.
Testování cílů sestavení
Na příkazovém řádku zadejte msbuild helloworld.csproj /p:AssemblyName=Greetings.
Vzhledem k tomu, že jste nepoužili přepnutí /t k explicitnímu nastavení cíle, MSBuild spustí výchozí cíl sestavení.Přepínač /p přepisuje vlastnost AssemblyName a dává ji novou hodnotu, Greetings.To způsobí, že nová aplikace, Greetings.exe, bude vytvořena ve složce \Bin\.
Chcete-li ověřit, zda složka \Bin\ obsahuje aplikaci MSBuildSample i novou aplikaci Greetings, zadejte dir Bin.
Testování aplikace pozdrav tak, že napíšete Bin\Greetings.
Zobrazí se zpráva Hello, world!.
Odstraňte aplikaci MSBuildSample zadáním msbuild helloworld.csproj /t:clean.
To spustí úkolu Vyčisti pro odebrání aplikace, která má výchozí hodnotu vlastnosti AssemblyNameMSBuildSample.
Odstraňte aplikaci Greetings zadáním msbuild helloworld.csproj /t:clean /p:AssemblyName=Greetings.
To spustí úkolu Vyčisti pro odebrání aplikace, která má danou hodnotu vlastnosti AssemblyNameGreetings.
Chcete-li ověřit, zda je složka \Bin\ nyní prázdná, zadejte dir Bin.
Typ msbuild.
Přestože není zadán soubor projektu, MSBuild vytvoří soubor helloworld.csproj, protože je pouze jeden soubor projektu v aktuální složce.To způsobí, že aplikace MSBuildSample bude vytvořena ve složce \Bin\.
Chcete-li ověřit, zda složka \Bin\ obsahuje aplikaci MSBuildSample, zadejte dir Bin.
Přírůstkové sestavení
Nástroji MSBuild můžete říct, aby vytvořil cíl pouze v případě, že zdrojové soubory nebo cílové soubory, na kterých je cíl závislý, byly změněny.Nástroj MSBuild používá časové razítko souboru pro zjištění, zda byl změněn.
Přírůstkové sestavování
V souboru projektu přidejte tyto atributy do úvodního cíle sestavení:
Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"
Tato volba určuje, že cíl sestavení závisí na vstupní soubory, které jsou určeny v Compile Skupina položek, a že je cíl výstupu souboru aplikace.
Cíl výsledného sestavení by se měl podobat následujícímu kódu:
<Target Name="Build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"> <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" /> <Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" /> </Target>
Test cíl sestavení tak, že napíšete msbuild /v:d na příkazovém řádku.
Mějte na paměti, že helloworld.csproj je výchozí projektový soubor, a že sestavení je výchozí cíl.
Přepínač /v:d určuje podrobný popis procesu sestavení.
Tyto řádky by měly být zobrazeny:
Skipping target "Build" because all output files are up-to-date with respect to the input files.
Input files: HelloWorld.cs
Output files: Bin\MSBuildSample.exe
MSBuild vynechává cíl sestavení, protože žádný zdrojový soubory nebyl změněn od posledního vytvoření aplikace.
Příklad
Popis
Následující příklad ukazuje soubor projektu, který zkompiluje aplikaci Visual C# a zaznamená zprávu, která obsahuje název výstupního souboru.
Kód
<Project DefaultTargets = "Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run the Visual 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
Popis
Následující příklad ukazuje soubor projektu, který zkompiluje aplikaci Visual Basic a zaznamená zprávu, která obsahuje název výstupního souboru.
Kód
<Project DefaultTargets = "Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003" >
<!-- 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>
Kam dál?
Visual Studio může automaticky provést mnoho práce, která je uvedena v tomto návodu.Chcete-li zjistit, jak vytvářet, upravovat, sestavovat a testovat soubory projektu MSBuild pomocí sady Visual Studio, viz Návod: Použití nástroje MSBuild.