diff --git a/.gitignore b/.gitignore
index 6ee6057d5f..2b2c9c3d0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -195,3 +195,4 @@ Logs/
ModuleCache.noindex/
Build/Intermediates.noindex/
info.plist
+build-intermediate
diff --git a/.gitmodules b/.gitmodules
index 2d2a9ac497..22c56307b0 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github"]
path = src/Markup/Avalonia.Markup.Xaml/PortableXaml/portable.xaml.github
url = https://github.com/AvaloniaUI/Portable.Xaml.git
+[submodule "nukebuild/Numerge"]
+ path = nukebuild/Numerge
+ url = https://github.com/kekekeks/Numerge.git
diff --git a/Directory.Build.props b/Directory.Build.props
index 50476c81f1..1f26df9bbc 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,5 +1,5 @@
- $(MSBuildThisFileDirectory)artifacts/nuget
+ $(MSBuildThisFileDirectory)build-intermediate/nuget
diff --git a/build/ReferenceCoreLibraries.props b/build/ReferenceCoreLibraries.props
index bd9d6ad843..cffc2e0324 100644
--- a/build/ReferenceCoreLibraries.props
+++ b/build/ReferenceCoreLibraries.props
@@ -1,5 +1,4 @@
-
diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs
index 1014aa1b47..61944c4dbc 100644
--- a/nukebuild/Build.cs
+++ b/nukebuild/Build.cs
@@ -63,6 +63,7 @@ partial class Build : NukeBuild
DeleteDirectories(Parameters.BuildDirs);
EnsureCleanDirectories(Parameters.BuildDirs);
EnsureCleanDirectory(Parameters.ArtifactsDir);
+ EnsureCleanDirectory(Parameters.NugetIntermediateRoot);
EnsureCleanDirectory(Parameters.NugetRoot);
EnsureCleanDirectory(Parameters.ZipRoot);
EnsureCleanDirectory(Parameters.TestResultsRoot);
@@ -181,7 +182,7 @@ partial class Build : NukeBuild
GlobFiles(data.ZipSourceControlCatalogDesktopDir, "*.exe")));
});
- Target CreateNugetPackages => _ => _
+ Target CreateIntermediateNugetPackages => _ => _
.DependsOn(Compile)
.After(RunTests)
.Executes(() =>
@@ -200,6 +201,17 @@ partial class Build : NukeBuild
c.SetConfiguration(Parameters.Configuration)
.AddProperty("PackageVersion", Parameters.Version));
});
+
+ Target CreateNugetPackages => _ => _
+ .DependsOn(CreateIntermediateNugetPackages)
+ .Executes(() =>
+ {
+ var config = Numerge.MergeConfiguration.LoadFile(RootDirectory / "nukebuild" / "numerge.config");
+ EnsureCleanDirectory(Parameters.NugetRoot);
+ if(!Numerge.NugetPackageMerger.Merge(Parameters.NugetIntermediateRoot, Parameters.NugetRoot, config,
+ new NumergeNukeLogger()))
+ throw new Exception("Package merge failed");
+ });
Target RunTests => _ => _
.DependsOn(RunCoreLibsTests)
diff --git a/nukebuild/BuildParameters.cs b/nukebuild/BuildParameters.cs
index 9029aef60d..5f8ec7267e 100644
--- a/nukebuild/BuildParameters.cs
+++ b/nukebuild/BuildParameters.cs
@@ -47,6 +47,7 @@ public partial class Build
public bool PublishTestResults { get; }
public string Version { get; }
public AbsolutePath ArtifactsDir { get; }
+ public AbsolutePath NugetIntermediateRoot { get; }
public AbsolutePath NugetRoot { get; }
public AbsolutePath ZipRoot { get; }
public AbsolutePath BinRoot { get; }
@@ -117,6 +118,7 @@ public partial class Build
// DIRECTORIES
ArtifactsDir = RootDirectory / "artifacts";
NugetRoot = ArtifactsDir / "nuget";
+ NugetIntermediateRoot = RootDirectory / "build-intermediate" / "nuget";
ZipRoot = ArtifactsDir / "zip";
BinRoot = ArtifactsDir / "bin";
TestResultsRoot = ArtifactsDir / "test-results";
@@ -130,9 +132,9 @@ public partial class Build
ZipTargetControlCatalogDesktopDir = ZipRoot / ("ControlCatalog.Desktop-" + FileZipSuffix);
}
- private static string GetVersion()
+ string GetVersion()
{
- var xdoc = XDocument.Load("./build/SharedVersion.props");
+ var xdoc = XDocument.Load(RootDirectory / "build/SharedVersion.props");
return xdoc.Descendants().First(x => x.Name.LocalName == "Version").Value;
}
}
diff --git a/nukebuild/Numerge b/nukebuild/Numerge
new file mode 160000
index 0000000000..0d0537750d
--- /dev/null
+++ b/nukebuild/Numerge
@@ -0,0 +1 @@
+Subproject commit 0d0537750d96eeb90e18f2a4999defb3593a50e5
diff --git a/nukebuild/Shims.cs b/nukebuild/Shims.cs
index 1ba72494d7..461d617643 100644
--- a/nukebuild/Shims.cs
+++ b/nukebuild/Shims.cs
@@ -5,6 +5,7 @@ using System.IO.Compression;
using System.Linq;
using Nuke.Common;
using Nuke.Common.IO;
+using Numerge;
public partial class Build
{
@@ -76,4 +77,17 @@ public partial class Build
}
}
}
+
+ class NumergeNukeLogger : INumergeLogger
+ {
+ public void Log(NumergeLogLevel level, string message)
+ {
+ if(level == NumergeLogLevel.Error)
+ Logger.Error(message);
+ else if (level == NumergeLogLevel.Warning)
+ Logger.Warn(message);
+ else
+ Logger.Info(message);
+ }
+ }
}
diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj
index ed94116a93..e02acff007 100644
--- a/nukebuild/_build.csproj
+++ b/nukebuild/_build.csproj
@@ -30,6 +30,8 @@
+
+
diff --git a/nukebuild/numerge.config b/nukebuild/numerge.config
new file mode 100644
index 0000000000..4ad7dc51f0
--- /dev/null
+++ b/nukebuild/numerge.config
@@ -0,0 +1,22 @@
+{
+ "Packages":
+ [
+ {
+ "Id": "Avalonia",
+ "MergeAll": true,
+ "Exclude": ["Avalonia.Remote.Protocol"],
+ "Merge": [
+ {
+ "Id": "Avalonia.Build.Tasks",
+ "IgnoreMissingFrameworkBinaries": true,
+ "DoNotMergeDependencies": true
+ },
+ {
+ "Id": "Avalonia.DesktopRuntime",
+ "IgnoreMissingFrameworkBinaries": true,
+ "IgnoreMissingFrameworkDependencies": true
+ }
+ ]
+ }
+ ]
+}
diff --git a/packages/Avalonia/Avalonia.csproj b/packages/Avalonia/Avalonia.csproj
index 3033064594..72625172d4 100644
--- a/packages/Avalonia/Avalonia.csproj
+++ b/packages/Avalonia/Avalonia.csproj
@@ -1,4 +1,4 @@
-
+
netstandard2.0;net461;netcoreapp2.0
@@ -40,10 +40,6 @@
true
build\
-
- true
- tools\
-
diff --git a/packages/Avalonia/Avalonia.props b/packages/Avalonia/Avalonia.props
index 30e3f93b5c..6f21971d3d 100644
--- a/packages/Avalonia/Avalonia.props
+++ b/packages/Avalonia/Avalonia.props
@@ -2,7 +2,7 @@
$(MSBuildThisFileDirectory)\..\tools\netcoreapp2.0\designer\Avalonia.Designer.HostApp.dll
$(MSBuildThisFileDirectory)\..\tools\net461\designer\Avalonia.Designer.HostApp.exe
- $(MSBuildThisFileDirectory)\..\tools\Avalonia.Build.Tasks.dll
+ $(MSBuildThisFileDirectory)\..\tools\netstandard2.0\Avalonia.Build.Tasks.dll
false
diff --git a/src/Avalonia.Animation/Avalonia.Animation.csproj b/src/Avalonia.Animation/Avalonia.Animation.csproj
index 3b6d1c1b33..73c619942e 100644
--- a/src/Avalonia.Animation/Avalonia.Animation.csproj
+++ b/src/Avalonia.Animation/Avalonia.Animation.csproj
@@ -1,7 +1,6 @@
netstandard2.0
- false
diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj
index abc4ed80d8..cbcf7a7386 100644
--- a/src/Avalonia.Base/Avalonia.Base.csproj
+++ b/src/Avalonia.Base/Avalonia.Base.csproj
@@ -4,7 +4,6 @@
Avalonia.Base
Avalonia
True
- false
diff --git a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
index 6b697a9028..ce767aaa87 100644
--- a/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
+++ b/src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
@@ -4,7 +4,6 @@
netstandard2.0
tools
$(DefineConstants);BUILDTASK
- false
diff --git a/src/Avalonia.Controls/Avalonia.Controls.csproj b/src/Avalonia.Controls/Avalonia.Controls.csproj
index fddd4403e9..32331d29ab 100644
--- a/src/Avalonia.Controls/Avalonia.Controls.csproj
+++ b/src/Avalonia.Controls/Avalonia.Controls.csproj
@@ -1,7 +1,6 @@
netstandard2.0
- false
diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
index e732a7eef0..2c5aaf1a70 100644
--- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
+++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
@@ -1,7 +1,6 @@
netstandard2.0
- false