diff --git a/build.cake b/build.cake
index 16525d3f19..055da2e1b0 100644
--- a/build.cake
+++ b/build.cake
@@ -234,6 +234,25 @@ Task("Copy-Files")
MSBuildSettings = parameters.MSBuildSettings
});
+ DotNetCorePublish("./src/GitVersion.MsBuild/GitVersion.MsBuild.csproj", new DotNetCorePublishSettings
+ {
+ Framework = parameters.FullFxVersion,
+ NoBuild = true,
+ NoRestore = true,
+ Configuration = parameters.Configuration,
+ MSBuildSettings = parameters.MSBuildSettings
+ });
+
+ // .NET Core
+ DotNetCorePublish("./src/GitVersion.MsBuild/GitVersion.MsBuild.csproj", new DotNetCorePublishSettings
+ {
+ Framework = parameters.CoreFxVersion,
+ NoBuild = true,
+ NoRestore = true,
+ Configuration = parameters.Configuration,
+ MSBuildSettings = parameters.MSBuildSettings
+ });
+
var ilMergeDir = parameters.Paths.Directories.ArtifactsBinFullFxILMerge;
var portableDir = parameters.Paths.Directories.ArtifactsBinFullFxPortable.Combine("tools");
var cmdlineDir = parameters.Paths.Directories.ArtifactsBinFullFxCmdline.Combine("tools");
@@ -357,9 +376,9 @@ Task("Pack-Nuget")
MSBuildSettings = parameters.MSBuildSettings
};
- // GitVersionCore, GitVersionTask, & global tool
+ // GitVersionCore, GitVersion.MsBuild, & global tool
DotNetCorePack("./src/GitVersionCore", settings);
- DotNetCorePack("./src/GitVersionTask", settings);
+ DotNetCorePack("./src/GitVersion.MsBuild", settings);
DotNetCorePack("./src/GitVersionExe/GitVersion.Tool.csproj", settings);
});
diff --git a/build/parameters.cake b/build/parameters.cake
index 82f8498a8a..10216896bd 100644
--- a/build/parameters.cake
+++ b/build/parameters.cake
@@ -98,7 +98,7 @@ public class BuildParameters
Packages = BuildPackages.GetPackages(
Paths.Directories.NugetRoot,
Version.SemVersion,
- new [] { "GitVersion.CommandLine.DotNetCore", "GitVersion.CommandLine", "GitVersionCore", "GitVersionTask", "GitVersion.Tool" },
+ new [] { "GitVersion.CommandLine.DotNetCore", "GitVersion.CommandLine", "GitVersionCore", "GitVersion.MsBuild", "GitVersion.Tool" },
new [] { "GitVersion.Portable" });
var files = Paths.Files;
@@ -116,8 +116,7 @@ public class BuildParameters
{
["GitVersion.CommandLine.DotNetCore"] = Paths.Directories.ArtifactsBinCoreFx,
["GitVersion.CommandLine"] = Paths.Directories.ArtifactsBinFullFxCmdline,
- ["GitVersion.Portable"] = Paths.Directories.ArtifactsBinFullFxPortable,
- ["GitVersion.Tool"] = Paths.Directories.ArtifactsBinCoreFx,
+ ["GitVersion.Portable"] = Paths.Directories.ArtifactsBinFullFxPortable
};
Credentials = BuildCredentials.GetCredentials(context);
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index 851ff3633a..b00181195e 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -14,8 +14,7 @@
- 0.25.0-preview-0033
- [1.0.185]
+ 0.26.0
2019.1.1
6.0.0
diff --git a/src/Docker/net472/linux/debian-9/Dockerfile b/src/Docker/net472/linux/debian-9/Dockerfile
index fe3ded82a8..fe2779cb31 100644
--- a/src/Docker/net472/linux/debian-9/Dockerfile
+++ b/src/Docker/net472/linux/debian-9/Dockerfile
@@ -2,10 +2,6 @@ FROM mono:5.14
LABEL maintainers="GitTools Maintainers"
ARG contentFolder
-RUN sed -i '/jessie-updates/d' /etc/apt/sources.list && apt-get update && \
- apt-get install -y libgit2-dev && \
- ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
diff --git a/src/Docker/netcoreapp2.1/linux/centos-7/Dockerfile b/src/Docker/netcoreapp2.1/linux/centos-7/Dockerfile
index 232b07ac9c..2851e09fc0 100644
--- a/src/Docker/netcoreapp2.1/linux/centos-7/Dockerfile
+++ b/src/Docker/netcoreapp2.1/linux/centos-7/Dockerfile
@@ -1,7 +1,7 @@
FROM centos:7
LABEL maintainers="GitTools Maintainers"
-ENV DOTNET_VERSION='2.1'
+ENV DOTNET_VERSION='2.1'
ARG contentFolder
# https://dotnet.microsoft.com/download/linux-package-manager/rhel/sdk-current
@@ -9,13 +9,11 @@ RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-pro
&& yum update cache
# if you need SDK use dotnet-sdk-$DOTNET_VERSION
-RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 unzip libgit2-devel.x86_64 \
+RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 \
&& yum clean all \
&& rm -rf /tmp/*
-RUN ln -s /usr/lib64/libgit2.so /usr/lib64/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
-ENTRYPOINT ["dotnet", "GitVersion.dll"]
\ No newline at end of file
+ENTRYPOINT ["dotnet", "GitVersion.dll"]
diff --git a/src/Docker/netcoreapp2.1/linux/debian-9/Dockerfile b/src/Docker/netcoreapp2.1/linux/debian-9/Dockerfile
index b9c29dbec3..f71693f154 100644
--- a/src/Docker/netcoreapp2.1/linux/debian-9/Dockerfile
+++ b/src/Docker/netcoreapp2.1/linux/debian-9/Dockerfile
@@ -2,10 +2,6 @@ FROM mcr.microsoft.com/dotnet/core/runtime:2.1
LABEL maintainers="GitTools Maintainers"
ARG contentFolder
-RUN apt-get update && \
- apt-get install -y libgit2-dev && \
- ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
diff --git a/src/Docker/netcoreapp2.1/linux/fedora-27/Dockerfile b/src/Docker/netcoreapp2.1/linux/fedora-27/Dockerfile
index c97acb7606..ad12a1fca2 100644
--- a/src/Docker/netcoreapp2.1/linux/fedora-27/Dockerfile
+++ b/src/Docker/netcoreapp2.1/linux/fedora-27/Dockerfile
@@ -1,20 +1,18 @@
FROM fedora:27
LABEL maintainers="GitTools Maintainers"
-ENV DOTNET_VERSION='2.1'
+ENV DOTNET_VERSION='2.1'
ARG contentFolder
# https://dotnet.microsoft.com/download/linux-package-manager/rhel/sdk-current
-RUN rpm -Uvh https://packages.microsoft.com/config/fedora/27/packages-microsoft-prod.rpm
+RUN rpm -Uvh https://packages.microsoft.com/config/fedora/27/packages-microsoft-prod.rpm
# if you need SDK use dotnet-sdk-$DOTNET_VERSION
-RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 unzip libgit2-devel.x86_64 \
+RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64\
&& yum clean all \
&& rm -rf /tmp/*
-RUN ln -s /usr/lib64/libgit2.so /usr/lib64/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
-ENTRYPOINT ["dotnet", "GitVersion.dll"]
\ No newline at end of file
+ENTRYPOINT ["dotnet", "GitVersion.dll"]
diff --git a/src/Docker/netcoreapp2.2/linux/centos-7/Dockerfile b/src/Docker/netcoreapp2.2/linux/centos-7/Dockerfile
index 361051cafa..eb2928cd24 100644
--- a/src/Docker/netcoreapp2.2/linux/centos-7/Dockerfile
+++ b/src/Docker/netcoreapp2.2/linux/centos-7/Dockerfile
@@ -9,12 +9,10 @@ RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-pro
&& yum update cache
# if you need SDK use dotnet-sdk-$DOTNET_VERSION
-RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 unzip libgit2-devel.x86_64 \
+RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 \
&& yum clean all \
&& rm -rf /tmp/*
-RUN ln -s /usr/lib64/libgit2.so /usr/lib64/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
diff --git a/src/Docker/netcoreapp2.2/linux/debian-9/Dockerfile b/src/Docker/netcoreapp2.2/linux/debian-9/Dockerfile
index 288a8b9bb8..bddb968314 100644
--- a/src/Docker/netcoreapp2.2/linux/debian-9/Dockerfile
+++ b/src/Docker/netcoreapp2.2/linux/debian-9/Dockerfile
@@ -2,10 +2,6 @@ FROM mcr.microsoft.com/dotnet/core/runtime:2.2
LABEL maintainers="GitTools Maintainers"
ARG contentFolder
-RUN apt-get update && \
- apt-get install -y libgit2-dev && \
- ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
diff --git a/src/Docker/netcoreapp2.2/linux/fedora-27/Dockerfile b/src/Docker/netcoreapp2.2/linux/fedora-27/Dockerfile
index dece7f6f6f..fa628e82be 100644
--- a/src/Docker/netcoreapp2.2/linux/fedora-27/Dockerfile
+++ b/src/Docker/netcoreapp2.2/linux/fedora-27/Dockerfile
@@ -5,15 +5,13 @@ ENV DOTNET_VERSION='2.2'
ARG contentFolder
# https://dotnet.microsoft.com/download/linux-package-manager/rhel/sdk-current
-RUN rpm -Uvh https://packages.microsoft.com/config/fedora/27/packages-microsoft-prod.rpm
+RUN rpm -Uvh https://packages.microsoft.com/config/fedora/27/packages-microsoft-prod.rpm
# if you need SDK use dotnet-sdk-$DOTNET_VERSION
-RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 unzip libgit2-devel.x86_64 \
+RUN yum install -y dotnet-runtime-$DOTNET_VERSION.x86_64 \
&& yum clean all \
&& rm -rf /tmp/*
-RUN ln -s /usr/lib64/libgit2.so /usr/lib64/libgit2-15e1193.so
-
WORKDIR /app
COPY $contentFolder/ ./
diff --git a/src/GitVersionTask.Tests/AssemblyLocation.cs b/src/GitVersion.MsBuild.Task.Tests/AssemblyLocation.cs
similarity index 100%
rename from src/GitVersionTask.Tests/AssemblyLocation.cs
rename to src/GitVersion.MsBuild.Task.Tests/AssemblyLocation.cs
diff --git a/src/GitVersionTask.Tests/AssemblyParallelizable.cs b/src/GitVersion.MsBuild.Task.Tests/AssemblyParallelizable.cs
similarity index 100%
rename from src/GitVersionTask.Tests/AssemblyParallelizable.cs
rename to src/GitVersion.MsBuild.Task.Tests/AssemblyParallelizable.cs
diff --git a/src/GitVersionTask.Tests/GetVersionTaskTests.cs b/src/GitVersion.MsBuild.Task.Tests/GetVersionTaskTests.cs
similarity index 95%
rename from src/GitVersionTask.Tests/GetVersionTaskTests.cs
rename to src/GitVersion.MsBuild.Task.Tests/GetVersionTaskTests.cs
index a3f6d5c7d1..01c03af23b 100644
--- a/src/GitVersionTask.Tests/GetVersionTaskTests.cs
+++ b/src/GitVersion.MsBuild.Task.Tests/GetVersionTaskTests.cs
@@ -1,5 +1,6 @@
using System.Linq;
using GitVersion;
+using GitVersion.MsBuild.Task;
using GitVersionTask;
using Microsoft.Build.Framework;
using NUnit.Framework;
diff --git a/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj b/src/GitVersion.MsBuild.Task.Tests/GitVersion.MsBuild.Task.Tests.csproj
similarity index 94%
rename from src/GitVersionTask.Tests/GitVersionTask.Tests.csproj
rename to src/GitVersion.MsBuild.Task.Tests/GitVersion.MsBuild.Task.Tests.csproj
index bbcb2148c7..a2543784c4 100644
--- a/src/GitVersionTask.Tests/GitVersionTask.Tests.csproj
+++ b/src/GitVersion.MsBuild.Task.Tests/GitVersion.MsBuild.Task.Tests.csproj
@@ -23,7 +23,7 @@
-
+
diff --git a/src/GitVersionTask.Tests/GitVersionTaskDirectoryTests.cs b/src/GitVersion.MsBuild.Task.Tests/GitVersionTaskDirectoryTests.cs
similarity index 100%
rename from src/GitVersionTask.Tests/GitVersionTaskDirectoryTests.cs
rename to src/GitVersion.MsBuild.Task.Tests/GitVersionTaskDirectoryTests.cs
diff --git a/src/GitVersionTask.Tests/Helpers/DirectoryHelper.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/DirectoryHelper.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/DirectoryHelper.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/DirectoryHelper.cs
diff --git a/src/GitVersionTask.Tests/Helpers/IPostTestDirectoryRemover.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/IPostTestDirectoryRemover.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/IPostTestDirectoryRemover.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/IPostTestDirectoryRemover.cs
diff --git a/src/GitVersionTask.Tests/Helpers/PathHelper.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/PathHelper.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/PathHelper.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/PathHelper.cs
diff --git a/src/GitVersionTask.Tests/Helpers/Scrubbers.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/Scrubbers.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/Scrubbers.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/Scrubbers.cs
diff --git a/src/GitVersionTask.Tests/Helpers/SelfCleaningDirectory.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/SelfCleaningDirectory.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/SelfCleaningDirectory.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/SelfCleaningDirectory.cs
diff --git a/src/GitVersionTask.Tests/Helpers/TestEffectiveConfiguration.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/TestEffectiveConfiguration.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/TestEffectiveConfiguration.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/TestEffectiveConfiguration.cs
diff --git a/src/GitVersionTask.Tests/Helpers/TestFileSystem.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/TestFileSystem.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/TestFileSystem.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/TestFileSystem.cs
diff --git a/src/GitVersionTask.Tests/Helpers/TestStream.cs b/src/GitVersion.MsBuild.Task.Tests/Helpers/TestStream.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Helpers/TestStream.cs
rename to src/GitVersion.MsBuild.Task.Tests/Helpers/TestStream.cs
diff --git a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs b/src/GitVersion.MsBuild.Task.Tests/InvalidFileCheckerTests.cs
similarity index 99%
rename from src/GitVersionTask.Tests/InvalidFileCheckerTests.cs
rename to src/GitVersion.MsBuild.Task.Tests/InvalidFileCheckerTests.cs
index e8877d2f94..ff2cda6e00 100644
--- a/src/GitVersionTask.Tests/InvalidFileCheckerTests.cs
+++ b/src/GitVersion.MsBuild.Task.Tests/InvalidFileCheckerTests.cs
@@ -1,6 +1,7 @@
using System;
using System.IO;
using GitVersion;
+using GitVersion.MsBuild;
using GitVersionTask.Tests.Mocks;
using Microsoft.Build.Framework;
using NUnit.Framework;
diff --git a/src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs b/src/GitVersion.MsBuild.Task.Tests/Mocks/MockBuildEngine.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Mocks/MockBuildEngine.cs
rename to src/GitVersion.MsBuild.Task.Tests/Mocks/MockBuildEngine.cs
diff --git a/src/GitVersionTask.Tests/Mocks/MockTaskItem.cs b/src/GitVersion.MsBuild.Task.Tests/Mocks/MockTaskItem.cs
similarity index 100%
rename from src/GitVersionTask.Tests/Mocks/MockTaskItem.cs
rename to src/GitVersion.MsBuild.Task.Tests/Mocks/MockTaskItem.cs
diff --git a/src/GitVersionTask.Tests/ModuleInitializer.cs b/src/GitVersion.MsBuild.Task.Tests/ModuleInitializer.cs
similarity index 100%
rename from src/GitVersionTask.Tests/ModuleInitializer.cs
rename to src/GitVersion.MsBuild.Task.Tests/ModuleInitializer.cs
diff --git a/src/GitVersionTask.Tests/TestBase.cs b/src/GitVersion.MsBuild.Task.Tests/TestBase.cs
similarity index 100%
rename from src/GitVersionTask.Tests/TestBase.cs
rename to src/GitVersion.MsBuild.Task.Tests/TestBase.cs
diff --git a/src/GitVersion.MsBuild.Task/GenerateGitVersionInformation.cs b/src/GitVersion.MsBuild.Task/GenerateGitVersionInformation.cs
new file mode 100644
index 0000000000..0abdc67259
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/GenerateGitVersionInformation.cs
@@ -0,0 +1,21 @@
+namespace GitVersion.MsBuild.Task
+{
+ using Microsoft.Build.Framework;
+
+ public class GenerateGitVersionInformation : GitVersionTaskBase
+ {
+ [Required]
+ public string ProjectFile { get; set; }
+
+ [Required]
+ public string IntermediateOutputPath { get; set; }
+
+ [Required]
+ public string Language { get; set; }
+
+ [Output]
+ public string GitVersionInformationFilePath { get; set; }
+
+ public override bool Execute() => TaskProxy.GenerateGitVersionInformation(this);
+ }
+}
diff --git a/src/GitVersionTask/GetVersion.cs b/src/GitVersion.MsBuild.Task/GetVersion.cs
similarity index 84%
rename from src/GitVersionTask/GetVersion.cs
rename to src/GitVersion.MsBuild.Task/GetVersion.cs
index 5b8dcb0244..aac4cab9dc 100644
--- a/src/GitVersionTask/GetVersion.cs
+++ b/src/GitVersion.MsBuild.Task/GetVersion.cs
@@ -1,4 +1,4 @@
-namespace GitVersionTask
+namespace GitVersion.MsBuild.Task
{
using Microsoft.Build.Framework;
@@ -94,15 +94,6 @@ public class GetVersion : GitVersionTaskBase
[Output]
public string CommitsSinceVersionSourcePadded { get; set; }
- protected override void InnerExecute()
- {
- if (GetVersionVariables(out var versionVariables)) return;
-
- var thisType = typeof(GetVersion);
- foreach (var variable in versionVariables)
- {
- thisType.GetProperty(variable.Key)?.SetValue(this, variable.Value, null);
- }
- }
+ public override bool Execute() => TaskProxy.GetVersion(this);
}
}
diff --git a/src/GitVersion.MsBuild.Task/GitVersion.MsBuild.Task.csproj b/src/GitVersion.MsBuild.Task/GitVersion.MsBuild.Task.csproj
new file mode 100644
index 0000000000..c46e9f8907
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/GitVersion.MsBuild.Task.csproj
@@ -0,0 +1,21 @@
+
+
+
+ net461;netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/GitVersion.MsBuild.Task/GitVersionTaskBase.cs b/src/GitVersion.MsBuild.Task/GitVersionTaskBase.cs
new file mode 100644
index 0000000000..e32e6ed5c1
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/GitVersionTaskBase.cs
@@ -0,0 +1,13 @@
+namespace GitVersion.MsBuild.Task
+{
+ using Microsoft.Build.Framework;
+ using Microsoft.Build.Utilities;
+
+ public abstract class GitVersionTaskBase : Task
+ {
+ [Required]
+ public string SolutionDirectory { get; set; }
+
+ public bool NoFetch { get; set; }
+ }
+}
diff --git a/src/GitVersion.MsBuild.Task/LibGit2Sharp/GitLoaderContext.cs b/src/GitVersion.MsBuild.Task/LibGit2Sharp/GitLoaderContext.cs
new file mode 100644
index 0000000000..473eeec8d4
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/LibGit2Sharp/GitLoaderContext.cs
@@ -0,0 +1,87 @@
+// This code originally copied from https://raw.githubusercontent.com/dotnet/sourcelink/master/src/Microsoft.Build.Tasks.Git/GitLoaderContext.cs
+#if !NET461
+namespace GitVersion.MsBuild.Task.LibGit2Sharp
+{
+ using System;
+ using System.IO;
+ using System.Linq;
+ using System.Reflection;
+ using System.Runtime.InteropServices;
+ using System.Runtime.Loader;
+ using RuntimeEnvironment = Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment;
+
+ public sealed class GitLoaderContext : AssemblyLoadContext
+ {
+ private readonly string[] assemblies;
+ public static GitLoaderContext Instance { get; private set; }
+
+ private GitLoaderContext(string[] assemblies) => this.assemblies = assemblies;
+
+ public static void Init(params string[] assemblies) => Instance = new GitLoaderContext(assemblies);
+
+ protected override Assembly Load(AssemblyName assemblyName)
+ {
+ if (assemblies.Contains(assemblyName.Name))
+ {
+ var path = Path.Combine(Path.GetDirectoryName(typeof(GitLoaderContext).Assembly.Location), assemblyName.Name + ".dll");
+ return LoadFromAssemblyPath(path);
+ }
+
+ return Default.LoadFromAssemblyName(assemblyName);
+ }
+
+ protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
+ {
+ var modulePtr = IntPtr.Zero;
+
+ if (unmanagedDllName.StartsWith("git2-", StringComparison.Ordinal) ||
+ unmanagedDllName.StartsWith("libgit2-", StringComparison.Ordinal))
+ {
+ var directory = GetNativeLibraryDirectory();
+ var extension = GetNativeLibraryExtension();
+
+ if (!unmanagedDllName.EndsWith(extension, StringComparison.Ordinal))
+ {
+ unmanagedDllName += extension;
+ }
+
+ var nativeLibraryPath = Path.Combine(directory, unmanagedDllName);
+ if (!File.Exists(nativeLibraryPath))
+ {
+ nativeLibraryPath = Path.Combine(directory, "lib" + unmanagedDllName);
+ }
+
+ modulePtr = LoadUnmanagedDllFromPath(nativeLibraryPath);
+ }
+
+ return modulePtr != IntPtr.Zero ? modulePtr : base.LoadUnmanagedDll(unmanagedDllName);
+ }
+
+ internal static string GetNativeLibraryDirectory()
+ {
+ var dir = Path.GetDirectoryName(typeof(GitLoaderContext).Assembly.Location);
+ return Path.Combine(dir, "runtimes", RuntimeIdMap.GetNativeLibraryDirectoryName(RuntimeEnvironment.GetRuntimeIdentifier()), "native");
+ }
+
+ private static string GetNativeLibraryExtension()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ return ".dll";
+ }
+
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+ {
+ return ".dylib";
+ }
+
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ return ".so";
+ }
+
+ throw new PlatformNotSupportedException();
+ }
+ }
+}
+#endif
diff --git a/src/GitVersion.MsBuild.Task/LibGit2Sharp/LibGit2SharpLoader.cs b/src/GitVersion.MsBuild.Task/LibGit2Sharp/LibGit2SharpLoader.cs
new file mode 100644
index 0000000000..9c3f64fa10
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/LibGit2Sharp/LibGit2SharpLoader.cs
@@ -0,0 +1,90 @@
+// This code originally copied and adapted from https://raw.githubusercontent.com/dotnet/sourcelink/master/src/Microsoft.Build.Tasks.Git/TaskImplementation.cs
+
+namespace GitVersion.MsBuild.Task.LibGit2Sharp
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Reflection;
+
+ public class LibGit2SharpLoader
+ {
+ private static string taskDirectory;
+
+ public static LibGit2SharpLoader Instance { get; private set; }
+ public Assembly Assembly { get; }
+
+ public static void LoadAssembly(string tasksAssembly) => Instance = new LibGit2SharpLoader(tasksAssembly);
+
+ private LibGit2SharpLoader(string tasksAssembly)
+ {
+ taskDirectory = Path.GetDirectoryName(typeof(LibGit2SharpLoader).Assembly.Location);
+#if NET461
+ nullVersion = new Version(0, 0, 0, 0);
+ loaderLog = new List();
+
+ AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve;
+
+ var assemblyName = typeof(LibGit2SharpLoader).Assembly.GetName();
+ assemblyName.Name = tasksAssembly;
+ Assembly = Assembly.Load(assemblyName);
+#else
+ var operationsPath = Path.Combine(taskDirectory, tasksAssembly + ".dll");
+ Assembly = GitLoaderContext.Instance.LoadFromAssemblyPath(operationsPath);
+#endif
+ }
+
+
+#if NET461
+
+ private static Version nullVersion;
+
+ private static List loaderLog;
+
+ private static void Log(ResolveEventArgs args, string outcome)
+ {
+ lock (loaderLog)
+ {
+ loaderLog.Add($"Loading '{args.Name}' referenced by '{args.RequestingAssembly}': {outcome}.");
+ }
+ }
+
+ public static string[] GetLog()
+ {
+ lock (loaderLog)
+ {
+ return loaderLog.ToArray();
+ }
+ }
+
+ private static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
+ {
+ // Limit resolution scope to minimum to affect the rest of msbuild as little as possible.
+ // Only resolve System.* assemblies from the task directory that are referenced with 0.0.0.0 version (from netstandard.dll).
+
+ var referenceName = new AssemblyName(args.Name);
+ if (!referenceName.Name.StartsWith("System.", StringComparison.OrdinalIgnoreCase))
+ {
+ Log(args, "not System");
+ return null;
+ }
+
+ if (referenceName.Version != nullVersion)
+ {
+ Log(args, "not null version");
+ return null;
+ }
+
+ var referencePath = Path.Combine(taskDirectory, referenceName.Name + ".dll");
+ if (!File.Exists(referencePath))
+ {
+ Log(args, $"file '{referencePath}' not found");
+ return null;
+ }
+
+ Log(args, $"loading from '{referencePath}'");
+ return Assembly.Load(AssemblyName.GetAssemblyName(referencePath));
+ }
+#endif
+ }
+}
diff --git a/src/GitVersion.MsBuild.Task/LibGit2Sharp/RuntimeIdMap.cs b/src/GitVersion.MsBuild.Task/LibGit2Sharp/RuntimeIdMap.cs
new file mode 100644
index 0000000000..a2a04aef3a
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/LibGit2Sharp/RuntimeIdMap.cs
@@ -0,0 +1,374 @@
+// This code originally copied from https://raw.githubusercontent.com/dotnet/sourcelink/master/src/Microsoft.Build.Tasks.Git/RuntimeIdMap.cs
+#if !NET461
+
+namespace GitVersion.MsBuild.Task.LibGit2Sharp
+{
+ using System;
+ using System.Diagnostics;
+
+ internal static class RuntimeIdMap
+ {
+ // This functionality needs to be provided as .NET Core API.
+ // Releated issues:
+ // https://github.com/dotnet/core-setup/issues/1846
+ // https://github.com/NuGet/Home/issues/5862
+
+ public static string GetNativeLibraryDirectoryName(string runtimeIdentifier)
+ {
+#if DEBUG
+ Debug.Assert(s_directories.Length == s_rids.Length);
+
+ for (int i = 1; i < s_rids.Length; i++)
+ {
+ Debug.Assert(StringComparer.Ordinal.Compare(s_rids[i - 1], s_rids[i]) < 0);
+ }
+#endif
+ int index = Array.BinarySearch(s_rids, runtimeIdentifier, StringComparer.Ordinal);
+ if (index < 0)
+ {
+ // Take the runtime id with highest version of matching OS.
+ // The runtimes in the table are currently sorted so that this works.
+
+ ParseRuntimeId(runtimeIdentifier, out var runtimeOS, out var runtimeVersion, out var runtimeQualifiers);
+
+ // find version-less rid:
+ int bestMatchIndex = -1;
+ string[] bestVersion = null;
+
+ void FindBestCandidate(int startIndex, int increment)
+ {
+ int i = startIndex;
+ while (i >= 0 && i < s_rids.Length)
+ {
+ string candidate = s_rids[i];
+ ParseRuntimeId(candidate, out var candidateOS, out var candidateVersion, out var candidateQualifiers);
+ if (candidateOS != runtimeOS)
+ {
+ break;
+ }
+
+ // Find the highest available version that is lower than or equal to the runtime version
+ // among candidates that have the same qualifiers.
+ if (candidateQualifiers == runtimeQualifiers &&
+ CompareVersions(candidateVersion, runtimeVersion) <= 0 &&
+ (bestVersion == null || CompareVersions(candidateVersion, bestVersion) > 0))
+ {
+ bestMatchIndex = i;
+ bestVersion = candidateVersion;
+ }
+
+ i += increment;
+ }
+ }
+
+ FindBestCandidate(~index - 1, -1);
+ FindBestCandidate(~index, +1);
+
+ if (bestMatchIndex < 0)
+ {
+ throw new PlatformNotSupportedException(runtimeIdentifier);
+ }
+
+ index = bestMatchIndex;
+ }
+
+ return s_directories[index];
+ }
+
+ internal static int CompareVersions(string[] left, string[] right)
+ {
+ for (int i = 0; i < Math.Max(left.Length, right.Length); i++)
+ {
+ // pad with zeros (consider "1.2" == "1.2.0")
+ var leftPart = (i < left.Length) ? left[i] : "0";
+ var rightPart = (i < right.Length) ? right[i] : "0";
+
+ int result;
+ if (!int.TryParse(leftPart, out var leftNumber) || !int.TryParse(rightPart, out var rightNumber))
+ {
+ // alphabetical order:
+ result = StringComparer.Ordinal.Compare(leftPart, rightPart);
+ }
+ else
+ {
+ // numerical order:
+ result = leftNumber.CompareTo(rightNumber);
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return 0;
+ }
+
+ internal static void ParseRuntimeId(string runtimeId, out string osName, out string[] version, out string qualifiers)
+ {
+ // We use the following convention in all newly-defined RIDs. Some RIDs (win7-x64, win8-x64) predate this convention and don't follow it, but all new RIDs should follow it.
+ // [os name].[version]-[architecture]-[additional qualifiers]
+ // See https://github.com/dotnet/corefx/blob/master/pkg/Microsoft.NETCore.Platforms/readme.md#naming-convention
+
+ int versionSeparator = runtimeId.IndexOf('.');
+ if (versionSeparator >= 0)
+ {
+ osName = runtimeId.Substring(0, versionSeparator);
+ }
+ else
+ {
+ osName = null;
+ }
+
+ int architectureSeparator = runtimeId.IndexOf('-', versionSeparator + 1);
+ if (architectureSeparator >= 0)
+ {
+ if (versionSeparator >= 0)
+ {
+ version = runtimeId.Substring(versionSeparator + 1, architectureSeparator - versionSeparator - 1).Split('.');
+ }
+ else
+ {
+ osName = runtimeId.Substring(0, architectureSeparator);
+ version = Array.Empty();
+ }
+
+ qualifiers = runtimeId.Substring(architectureSeparator + 1);
+ }
+ else
+ {
+ if (versionSeparator >= 0)
+ {
+ version = runtimeId.Substring(versionSeparator + 1).Split('.');
+ }
+ else
+ {
+ osName = runtimeId;
+ version = Array.Empty();
+ }
+
+ qualifiers = string.Empty;
+ }
+ }
+
+ // The following tables were generated by scripts/RuntimeIdMapGenerator.csx.
+ // Regenerate when upgrading LibGit2Sharp to a new version that supports more platforms.
+
+ private static readonly string[] s_rids = new[]
+ {
+ "alpine-x64",
+ "alpine.3.6-x64",
+ "alpine.3.7-x64",
+ "centos-x64",
+ "centos.7-x64",
+ "debian-x64",
+ "debian.8-x64",
+ "debian.9-x64",
+ "fedora-x64",
+ "fedora.23-x64",
+ "fedora.24-x64",
+ "fedora.25-x64",
+ "fedora.26-x64",
+ "fedora.27-x64",
+ "fedora.28-x64",
+ "fedora.29-x64",
+ "gentoo-x64",
+ "linux-musl-x64",
+ "linux-x64",
+ "linuxmint.17-x64",
+ "linuxmint.17.1-x64",
+ "linuxmint.17.2-x64",
+ "linuxmint.17.3-x64",
+ "linuxmint.18-x64",
+ "linuxmint.18.1-x64",
+ "linuxmint.18.2-x64",
+ "linuxmint.18.3-x64",
+ "linuxmint.19-x64",
+ "ol-x64",
+ "ol.7-x64",
+ "ol.7.0-x64",
+ "ol.7.1-x64",
+ "ol.7.2-x64",
+ "ol.7.3-x64",
+ "ol.7.4-x64",
+ "ol.7.5-x64",
+ "ol.7.6-x64",
+ "opensuse-x64",
+ "opensuse.13.2-x64",
+ "opensuse.15.0-x64",
+ "opensuse.42.1-x64",
+ "opensuse.42.2-x64",
+ "opensuse.42.3-x64",
+ "osx",
+ "osx-x64",
+ "osx.10.10",
+ "osx.10.10-x64",
+ "osx.10.11",
+ "osx.10.11-x64",
+ "osx.10.12",
+ "osx.10.12-x64",
+ "osx.10.13",
+ "osx.10.13-x64",
+ "osx.10.14",
+ "osx.10.14-x64",
+ "rhel-x64",
+ "rhel.6-x64",
+ "rhel.7-x64",
+ "rhel.7.0-x64",
+ "rhel.7.1-x64",
+ "rhel.7.2-x64",
+ "rhel.7.3-x64",
+ "rhel.7.4-x64",
+ "rhel.7.5-x64",
+ "rhel.7.6-x64",
+ "rhel.8-x64",
+ "rhel.8.0-x64",
+ "sles-x64",
+ "sles.12-x64",
+ "sles.12.1-x64",
+ "sles.12.2-x64",
+ "sles.12.3-x64",
+ "sles.15-x64",
+ "ubuntu-x64",
+ "ubuntu.14.04-x64",
+ "ubuntu.14.10-x64",
+ "ubuntu.15.04-x64",
+ "ubuntu.15.10-x64",
+ "ubuntu.16.04-x64",
+ "ubuntu.16.10-x64",
+ "ubuntu.17.04-x64",
+ "ubuntu.17.10-x64",
+ "ubuntu.18.04-x64",
+ "ubuntu.18.10-x64",
+ "win-x64",
+ "win-x64-aot",
+ "win-x86",
+ "win-x86-aot",
+ "win10-x64",
+ "win10-x64-aot",
+ "win10-x86",
+ "win10-x86-aot",
+ "win7-x64",
+ "win7-x64-aot",
+ "win7-x86",
+ "win7-x86-aot",
+ "win8-x64",
+ "win8-x64-aot",
+ "win8-x86",
+ "win8-x86-aot",
+ "win81-x64",
+ "win81-x64-aot",
+ "win81-x86",
+ "win81-x86-aot",
+ };
+
+ private static readonly string[] s_directories = new[]
+ {
+ "alpine-x64",
+ "alpine-x64",
+ "alpine-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "linux-x64",
+ "linux-x64",
+ "debian.9-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "fedora-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "ubuntu.18.04-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "osx",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "rhel-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "linux-x64",
+ "ubuntu.18.04-x64",
+ "linux-x64",
+ "win-x64",
+ "win-x64",
+ "win-x86",
+ "win-x86",
+ "win-x64",
+ "win-x64",
+ "win-x86",
+ "win-x86",
+ "win-x64",
+ "win-x64",
+ "win-x86",
+ "win-x86",
+ "win-x64",
+ "win-x64",
+ "win-x86",
+ "win-x86",
+ "win-x64",
+ "win-x64",
+ "win-x86",
+ "win-x86",
+ };
+ }
+}
+#endif
diff --git a/src/GitVersion.MsBuild.Task/TaskProxy.cs b/src/GitVersion.MsBuild.Task/TaskProxy.cs
new file mode 100644
index 0000000000..85fc40ad78
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/TaskProxy.cs
@@ -0,0 +1,31 @@
+namespace GitVersion.MsBuild.Task
+{
+ using System;
+ using System.Reflection;
+ using GitVersion.MsBuild.Task.LibGit2Sharp;
+
+ public static class TaskProxy
+ {
+ public static Func GetVersion;
+ public static Func GenerateGitVersionInformation;
+ public static Func UpdateAssemblyInfo;
+ public static Func WriteVersionInfoToBuildLog;
+
+ static TaskProxy()
+ {
+#if !NET461
+ GitLoaderContext.Init("GitVersionCore", "LibGit2Sharp");
+#endif
+ LibGit2SharpLoader.LoadAssembly("GitVersion.MsBuild");
+
+ var type = LibGit2SharpLoader.Instance.Assembly.GetType("GitVersion.MsBuild.GitVersionTasks", throwOnError: true).GetTypeInfo();
+
+ GetVersion = GetMethod(type, nameof(GetVersion));
+ GenerateGitVersionInformation = GetMethod(type, nameof(GenerateGitVersionInformation));
+ UpdateAssemblyInfo = GetMethod(type, nameof(UpdateAssemblyInfo));
+ WriteVersionInfoToBuildLog = GetMethod(type, nameof(WriteVersionInfoToBuildLog));
+ }
+
+ private static Func GetMethod(TypeInfo type, string name) => (Func)type.GetDeclaredMethod(name).CreateDelegate(typeof(Func));
+ }
+}
diff --git a/src/GitVersion.MsBuild.Task/UpdateAssemblyInfo.cs b/src/GitVersion.MsBuild.Task/UpdateAssemblyInfo.cs
new file mode 100644
index 0000000000..5570090df9
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/UpdateAssemblyInfo.cs
@@ -0,0 +1,24 @@
+namespace GitVersion.MsBuild.Task
+{
+ using Microsoft.Build.Framework;
+
+ public class UpdateAssemblyInfo : GitVersionTaskBase
+ {
+ [Required]
+ public string ProjectFile { get; set; }
+
+ [Required]
+ public string IntermediateOutputPath { get; set; }
+
+ [Required]
+ public ITaskItem[] CompileFiles { get; set; }
+
+ [Required]
+ public string Language { get; set; }
+
+ [Output]
+ public string AssemblyInfoTempFilePath { get; set; }
+
+ public override bool Execute() => TaskProxy.UpdateAssemblyInfo(this);
+ }
+}
diff --git a/src/GitVersion.MsBuild.Task/WriteVersionInfoToBuildLog.cs b/src/GitVersion.MsBuild.Task/WriteVersionInfoToBuildLog.cs
new file mode 100644
index 0000000000..7694f1e653
--- /dev/null
+++ b/src/GitVersion.MsBuild.Task/WriteVersionInfoToBuildLog.cs
@@ -0,0 +1,7 @@
+namespace GitVersion.MsBuild.Task
+{
+ public class WriteVersionInfoToBuildLog : GitVersionTaskBase
+ {
+ public override bool Execute() => TaskProxy.WriteVersionInfoToBuildLog(this);
+ }
+}
diff --git a/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj b/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj
new file mode 100644
index 0000000000..5f647191ef
--- /dev/null
+++ b/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj
@@ -0,0 +1,25 @@
+
+
+
+ net461;netcoreapp2.1
+
+ true
+
+ GitVersion.MsBuild.nuspec
+ bin\$(Configuration)
+ 0.0.1-alpha-0001
+ version=$(PackageVersion)
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/GitVersion.MsBuild/GitVersion.MsBuild.nuspec b/src/GitVersion.MsBuild/GitVersion.MsBuild.nuspec
new file mode 100644
index 0000000000..e12ce84bf9
--- /dev/null
+++ b/src/GitVersion.MsBuild/GitVersion.MsBuild.nuspec
@@ -0,0 +1,45 @@
+
+
+
+ GitVersion.MsBuild
+ 1.0.0
+ GitVersion.MsBuild
+ GitTools and Contributors
+ GitTools and Contributors
+ false
+ true
+ MIT
+ https://github.com/GitTools/GitVersion
+ https://raw.githubusercontent.com/GitTools/GitVersion/master/docs/img/package_icon.png
+ Stamps an assembly with git information based on SemVer.
+ https://github.com/GitTools/GitVersion/releases
+ Copyright GitTools 2019.
+ Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/GitVersion.MsBuild/GitVersionTasks.cs b/src/GitVersion.MsBuild/GitVersionTasks.cs
new file mode 100644
index 0000000000..5e227290fa
--- /dev/null
+++ b/src/GitVersion.MsBuild/GitVersionTasks.cs
@@ -0,0 +1,155 @@
+namespace GitVersion.MsBuild
+{
+ using System;
+ using System.IO;
+ using GitVersion;
+ using GitVersion.Helpers;
+ using GitVersion.MsBuild.Task;
+ using Microsoft.Build.Framework;
+
+ public static class GitVersionTasks
+ {
+ public static ExecuteCore ExecuteCore { get; }
+
+ static GitVersionTasks()
+ {
+ var fileSystem = new FileSystem();
+ ExecuteCore = new ExecuteCore(fileSystem);
+ }
+
+ public static bool GetVersion(GetVersion task)
+ {
+ return Execute(task, t =>
+ {
+ if (!GetVersionVariables(task, out var versionVariables)) return;
+
+ var thisType = typeof(GetVersion);
+ foreach (var variable in versionVariables)
+ {
+ thisType.GetProperty(variable.Key)?.SetValue(task, variable.Value, null);
+ }
+ });
+ }
+
+ public static bool GenerateGitVersionInformation(GenerateGitVersionInformation task)
+ {
+ return Execute(task, t =>
+ {
+ if (!GetVersionVariables(task, out var versionVariables)) return;
+
+ var fileExtension = GetFileExtension(task.Language);
+ var fileName = $"GitVersionInformation.g.{fileExtension}";
+
+ if (task.IntermediateOutputPath == null)
+ {
+ fileName = $"GitVersionInformation_{Path.GetFileNameWithoutExtension(task.ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
+ }
+
+ var workingDirectory = task.IntermediateOutputPath ?? TempFileTracker.TempPath;
+
+ task.GitVersionInformationFilePath = Path.Combine(workingDirectory, fileName);
+
+ var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem());
+ generator.Generate();
+ });
+ }
+
+ public static bool UpdateAssemblyInfo(UpdateAssemblyInfo task)
+ {
+ return Execute(task, t =>
+ {
+ TempFileTracker.DeleteTempFiles();
+ InvalidFileChecker.CheckForInvalidFiles(task.CompileFiles, task.ProjectFile);
+
+ if (!GetVersionVariables(task, out var versionVariables)) return;
+
+ var fileExtension = GetFileExtension(task.Language);
+ var assemblyInfoFileName = $"GitVersionTaskAssemblyInfo.g.{fileExtension}";
+
+ if (task.IntermediateOutputPath == null)
+ {
+ assemblyInfoFileName = $"AssemblyInfo_{Path.GetFileNameWithoutExtension(task.ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
+ }
+
+ var workingDirectory = task.IntermediateOutputPath ?? TempFileTracker.TempPath;
+
+ task.AssemblyInfoTempFilePath = Path.Combine(workingDirectory, assemblyInfoFileName);
+
+ using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFileName, workingDirectory, versionVariables, new FileSystem(), true))
+ {
+ assemblyInfoFileUpdater.Update();
+ assemblyInfoFileUpdater.CommitChanges();
+ }
+ });
+ }
+
+ public static bool WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task)
+ {
+ return Execute(task, t =>
+ {
+ if (!GetVersionVariables(task, out var versionVariables)) return;
+ var log = task.Log;
+
+ foreach (var buildServer in BuildServerList.GetApplicableBuildServers())
+ {
+ log.LogMessage($"Executing GenerateSetVersionMessage for '{buildServer.GetType().Name}'.");
+ log.LogMessage(buildServer.GenerateSetVersionMessage(versionVariables));
+ log.LogMessage($"Executing GenerateBuildLogOutput for '{buildServer.GetType().Name}'.");
+ foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables))
+ {
+ log.LogMessage(buildParameter);
+ }
+ }
+ });
+ }
+
+ private static bool Execute(T task, Action action)
+ where T : GitVersionTaskBase
+ {
+ void LogDebug(string message) => task.Log.LogMessage(MessageImportance.Low, message);
+ void LogInfo(string message) => task.Log.LogMessage(MessageImportance.Normal, message);
+ void LogWarning(string message) => task.Log.LogWarning(message);
+ void LogError(string message) => task.Log.LogError(message);
+
+ Logger.SetLoggers(LogDebug, LogInfo, LogWarning, LogError);
+ var log = task.Log;
+ try
+ {
+ action(task);
+ }
+ catch (WarningException errorException)
+ {
+ log.LogWarningFromException(errorException);
+ return true;
+ }
+ catch (Exception exception)
+ {
+ log.LogErrorFromException(exception);
+ return false;
+ }
+
+ return !log.HasLoggedErrors;
+ }
+
+ private static bool GetVersionVariables(GitVersionTaskBase task, out VersionVariables versionVariables)
+ => ExecuteCore.TryGetVersion(task.SolutionDirectory, out versionVariables, task.NoFetch, new Authentication());
+
+ private static string GetFileExtension(string language)
+ {
+ switch(language)
+ {
+ case "C#":
+ return "cs";
+
+ case "F#":
+ return "fs";
+
+ case "VB":
+ return "vb";
+
+ default:
+ throw new Exception($"Unknown language detected: '{language}'");
+ }
+ }
+ }
+}
diff --git a/src/GitVersion.MsBuild/InvalidFileChecker.cs b/src/GitVersion.MsBuild/InvalidFileChecker.cs
new file mode 100644
index 0000000000..b625e42ebf
--- /dev/null
+++ b/src/GitVersion.MsBuild/InvalidFileChecker.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using Microsoft.Build.Framework;
+
+namespace GitVersion.MsBuild
+{
+ public static class InvalidFileChecker
+ {
+ private static readonly Dictionary> versionAttributeFinders = new Dictionary>()
+ {
+ { ".cs", CSharpFileContainsVersionAttribute },
+ { ".vb", VisualBasicFileContainsVersionAttribute }
+ };
+
+ public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile)
+ {
+ foreach (var compileFile in GetInvalidFiles(compileFiles, projectFile))
+ {
+ throw new WarningException("File contains assembly version attributes which conflict with the attributes generated by GitVersion " + compileFile);
+ }
+ }
+
+ static bool FileContainsVersionAttribute(string compileFile, string projectFile)
+ {
+ Func languageSpecificFileContainsVersionAttribute;
+
+ var compileFileExtension = Path.GetExtension(compileFile);
+
+ if (versionAttributeFinders.TryGetValue(compileFileExtension, out languageSpecificFileContainsVersionAttribute))
+ {
+ return languageSpecificFileContainsVersionAttribute(compileFile, projectFile);
+ }
+
+ throw new WarningException("File with name containing AssemblyInfo could not be checked for assembly version attributes which conflict with the attributes generated by GitVersion " + compileFile);
+ }
+
+ static bool CSharpFileContainsVersionAttribute(string compileFile, string projectFile)
+ {
+ var combine = Path.Combine(Path.GetDirectoryName(projectFile), compileFile);
+ var allText = File.ReadAllText(combine);
+
+ var blockComments = @"/\*(.*?)\*/";
+ var lineComments = @"//(.*?)\r?\n";
+ var strings = @"""((\\[^\n]|[^""\n])*)""";
+ var verbatimStrings = @"@(""[^""]*"")+";
+
+ var noCommentsOrStrings = Regex.Replace(allText,
+ blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings,
+ me =>
+ {
+ if (me.Value.StartsWith("//"))
+ return Environment.NewLine;
+
+ return "";
+ },
+ RegexOptions.Singleline);
+
+ return Regex.IsMatch(noCommentsOrStrings, @"(?x) # IgnorePatternWhitespace
+
+\[\s*assembly\s*:\s* # The [assembly: part
+
+(System\s*\.\s*Reflection\s*\.\s*)? # The System.Reflection. part (optional)
+
+Assembly(File|Informational)?Version # The attribute AssemblyVersion, AssemblyFileVersion, or AssemblyInformationalVersion
+
+\s*\(\s*\)\s*\] # End brackets ()]");
+ }
+
+ static bool VisualBasicFileContainsVersionAttribute(string compileFile, string projectFile)
+ {
+ var combine = Path.Combine(Path.GetDirectoryName(projectFile), compileFile);
+ var allText = File.ReadAllText(combine);
+
+ var lineComments = @"'(.*?)\r?\n";
+ var strings = @"""((\\[^\n]|[^""\n])*)""";
+
+ var noCommentsOrStrings = Regex.Replace(allText,
+ lineComments + "|" + strings,
+ me =>
+ {
+ if (me.Value.StartsWith("'"))
+ return Environment.NewLine;
+
+ return "";
+ },
+ RegexOptions.Singleline);
+
+ return Regex.IsMatch(noCommentsOrStrings, @"(?x) # IgnorePatternWhitespace
+
+\<\s*Assembly\s*:\s* # The # End brackets ()>");
+ }
+
+ static IEnumerable GetInvalidFiles(IEnumerable compileFiles, string projectFile)
+ {
+ return compileFiles.Select(x => x.ItemSpec)
+ .Where(compileFile => compileFile.Contains("AssemblyInfo"))
+ .Where(s => FileContainsVersionAttribute(s, projectFile));
+ }
+ }
+}
diff --git a/src/GitVersion.MsBuild/TempFileTracker.cs b/src/GitVersion.MsBuild/TempFileTracker.cs
new file mode 100644
index 0000000000..6c36e16ee8
--- /dev/null
+++ b/src/GitVersion.MsBuild/TempFileTracker.cs
@@ -0,0 +1,40 @@
+using System;
+using System.IO;
+
+namespace GitVersion.MsBuild
+{
+ public static class TempFileTracker
+ {
+ public static string TempPath;
+
+ static TempFileTracker()
+ {
+ TempPath = Path.Combine(Path.GetTempPath(), "GitVersionTask");
+ Directory.CreateDirectory(TempPath);
+ }
+
+ public static void DeleteTempFiles()
+ {
+ if (!Directory.Exists(TempPath))
+ {
+ return;
+ }
+
+ foreach (var file in Directory.GetFiles(TempPath))
+ {
+ if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-1))
+ {
+ try
+ {
+ File.Delete(file);
+ }
+ catch (UnauthorizedAccessException)
+ {
+ //ignore contention
+ }
+ }
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/GitVersion.MsBuild/build/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/build/GitVersion.MsBuild.props
new file mode 100644
index 0000000000..cc3fd505bf
--- /dev/null
+++ b/src/GitVersion.MsBuild/build/GitVersion.MsBuild.props
@@ -0,0 +1,37 @@
+
+
+
+ $(MSBuildThisFileDirectory)..\tools\net461\GitVersion.MsBuild.Task.dll
+ $(MSBuildThisFileDirectory)..\tools\netstandard2.0\GitVersion.MsBuild.Task.dll
+
+ $(MSBuildProjectDirectory)\..\
+ $(SolutionDir)
+ $(MSBuildProjectDirectory)
+
+ false
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+ true
+
+ $(MarkupCompilePass1DependsOn);GetVersion
+ $(GetPackageVersionDependsOn);GetVersion
+
+
+ true
+ false
+
+
diff --git a/src/GitVersion.MsBuild/build/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/build/GitVersion.MsBuild.targets
new file mode 100644
index 0000000000..d87cdc622e
--- /dev/null
+++ b/src/GitVersion.MsBuild/build/GitVersion.MsBuild.targets
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(GitVersion_FullSemVer)
+ $(GitVersion_MajorMinorPatch)
+ $(GitVersion_NuGetPreReleaseTag)
+ $(GitVersion_PreReleaseTag)
+ $(GitVersion_NuGetVersion)
+ $(GitVersion_FullSemVer)
+ $(GitVersion_InformationalVersion)
+ $(GitVersion_AssemblySemVer)
+ $(GitVersion_AssemblySemFileVer)
+
+
+
+ GitVersion_Major=$(GitVersion_Major);$(DefineConstants)
+ GitVersion_Minor=$(GitVersion_Minor);$(DefineConstants)
+ GitVersion_Patch=$(GitVersion_Patch);$(DefineConstants)
+ GitVersion_PreReleaseTag=$(GitVersion_PreReleaseTag);$(DefineConstants)
+ GitVersion_PreReleaseTagWithDash=$(GitVersion_PreReleaseTagWithDash);$(DefineConstants)
+ GitVersion_PreReleaseLabel=$(GitVersion_PreReleaseLabel);$(DefineConstants)
+ GitVersion_PreReleaseNumber=$(GitVersion_PreReleaseNumber);$(DefineConstants)
+ GitVersion_BuildMetaData=$(GitVersion_BuildMetaData);$(DefineConstants)
+ GitVersion_BuildMetaDataPadded=$(GitVersion_BuildMetaDataPadded);$(DefineConstants)
+ GitVersion_FullBuildMetaData=$(GitVersion_FullBuildMetaData);$(DefineConstants)
+ GitVersion_MajorMinorPatch=$(GitVersion_MajorMinorPatch);$(DefineConstants)
+ GitVersion_SemVer=$(GitVersion_SemVer);$(DefineConstants)
+ GitVersion_LegacySemVer=$(GitVersion_LegacySemVer);$(DefineConstants)
+ GitVersion_LegacySemVerPadded=$(GitVersion_LegacySemVerPadded);$(DefineConstants)
+ GitVersion_AssemblySemVer=$(GitVersion_AssemblySemVer);$(DefineConstants)
+ GitVersion_AssemblySemFileVer=$(GitVersion_AssemblySemFileVer);$(DefineConstants)
+ GitVersion_FullSemVer=$(GitVersion_FullSemVer);$(DefineConstants)
+ GitVersion_InformationalVersion=$(GitVersion_InformationalVersion);$(DefineConstants)
+ GitVersion_BranchName=$(GitVersion_BranchName);$(DefineConstants)
+ GitVersion_Sha=$(GitVersion_Sha);$(DefineConstants)
+ GitVersion_NuGetVersionV2=$(GitVersion_NuGetVersionV2);$(DefineConstants)
+ GitVersion_NuGetVersion=$(GitVersion_NuGetVersion);$(DefineConstants)
+ GitVersion_NuGetPreReleaseTagV2=$(GitVersion_NuGetPreReleaseTagV2);$(DefineConstants)
+ GitVersion_NuGetPreReleaseTag=$(GitVersion_NuGetPreReleaseTag);$(DefineConstants)
+ GitVersion_CommitDate=$(GitVersion_CommitDate);$(DefineConstants)
+ GitVersion_CommitsSinceVersionSource=$(GitVersion_CommitsSinceVersionSource);$(DefineConstants)
+ GitVersion_CommitsSinceVersionSourcePadded=$(GitVersion_CommitsSinceVersionSourcePadded);$(DefineConstants)
+
+
+
+
+
diff --git a/src/GitVersion.MsBuild/buildMultiTargeting/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/buildMultiTargeting/GitVersion.MsBuild.props
new file mode 100644
index 0000000000..38b3a09ab9
--- /dev/null
+++ b/src/GitVersion.MsBuild/buildMultiTargeting/GitVersion.MsBuild.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/GitVersion.MsBuild/buildMultiTargeting/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/buildMultiTargeting/GitVersion.MsBuild.targets
new file mode 100644
index 0000000000..a31cac6368
--- /dev/null
+++ b/src/GitVersion.MsBuild/buildMultiTargeting/GitVersion.MsBuild.targets
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ UpdateAssemblyInfo
+
+
+
+
+
+
+ GenerateGitVersionInformation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(GitVersion_FullSemVer)
+ $(GitVersion_MajorMinorPatch)
+ $(GitVersion_NuGetPreReleaseTag)
+ $(GitVersion_PreReleaseTag)
+ $(GitVersion_NuGetVersion)
+ $(GitVersion_FullSemVer)
+ $(GitVersion_InformationalVersion)
+ $(GitVersion_AssemblySemVer)
+ $(GitVersion_AssemblySemFileVer)
+
+
+
+
diff --git a/src/GitVersionTask/key.snk b/src/GitVersion.MsBuild/key.snk
similarity index 100%
rename from src/GitVersionTask/key.snk
rename to src/GitVersion.MsBuild/key.snk
diff --git a/src/GitVersion.sln b/src/GitVersion.sln
index 905eca67b7..f0a34dfc67 100644
--- a/src/GitVersion.sln
+++ b/src/GitVersion.sln
@@ -2,12 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28714.193
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionExe", "GitVersionExe\GitVersionExe.csproj", "{C3578A7B-09A6-4444-9383-0DEAFA4958BD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionTask.Tests", "GitVersionTask.Tests\GitVersionTask.Tests.csproj", "{5A86453B-96FB-4B6E-A283-225BB9F753D3}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionCore.Tests", "GitVersionCore.Tests\GitVersionCore.Tests.csproj", "{BF905F84-382C-440D-92F5-C61108626D8D}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3EFFC5D6-88D0-49D9-BB53-E1B7EB49DD45}"
ProjectSection(SolutionItems) = preProject
..\.gitattributes = ..\.gitattributes
@@ -26,14 +20,22 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
..\README.md = ..\README.md
EndProjectSection
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionExe", "GitVersionExe\GitVersionExe.csproj", "{C3578A7B-09A6-4444-9383-0DEAFA4958BD}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionCore.Tests", "GitVersionCore.Tests\GitVersionCore.Tests.csproj", "{BF905F84-382C-440D-92F5-C61108626D8D}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionCore", "GitVersionCore\GitVersionCore.csproj", "{F9741A0D-B9D7-4557-9A1C-A7252C1071F5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionExe.Tests", "GitVersionExe.Tests\GitVersionExe.Tests.csproj", "{75C2BE85-1DAF-4E34-8305-B17AFAA982A6}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersionTask", "GitVersionTask\GitVersionTask.csproj", "{F7AC0E71-3E9A-4F6D-B986-E004825A48E1}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Tool", "GitVersionExe\GitVersion.Tool.csproj", "{929263FD-5CD2-42E1-BF3D-E0C1B0320DA4}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.MsBuild", "GitVersion.MsBuild\GitVersion.MsBuild.csproj", "{F7AC0E71-3E9A-4F6D-B986-E004825A48E1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.MsBuild.Task", "GitVersion.MsBuild.Task\GitVersion.MsBuild.Task.csproj", "{F34414D6-903D-45FB-8F56-4F11A4DB41F1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.MsBuild.Task.Tests", "GitVersion.MsBuild.Task.Tests\GitVersion.MsBuild.Task.Tests.csproj", "{5A86453B-96FB-4B6E-A283-225BB9F753D3}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -68,6 +70,10 @@ Global
{929263FD-5CD2-42E1-BF3D-E0C1B0320DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{929263FD-5CD2-42E1-BF3D-E0C1B0320DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{929263FD-5CD2-42E1-BF3D-E0C1B0320DA4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F34414D6-903D-45FB-8F56-4F11A4DB41F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F34414D6-903D-45FB-8F56-4F11A4DB41F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F34414D6-903D-45FB-8F56-4F11A4DB41F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F34414D6-903D-45FB-8F56-4F11A4DB41F1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/GitVersionCore.Tests/Mocks/MockRepository.cs b/src/GitVersionCore.Tests/Mocks/MockRepository.cs
index 33e8709a4d..4bd39d65a8 100644
--- a/src/GitVersionCore.Tests/Mocks/MockRepository.cs
+++ b/src/GitVersionCore.Tests/Mocks/MockRepository.cs
@@ -225,6 +225,7 @@ public IQueryableCommitLog Commits
public ObjectDatabase ObjectDatabase { get; set; }
public NoteCollection Notes { get; set; }
public SubmoduleCollection Submodules { get; set; }
+ public WorktreeCollection Worktrees { get; set; }
public Rebase Rebase { get; private set; }
public Ignore Ignore
diff --git a/src/GitVersionCore/GitVersionCore.csproj b/src/GitVersionCore/GitVersionCore.csproj
index 2352f4f36b..331e4bf8df 100644
--- a/src/GitVersionCore/GitVersionCore.csproj
+++ b/src/GitVersionCore/GitVersionCore.csproj
@@ -19,8 +19,7 @@
-
-
+
diff --git a/src/GitVersionTask.Tests/GitVersionTask.Tests.v2.ncrunchproject b/src/GitVersionTask.Tests/GitVersionTask.Tests.v2.ncrunchproject
deleted file mode 100644
index a26995ad88..0000000000
--- a/src/GitVersionTask.Tests/GitVersionTask.Tests.v2.ncrunchproject
+++ /dev/null
@@ -1,32 +0,0 @@
-
- true
- 1000
- true
- false
- false
- true
- false
- false
- false
- false
- true
- true
- true
- false
- true
- true
- true
- 60000
-
-
-
- AutoDetect
- STA
- x86
-
-
- IntegrationTests
-
-
- PostBuildEventDisabled;CopyReferencedAssembliesToWorkspaceIsOn
-
\ No newline at end of file
diff --git a/src/GitVersionTask.Tests/Tests.v2.ncrunchproject b/src/GitVersionTask.Tests/Tests.v2.ncrunchproject
deleted file mode 100644
index 0646644b82..0000000000
--- a/src/GitVersionTask.Tests/Tests.v2.ncrunchproject
+++ /dev/null
@@ -1,26 +0,0 @@
-
- true
- false
- false
- true
- false
- false
- false
- true
- true
- true
- true
- false
- true
- true
- true
- 60000
-
-
-
- AutoDetect
- STA
- x86
- Resources\**.*;..\Packages\LibGit2Sharp.0.17.0.0\lib\net35\NativeBinaries\**.*
- CopyReferencedAssembliesToWorkspaceIsOn
-
\ No newline at end of file
diff --git a/src/GitVersionTask/GenerateGitVersionInformation.cs b/src/GitVersionTask/GenerateGitVersionInformation.cs
deleted file mode 100644
index 6cb61e7034..0000000000
--- a/src/GitVersionTask/GenerateGitVersionInformation.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-namespace GitVersionTask
-{
- using System.IO;
- using GitVersion;
- using GitVersion.Helpers;
- using Microsoft.Build.Framework;
-
- public class GenerateGitVersionInformation : GitVersionTaskBase
- {
- [Required]
- public string ProjectFile { get; set; }
-
- [Required]
- public string IntermediateOutputPath { get; set; }
-
- [Required]
- public string Language { get; set; }
-
- [Output]
- public string GitVersionInformationFilePath { get; set; }
-
- protected override void InnerExecute()
- {
- if (GetVersionVariables(out var versionVariables)) return;
-
- var fileExtension = TaskUtils.GetFileExtension(Language);
- var fileName = $"GitVersionInformation.g.{fileExtension}";
-
- if (IntermediateOutputPath == null)
- {
- fileName = $"GitVersionInformation_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
- }
-
- var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath;
-
- GitVersionInformationFilePath = Path.Combine(workingDirectory, fileName);
-
- var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem());
- generator.Generate();
- }
- }
-}
diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj
deleted file mode 100644
index 4aa0a34c77..0000000000
--- a/src/GitVersionTask/GitVersionTask.csproj
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
- net461;netstandard2.0
- false
-
- GitVersionTask
- GitVersionTask
-
- Stamps an assembly with git information based on SemVer.
-
- true
- build
-
- NugetAssets\GitVersionTask.nuspec
- 0.0.1-alpha-0001
- version=$(PackageVersion);configuration=$(Configuration);utilpackversion=$(PackageVersion_UtilPackNuGetMSBuild);libgit2sharpversion=$(PackageVersion_LibGit2Sharp);yamldotnetversion=$(PackageVersion_YamlDotNet)
-
- $(AssemblyName)
-
-
-
-
-
-
-
- build\
-
-
-
-
-
-
- All
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/GitVersionTask/GitVersionTask.v2.ncrunchproject b/src/GitVersionTask/GitVersionTask.v2.ncrunchproject
deleted file mode 100644
index fb541bb0b4..0000000000
--- a/src/GitVersionTask/GitVersionTask.v2.ncrunchproject
+++ /dev/null
@@ -1,26 +0,0 @@
-
- 1000
- false
- false
- false
- true
- false
- false
- false
- false
- false
- true
- true
- false
- true
- true
- true
- 60000
-
-
-
- AutoDetect
- STA
- x86
- CopyReferencedAssembliesToWorkspaceIsOn;PostBuildEventDisabled
-
\ No newline at end of file
diff --git a/src/GitVersionTask/GitVersionTaskBase.cs b/src/GitVersionTask/GitVersionTaskBase.cs
deleted file mode 100644
index 37805297b5..0000000000
--- a/src/GitVersionTask/GitVersionTaskBase.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-namespace GitVersionTask
-{
- using System;
- using GitVersion;
- using GitVersion.Helpers;
-
- using Microsoft.Build.Framework;
- using Microsoft.Build.Utilities;
-
- public abstract class GitVersionTaskBase : Task
- {
- protected GitVersionTaskBase()
- {
- var fileSystem = new FileSystem();
- ExecuteCore = new ExecuteCore(fileSystem);
- GitVersion.Logger.SetLoggers(LogDebug, LogInfo, LogWarning, s => LogError(s));
- }
-
- public override bool Execute()
- {
- try
- {
- InnerExecute();
- return true;
- }
- catch (WarningException errorException)
- {
- LogWarning(errorException.Message);
- return true;
- }
- catch (Exception exception)
- {
- LogError("Error occurred: " + exception);
- return false;
- }
- }
-
- protected abstract void InnerExecute();
-
- protected ExecuteCore ExecuteCore { get; }
-
- [Required]
- public string SolutionDirectory { get; set; }
-
- public bool NoFetch { get; set; }
-
- public void LogDebug(string message)
- {
- BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Low));
- }
-
- public void LogWarning(string message)
- {
- BuildEngine.LogWarningEvent(new BuildWarningEventArgs(string.Empty, string.Empty, null, 0, 0, 0, 0, message, string.Empty, "GitVersionTask"));
- }
-
- public void LogInfo(string message)
- {
- BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Normal));
- }
-
- public void LogError(string message, string file = null)
- {
- BuildEngine.LogErrorEvent(new BuildErrorEventArgs(string.Empty, string.Empty, file, 0, 0, 0, 0, message, string.Empty, "GitVersionTask"));
- }
-
- protected bool GetVersionVariables(out VersionVariables versionVariables)
- {
- return !ExecuteCore.TryGetVersion(SolutionDirectory, out versionVariables, NoFetch, new Authentication());
- }
- }
-}
diff --git a/src/GitVersionTask/InvalidFileChecker.cs b/src/GitVersionTask/InvalidFileChecker.cs
deleted file mode 100644
index d20be03e56..0000000000
--- a/src/GitVersionTask/InvalidFileChecker.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text.RegularExpressions;
-using GitVersion;
-using Microsoft.Build.Framework;
-
-public static class InvalidFileChecker
-{
- private static readonly Dictionary> versionAttributeFinders = new Dictionary>()
- {
- { ".cs", CSharpFileContainsVersionAttribute },
- { ".vb", VisualBasicFileContainsVersionAttribute }
- };
-
- public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile)
- {
- foreach (var compileFile in GetInvalidFiles(compileFiles, projectFile))
- {
- throw new WarningException("File contains assembly version attributes which conflict with the attributes generated by GitVersion " + compileFile);
- }
- }
-
- static bool FileContainsVersionAttribute(string compileFile, string projectFile)
- {
- Func languageSpecificFileContainsVersionAttribute;
-
- var compileFileExtension = Path.GetExtension(compileFile);
-
- if (versionAttributeFinders.TryGetValue(compileFileExtension, out languageSpecificFileContainsVersionAttribute))
- {
- return languageSpecificFileContainsVersionAttribute(compileFile, projectFile);
- }
-
- throw new WarningException("File with name containing AssemblyInfo could not be checked for assembly version attributes which conflict with the attributes generated by GitVersion " + compileFile);
- }
-
- static bool CSharpFileContainsVersionAttribute(string compileFile, string projectFile)
- {
- var combine = Path.Combine(Path.GetDirectoryName(projectFile), compileFile);
- var allText = File.ReadAllText(combine);
-
- var blockComments = @"/\*(.*?)\*/";
- var lineComments = @"//(.*?)\r?\n";
- var strings = @"""((\\[^\n]|[^""\n])*)""";
- var verbatimStrings = @"@(""[^""]*"")+";
-
- var noCommentsOrStrings = Regex.Replace(allText,
- blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings,
- me =>
- {
- if (me.Value.StartsWith("//"))
- return Environment.NewLine;
-
- return "";
- },
- RegexOptions.Singleline);
-
- return Regex.IsMatch(noCommentsOrStrings, @"(?x) # IgnorePatternWhitespace
-
-\[\s*assembly\s*:\s* # The [assembly: part
-
-(System\s*\.\s*Reflection\s*\.\s*)? # The System.Reflection. part (optional)
-
-Assembly(File|Informational)?Version # The attribute AssemblyVersion, AssemblyFileVersion, or AssemblyInformationalVersion
-
-\s*\(\s*\)\s*\] # End brackets ()]");
- }
-
- static bool VisualBasicFileContainsVersionAttribute(string compileFile, string projectFile)
- {
- var combine = Path.Combine(Path.GetDirectoryName(projectFile), compileFile);
- var allText = File.ReadAllText(combine);
-
- var lineComments = @"'(.*?)\r?\n";
- var strings = @"""((\\[^\n]|[^""\n])*)""";
-
- var noCommentsOrStrings = Regex.Replace(allText,
- lineComments + "|" + strings,
- me =>
- {
- if (me.Value.StartsWith("'"))
- return Environment.NewLine;
-
- return "";
- },
- RegexOptions.Singleline);
-
- return Regex.IsMatch(noCommentsOrStrings, @"(?x) # IgnorePatternWhitespace
-
-\<\s*Assembly\s*:\s* # The # End brackets ()>");
- }
-
- static IEnumerable GetInvalidFiles(IEnumerable compileFiles, string projectFile)
- {
- return compileFiles.Select(x => x.ItemSpec)
- .Where(compileFile => compileFile.Contains("AssemblyInfo"))
- .Where(s => FileContainsVersionAttribute(s, projectFile));
- }
-}
diff --git a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec b/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec
deleted file mode 100644
index b3436fdce8..0000000000
--- a/src/GitVersionTask/NugetAssets/GitVersionTask.nuspec
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
- GitVersionTask
- 1.0.0
- GitVersionTask
- GitTools and Contributors
- GitTools and Contributors
- false
- true
- MIT
- https://github.com/GitTools/GitVersion
- https://raw.githubusercontent.com/GitTools/GitVersion/master/docs/img/package_icon.png
- Stamps an assembly with git information based on SemVer.
- https://github.com/GitTools/GitVersion/releases
- Copyright GitTools 2019.
- Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets b/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets
deleted file mode 100644
index d816d04563..0000000000
--- a/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- false
- true
-
-
-
-
-
-
-
-
diff --git a/src/GitVersionTask/NugetAssets/build/Infrastructure.props b/src/GitVersionTask/NugetAssets/build/Infrastructure.props
deleted file mode 100644
index e5ff8092e1..0000000000
--- a/src/GitVersionTask/NugetAssets/build/Infrastructure.props
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
- $(MSBuildThisFileDirectory)functionality/
- $(GitVersionTaskBuildTools_FunctionalityDir)GitVersionBuild.targets
- $(GitVersionTaskBuildTools_FunctionalityDir)GitVersionMultiTargetBuild.targets
- $(GitVersionTaskBuildTools_FunctionalityDir)obj/
-
-
-
- $(PackageVersion_UtilPackNuGetMSBuild)
- $(MSBuildThisFileDirectory)../../../utilpack.nuget.msbuild/$(UtilPackVersion)/build/UtilPack.NuGet.MSBuild.props
- $([System.IO.Path]::GetFullPath('$(UtilPackNuGetMSBuildPropsPath)'))
-
-
-
-
-
- true
-
-
-
-
- .NETFramework
- 4.6.1
-
-
- $(UtilPackTaskFactoryParametersXML)
- true
- GitVersionTask.dll
-
-
-
-
-
-
-
-
-
-
diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets
deleted file mode 100644
index ff6c8923cf..0000000000
--- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionBuild.targets
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(GitVersion_FullSemVer)
- $(GitVersion_MajorMinorPatch)
- $(GitVersion_NuGetPreReleaseTag)
- $(GitVersion_PreReleaseTag)
- $(GitVersion_NuGetVersion)
- $(GitVersion_FullSemVer)
- $(GitVersion_InformationalVersion)
- $(GitVersion_AssemblySemVer)
- $(GitVersion_AssemblySemFileVer)
-
-
-
- GitVersion_Major=$(GitVersion_Major);$(DefineConstants)
- GitVersion_Minor=$(GitVersion_Minor);$(DefineConstants)
- GitVersion_Patch=$(GitVersion_Patch);$(DefineConstants)
- GitVersion_PreReleaseTag=$(GitVersion_PreReleaseTag);$(DefineConstants)
- GitVersion_PreReleaseTagWithDash=$(GitVersion_PreReleaseTagWithDash);$(DefineConstants)
- GitVersion_PreReleaseLabel=$(GitVersion_PreReleaseLabel);$(DefineConstants)
- GitVersion_PreReleaseNumber=$(GitVersion_PreReleaseNumber);$(DefineConstants)
- GitVersion_BuildMetaData=$(GitVersion_BuildMetaData);$(DefineConstants)
- GitVersion_BuildMetaDataPadded=$(GitVersion_BuildMetaDataPadded);$(DefineConstants)
- GitVersion_FullBuildMetaData=$(GitVersion_FullBuildMetaData);$(DefineConstants)
- GitVersion_MajorMinorPatch=$(GitVersion_MajorMinorPatch);$(DefineConstants)
- GitVersion_SemVer=$(GitVersion_SemVer);$(DefineConstants)
- GitVersion_LegacySemVer=$(GitVersion_LegacySemVer);$(DefineConstants)
- GitVersion_LegacySemVerPadded=$(GitVersion_LegacySemVerPadded);$(DefineConstants)
- GitVersion_AssemblySemVer=$(GitVersion_AssemblySemVer);$(DefineConstants)
- GitVersion_AssemblySemFileVer=$(GitVersion_AssemblySemFileVer);$(DefineConstants)
- GitVersion_FullSemVer=$(GitVersion_FullSemVer);$(DefineConstants)
- GitVersion_InformationalVersion=$(GitVersion_InformationalVersion);$(DefineConstants)
- GitVersion_BranchName=$(GitVersion_BranchName);$(DefineConstants)
- GitVersion_Sha=$(GitVersion_Sha);$(DefineConstants)
- GitVersion_NuGetVersionV2=$(GitVersion_NuGetVersionV2);$(DefineConstants)
- GitVersion_NuGetVersion=$(GitVersion_NuGetVersion);$(DefineConstants)
- GitVersion_NuGetPreReleaseTagV2=$(GitVersion_NuGetPreReleaseTagV2);$(DefineConstants)
- GitVersion_NuGetPreReleaseTag=$(GitVersion_NuGetPreReleaseTag);$(DefineConstants)
- GitVersion_CommitDate=$(GitVersion_CommitDate);$(DefineConstants)
- GitVersion_CommitsSinceVersionSource=$(GitVersion_CommitsSinceVersionSource);$(DefineConstants)
- GitVersion_CommitsSinceVersionSourcePadded=$(GitVersion_CommitsSinceVersionSourcePadded);$(DefineConstants)
-
-
-
-
-
-
-
- False
-
-
- False
-
-
- False
-
-
-
-
diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props
deleted file mode 100644
index ebf736a940..0000000000
--- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionCommon.props
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
- $(MSBuildProjectDirectory)\..\
- $(SolutionDir)
- $(MSBuildProjectDirectory)
- $(SolutionDir)\GitVersionTask.targets
- $(SolutionDir)\GitVersionTask.targets
-
- false
- $(MSBuildProjectDirectory)\obj\$(Configuration)\
-
-
- false
- true
-
-
- false
- false
- true
-
-
- false
- true
-
- false
- true
-
- false
- true
-
-
- $(MarkupCompilePass1DependsOn);GetVersion
-
- $(GetPackageVersionDependsOn);GetVersion
-
-
- true
- false
-
-
-
-
- $(UtilPackTaskFactoryParametersXML)
-
-
-
-
- $(UtilPackTaskFactoryParametersXML)
-
-
-
-
- $(UtilPackTaskFactoryParametersXML)
-
-
-
-
- $(UtilPackTaskFactoryParametersXML)
-
-
-
- True
-
-
-
\ No newline at end of file
diff --git a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets b/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets
deleted file mode 100644
index 379ff192cb..0000000000
--- a/src/GitVersionTask/NugetAssets/build/functionality/GitVersionMultiTargetBuild.targets
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(GitVersion_FullSemVer)
- $(GitVersion_MajorMinorPatch)
- $(GitVersion_NuGetPreReleaseTag)
- $(GitVersion_PreReleaseTag)
- $(GitVersion_NuGetVersion)
- $(GitVersion_FullSemVer)
- $(GitVersion_InformationalVersion)
- $(GitVersion_AssemblySemVer)
- $(GitVersion_AssemblySemFileVer)
-
-
-
-
diff --git a/src/GitVersionTask/TaskUtils.cs b/src/GitVersionTask/TaskUtils.cs
deleted file mode 100644
index ad0be50887..0000000000
--- a/src/GitVersionTask/TaskUtils.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-namespace GitVersionTask
-{
- using System;
-
- public class TaskUtils
- {
- public static string GetFileExtension(string language)
- {
- switch(language)
- {
- case "C#":
- return "cs";
-
- case "F#":
- return "fs";
-
- case "VB":
- return "vb";
-
- default:
- throw new Exception($"Unknown language detected: '{language}'");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/GitVersionTask/TempFileTracker.cs b/src/GitVersionTask/TempFileTracker.cs
deleted file mode 100644
index 1335ef4e7f..0000000000
--- a/src/GitVersionTask/TempFileTracker.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.IO;
-
-public static class TempFileTracker
-{
- public static string TempPath;
-
- static TempFileTracker()
- {
- TempPath = Path.Combine(Path.GetTempPath(), "GitVersionTask");
- Directory.CreateDirectory(TempPath);
- }
-
- public static void DeleteTempFiles()
- {
- if (!Directory.Exists(TempPath))
- {
- return;
- }
-
- foreach (var file in Directory.GetFiles(TempPath))
- {
- if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-1))
- {
- try
- {
- File.Delete(file);
- }
- catch (UnauthorizedAccessException)
- {
- //ignore contention
- }
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/src/GitVersionTask/UpdateAssemblyInfo.cs b/src/GitVersionTask/UpdateAssemblyInfo.cs
deleted file mode 100644
index e386bbae8f..0000000000
--- a/src/GitVersionTask/UpdateAssemblyInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-namespace GitVersionTask
-{
- using System.IO;
-
- using GitVersion;
- using GitVersion.Helpers;
- using Microsoft.Build.Framework;
-
- public class UpdateAssemblyInfo : GitVersionTaskBase
- {
- [Required]
- public string ProjectFile { get; set; }
-
- [Required]
- public string IntermediateOutputPath { get; set; }
-
- [Required]
- public ITaskItem[] CompileFiles { get; set; }
-
- [Required]
- public string Language { get; set; }
-
- [Output]
- public string AssemblyInfoTempFilePath { get; set; }
-
- protected override void InnerExecute()
- {
- TempFileTracker.DeleteTempFiles();
-
- InvalidFileChecker.CheckForInvalidFiles(CompileFiles, ProjectFile);
-
- if (GetVersionVariables(out var versionVariables)) return;
-
- CreateTempAssemblyInfo(versionVariables);
- }
-
- private void CreateTempAssemblyInfo(VersionVariables versionVariables)
- {
- var fileExtension = TaskUtils.GetFileExtension(Language);
- var assemblyInfoFileName = $"GitVersionTaskAssemblyInfo.g.{fileExtension}";
-
- if (IntermediateOutputPath == null)
- {
- assemblyInfoFileName = $"AssemblyInfo_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
- }
-
- var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath;
-
- AssemblyInfoTempFilePath = Path.Combine(workingDirectory, assemblyInfoFileName);
-
- using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFileName, workingDirectory, versionVariables, new FileSystem(), true))
- {
- assemblyInfoFileUpdater.Update();
- assemblyInfoFileUpdater.CommitChanges();
- }
- }
- }
-}
diff --git a/src/GitVersionTask/UtilPack.Version.props b/src/GitVersionTask/UtilPack.Version.props
deleted file mode 100644
index 109fbf9d1e..0000000000
--- a/src/GitVersionTask/UtilPack.Version.props
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 2.9.1
-
-
-
diff --git a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs b/src/GitVersionTask/WriteVersionInfoToBuildLog.cs
deleted file mode 100644
index 03340b7947..0000000000
--- a/src/GitVersionTask/WriteVersionInfoToBuildLog.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-namespace GitVersionTask
-{
- using System.Collections.Generic;
- using GitVersion;
-
- public class WriteVersionInfoToBuildLog : GitVersionTaskBase
- {
- protected override void InnerExecute()
- {
- if (GetVersionVariables(out var versionVariables)) return;
-
- WriteIntegrationParameters(BuildServerList.GetApplicableBuildServers(), versionVariables);
- }
-
- private void WriteIntegrationParameters(IEnumerable applicableBuildServers, VersionVariables versionVariables)
- {
- foreach (var buildServer in applicableBuildServers)
- {
- LogInfo($"Executing GenerateSetVersionMessage for '{buildServer.GetType().Name}'.");
- LogInfo(buildServer.GenerateSetVersionMessage(versionVariables));
- LogInfo($"Executing GenerateBuildLogOutput for '{buildServer.GetType().Name}'.");
- foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables))
- {
- LogInfo(buildParameter);
- }
- }
- }
- }
-}