diff --git a/docs/usage/msbuild-task.md b/docs/usage/msbuild-task.md index 57673d08f6..4c7a71b64f 100644 --- a/docs/usage/msbuild-task.md +++ b/docs/usage/msbuild-task.md @@ -1,36 +1,69 @@ # MSBuild Task -Available on [Nuget](https://www.nuget.org) under [GitVersionTask](https://www.nuget.org/packages/GitVersionTask/) +The MSBuild Task for GitVersion — **GitVersionTask** — a simple solution if you +want to version your assemblies without writing any command line scripts or +modifying your build process. + +## TL;DR + +### Install + +It works simply by installing the [GitVersionTask NuGet +Package](https://www.nuget.org/packages/GitVersionTask/) into the project you +want to have versioned by GitVersion: Install-Package GitVersionTask -The MSBuild task will wire GitVersion into the MSBuild pipeline of a project and perform several actions. +### Remove attributes + +The next thing you need to do, is remove the `Assembly*Version` attributes from +your `Properties\AssemblyInfo.cs` files, so GitVersionTask can be in charge of +versioning your assemblies. + +### Done! + +The TL;DR section is now done and GitVersionTask should be working its magic, +versioning your assemblies like a champ. However, if you're interested in +knowing what more GitVersionTask does, or have any questions, please read on. + +After being installed into a project, the MSBuild task will wire GitVersion into +the MSBuild pipeline of a project and perform several actions. These actions are +described below. -## Inject version metadata into the assembly +## How does it work? -Task Name: `GitVersionTask.UpdateAssemblyInfo` +### Inject version metadata into the assembly -### AssemblyInfo Attributes +The sub-task named `GitVersionTask.UpdateAssemblyInfo` will inject version +metadata into the assembly which GitVersionTask is added to. For each assembly +you want GitVersion to version, you need to install the GitVersionTask into it +via NuGet. -At build time a temporary AssemblyInfo.cs will be created that contains the appropriate SemVer information. This will will be included in the build pipeline. +#### AssemblyInfo Attributes -Ensure you remove the `Assembly*Version` attributes from your `Properties\AssemblyInfo.cs` file so as to not get duplicate attribute warnings. Sample default: +At build time a temporary `AssemblyInfo.cs` will be created that contains the +appropriate SemVer information. This will be included in the build pipeline. +Sample default: - [assembly: AssemblyVersion("1.0.0.0")] - [assembly: AssemblyFileVersion("1.0.0.0")] - [assembly: AssemblyInformationalVersion("1.1.0+Branch.master.Sha.722aad3217bd49a6576b6f82f60884e612f9ba58")] +```c# +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyInformationalVersion("1.1.0+Branch.master.Sha.722aad3217bd49a6576b6f82f60884e612f9ba58")] +``` Now when you build: * `AssemblyVersion` will be set to the `AssemblySemVer` variable. -* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with a appended `.0`. -* `AssemblyInformationalVersion` will be set to the `InformationalVersion` variable. +* `AssemblyFileVersion` will be set to the `MajorMinorPatch` variable with a +* appended `.0`. `AssemblyInformationalVersion` will be set to the +* `InformationalVersion` variable. -### Other injected Variables +#### Other injected Variables -All other [variables](../more-info/variables.md) will be injected into a internal static class. +All other [variables](../more-info/variables.md) will be injected into an +internal static class: -``` +```c# namespace AssemblyName { [CompilerGenerated] @@ -44,11 +77,11 @@ namespace AssemblyName } ``` -### Accessing injected Variables +#### Accessing injected Variables -**All variables** +##### All variables -``` +```c# var assemblyName = assembly.GetName().Name; var gitVersionInformationType = assembly.GetType(assemblyName + ".GitVersionInformation"); var fields = gitVersionInformationType.GetFields(); @@ -59,49 +92,63 @@ foreach (var field in fields) } ``` -**Specific variable** +##### Specific variable -``` +```c# var assemblyName = assembly.GetName().Name; var gitVersionInformationType = assembly.GetType(assemblyName + ".GitVersionInformation"); var versionField = gitVersionInformationType.GetField("Major"); Trace.WriteLine(versionField.GetValue(null)); ``` -## Populate some MSBuild properties with version metadata +### Populate some MSBuild properties with version metadata -Task Name: `GitVersionTask.GetVersion` +The sub-task `GitVersionTask.GetVersion` will write all the derived +[variables](../more-info/variables.md) to MSBuild properties so the information +can be used by other tooling in the build pipeline. -At build time all the derived [variables](../more-info/variables.md) will be written to MSBuild properties so the information can be used by other tooling in the build pipeline. +The class for `GitVersionTask.GetVersion` has a property for each variable. +However at MSBuild time these properties are mapped to MSBuild properties that +are prefixed with `GitVersion_`. This prevents conflicts with other properties +in the pipeline. -The class for `GitVersionTask.GetVersion` has a property for each variable. However at MSBuild time these properties a mapped to MSBuild properties that are prefixed with `GitVersion_`. This prevents conflicts with other properties in the pipeline. +#### Accessing variable in MSBuild -### Accessing variable in MSBuild +After `GitVersionTask.GetVersion` has executed, the MSBuild properties can be +used in the standard way. For example: -After `GitVersionTask.GetVersion` has executed the properties can be used in the standard way. For example: - - +```xml + +``` -## Communicate variables to current Build Server +### Communicate variables to current Build Server -Task Name: `GitVersionTask.WriteVersionInfoToBuildLog` +The sub-task `GitVersionTask.WriteVersionInfoToBuildLog` will attempt to write +the version information to the current Build Server log. -If, at build time, it is detected that the build is occurring inside a Build Server server then the [variables](../more-info/variables.md) will be written to the build log in a format that the current Build Server can consume. See [Build Server Support](../build-server-support/build-server-support.md). +If, at build time, it is detected that the build is occurring inside a Build +Server then the [variables](../more-info/variables.md) will be written to the +Build Server log in a format that the current Build Server can consume. See +[Build Server Support](../build-server-support/build-server-support.md). ## Conditional control tasks -Properties `WriteVersionInfoToBuildLog`, `UpdateAssemblyInfo` and `GetVersion` are checked before running these tasks. +Properties `WriteVersionInfoToBuildLog`, `UpdateAssemblyInfo` and `GetVersion` +are checked before running these tasks. -If you, eg., want to disable `GitVersionTask.UpdateAssemblyInfo` just define `UpdateAssemblyInfo` to something other than `true` in your MSBuild script, like this: +If you, e.g. want to disable `GitVersionTask.UpdateAssemblyInfo` just define +`UpdateAssemblyInfo` to something other than `true` in your MSBuild script, like +this: -``` - - ... - false - ... - +```xml + + ... + false + ... + ``` ## My Git repository requires authentication. What do I do? -Set the environmental variables `GITVERSION_REMOTE_USERNAME` and `GITVERSION_REMOTE_PASSWORD` before the build is initiated. \ No newline at end of file +Set the environmental variables `GITVERSION_REMOTE_USERNAME` and +`GITVERSION_REMOTE_PASSWORD` before the build is initiated. \ No newline at end of file