Selaa lähdekoodia

Merge pull request #1716 from wieslawsoltes/CakeRefactoring

Cake build script refactoring
Jumar Macato 7 vuotta sitten
vanhempi
sitoutus
77251178e5
4 muutettua tiedostoa jossa 181 lisäystä ja 156 poistoa
  1. 2 0
      Avalonia.sln
  2. 120 113
      build.cake
  3. 54 36
      packages.cake
  4. 5 7
      parameters.cake

+ 2 - 0
Avalonia.sln

@@ -398,6 +398,7 @@ Global
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|NetCoreOnly.ActiveCfg = Debug|Any CPU
+		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|NetCoreOnly.Build.0 = Debug|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|x86.ActiveCfg = Debug|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Debug|x86.Build.0 = Debug|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -407,6 +408,7 @@ Global
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|NetCoreOnly.ActiveCfg = Release|Any CPU
+		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|NetCoreOnly.Build.0 = Release|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.ActiveCfg = Release|Any CPU
 		{3E908F67-5543-4879-A1DC-08EACE79B3CD}.Release|x86.Build.0 = Release|Any CPU
 		{62024B2D-53EB-4638-B26B-85EEAA54866E}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU

+ 120 - 113
build.cake

@@ -6,6 +6,7 @@
 #addin "nuget:?package=NuGet.Core&version=2.14.0"
 #tool "nuget:?package=NuGet.CommandLine&version=4.3.0"
 #tool "nuget:?package=JetBrains.ReSharper.CommandLineTools&version=2017.1.20170613.162720"
+
 ///////////////////////////////////////////////////////////////////////////////
 // TOOLS
 ///////////////////////////////////////////////////////////////////////////////
@@ -98,7 +99,7 @@ Teardown<AvaloniaBuildData>((context, buildContext) =>
 // TASKS
 ///////////////////////////////////////////////////////////////////////////////
 
-Task("Clean")
+Task("Clean-Impl")
     .Does<AvaloniaBuildData>(data =>
 {
     CleanDirectories(data.Parameters.BuildDirs);
@@ -108,9 +109,9 @@ Task("Clean")
     CleanDirectory(data.Parameters.BinRoot);
 });
 
-Task("Restore-NuGet-Packages")
-    .IsDependentOn("Clean")
+Task("Restore-NuGet-Packages-Impl")
     .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows)
+    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
     .Does<AvaloniaBuildData>(data =>
 {
     var maxRetryCount = 5;
@@ -148,11 +149,10 @@ void DotNetCoreBuild(Parameters parameters)
     DotNetCoreBuild(parameters.MSBuildSolution, settings);
 }
 
-Task("Build")
-    .IsDependentOn("Restore-NuGet-Packages")
+Task("Build-Impl")
     .Does<AvaloniaBuildData>(data =>
 {
-    if(data.Parameters.IsRunningOnWindows)
+    if(data.Parameters.IsRunningOnWindows && !data.Parameters.IsPlatformNetCoreOnly)
     {
         MSBuild(data.Parameters.MSBuildSolution, settings => {
             settings.SetConfiguration(data.Parameters.Configuration);
@@ -171,7 +171,6 @@ Task("Build")
     }
 });
 
-
 void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
 {
     if(!project.EndsWith(".csproj"))
@@ -194,94 +193,91 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
     }
 }
 
-Task("Run-Unit-Tests")
-    .IsDependentOn("Build")
+Task("Run-Unit-Tests-Impl")
     .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
-    .Does<AvaloniaBuildData>(data => {
-        RunCoreTest("./tests/Avalonia.Base.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Controls.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Input.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Layout.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Markup.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Styling.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data.Parameters, false);
-        RunCoreTest("./tests/Avalonia.Skia.UnitTests", data.Parameters, false);
-        if (data.Parameters.IsRunningOnWindows)
-        {
-            RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, true);
-        }
-    });
+    .Does<AvaloniaBuildData>(data =>
+{
+    RunCoreTest("./tests/Avalonia.Base.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Controls.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Input.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Layout.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Markup.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Styling.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.Skia.UnitTests", data.Parameters, false);
+    if (data.Parameters.IsRunningOnWindows && !data.Parameters.IsPlatformNetCoreOnly)
+    {
+        RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, true);
+    }
+});
 
-Task("Run-Designer-Tests")
-    .IsDependentOn("Build")
+Task("Run-Designer-Tests-Impl")
     .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
-    .Does<AvaloniaBuildData>(data => {
-        RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false);
-    });
+    .Does<AvaloniaBuildData>(data =>
+{
+    RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false);
+});
 
-Task("Run-Render-Tests")
-    .IsDependentOn("Build")
-    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests && data.Parameters.IsRunningOnWindows)
-    .Does<AvaloniaBuildData>(data => {
-        RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data.Parameters, true);
-        RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data.Parameters, true);
-    });
+Task("Run-Render-Tests-Impl")
+    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
+    .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows)
+    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
+    .Does<AvaloniaBuildData>(data =>
+{
+    RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data.Parameters, true);
+    RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data.Parameters, true);
+});
 
-Task("Run-Leak-Tests")
-    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests && data.Parameters.IsRunningOnWindows)
-    .IsDependentOn("Build")
+Task("Run-Leak-Tests-Impl")
+    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
+    .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows)
+    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
     .Does(() =>
+{
+    var dotMemoryUnit = Context.Tools.Resolve("dotMemoryUnit.exe");
+    var leakTestsExitCode = StartProcess(dotMemoryUnit, new ProcessSettings
     {
-        var dotMemoryUnit = Context.Tools.Resolve("dotMemoryUnit.exe");
-        var leakTestsExitCode = StartProcess(dotMemoryUnit, new ProcessSettings
-        {
-            Arguments = new ProcessArgumentBuilder()
-                .Append(Context.Tools.Resolve("xunit.console.x86.exe").FullPath)
-                .Append("--propagate-exit-code")
-                .Append("--")
-                .Append("tests\\Avalonia.LeakTests\\bin\\Release\\net461\\Avalonia.LeakTests.dll"),
-            Timeout = 120000
-        });
-
-        if (leakTestsExitCode != 0)
-        {
-            throw new Exception("Leak Tests failed");
-        }
+        Arguments = new ProcessArgumentBuilder()
+            .Append(Context.Tools.Resolve("xunit.console.x86.exe").FullPath)
+            .Append("--propagate-exit-code")
+            .Append("--")
+            .Append("tests\\Avalonia.LeakTests\\bin\\Release\\net461\\Avalonia.LeakTests.dll"),
+        Timeout = 120000
     });
 
-Task("Run-Tests")
-    .IsDependentOn("Run-Unit-Tests")
-    .IsDependentOn("Run-Render-Tests")
-    .IsDependentOn("Run-Designer-Tests")
-    .IsDependentOn("Run-Leak-Tests");
+    if (leakTestsExitCode != 0)
+    {
+        throw new Exception("Leak Tests failed");
+    }
+});
 
-Task("Copy-Files")
-    .IsDependentOn("Run-Tests")
+Task("Copy-Files-Impl")
     .Does<AvaloniaBuildData>(data =>
 {
     CopyFiles(data.Packages.BinFiles, data.Parameters.BinRoot);
 });
 
-Task("Zip-Files")
-    .IsDependentOn("Copy-Files")
+Task("Zip-Files-Impl")
     .Does<AvaloniaBuildData>(data =>
 {
     Zip(data.Parameters.BinRoot, data.Parameters.ZipCoreArtifacts);
 
-    Zip(data.Parameters.ZipSourceControlCatalogDesktopDirs, 
-        data.Parameters.ZipTargetControlCatalogDesktopDirs, 
-        GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") + 
-        GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") + 
-        GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") + 
-        GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") + 
-        GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
+    Zip(data.Parameters.NugetRoot, data.Parameters.ZipNuGetArtifacts);
+
+    if (!data.Parameters.IsPlatformNetCoreOnly) {
+        Zip(data.Parameters.ZipSourceControlCatalogDesktopDirs, 
+            data.Parameters.ZipTargetControlCatalogDesktopDirs, 
+            GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") + 
+            GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") + 
+            GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") + 
+            GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") + 
+            GetFiles(data.Parameters.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
+    }
 });
 
-Task("Create-NuGet-Packages")
-    .IsDependentOn("Run-Tests")
-    .IsDependentOn("Inspect")
+Task("Create-NuGet-Packages-Impl")
     .Does<AvaloniaBuildData>(data =>
 {
     foreach(var nuspec in data.Packages.NuspecNuGetSettings)
@@ -290,8 +286,7 @@ Task("Create-NuGet-Packages")
     }
 });
 
-Task("Publish-MyGet")
-    .IsDependentOn("Create-NuGet-Packages")
+Task("Publish-MyGet-Impl")
     .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsLocalBuild)
     .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPullRequest)
     .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsMainRepo)
@@ -324,8 +319,7 @@ Task("Publish-MyGet")
     Information("Publish-MyGet Task failed, but continuing with next Task...");
 });
 
-Task("Publish-NuGet")
-    .IsDependentOn("Create-NuGet-Packages")
+Task("Publish-NuGet-Impl")
     .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsLocalBuild)
     .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPullRequest)
     .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsMainRepo)
@@ -357,54 +351,67 @@ Task("Publish-NuGet")
     Information("Publish-NuGet Task failed, but continuing with next Task...");
 });
 
-Task("Inspect")
+Task("Inspect-Impl")
     .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows)
-    .IsDependentOn("Restore-NuGet-Packages")
+    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.IsPlatformNetCoreOnly)
     .Does(() =>
-    {
-        var badIssues = new []{"PossibleNullReferenceException"};
-        var whitelist = new []{"tests", "src\\android", "src\\ios",
-            "src\\markup\\avalonia.markup.xaml\\portablexaml\\portable.xaml.github"};
-        Information("Running code inspections");
-        
-        var exitCode = StartProcess(Context.Tools.Resolve("inspectcode.exe"),
-            new ProcessSettings
-            {
-                Arguments = "--output=artifacts\\inspectcode.xml --profile=Avalonia.sln.DotSettings Avalonia.sln",
-                RedirectStandardOutput = true
-            });
+{
+    var badIssues = new []{"PossibleNullReferenceException"};
+    var whitelist = new []{"tests", "src\\android", "src\\ios",
+        "src\\markup\\avalonia.markup.xaml\\portablexaml\\portable.xaml.github"};
+    Information("Running code inspections");
+    
+    var exitCode = StartProcess(Context.Tools.Resolve("inspectcode.exe"),
+        new ProcessSettings
+        {
+            Arguments = "--output=artifacts\\inspectcode.xml --profile=Avalonia.sln.DotSettings Avalonia.sln",
+            RedirectStandardOutput = true
+        });
 
-        Information("Analyzing report");
-        var doc = XDocument.Parse(System.IO.File.ReadAllText("artifacts\\inspectcode.xml"));
-        var failBuild = false;
-        foreach(var xml in doc.Descendants("Issue"))
+    Information("Analyzing report");
+    var doc = XDocument.Parse(System.IO.File.ReadAllText("artifacts\\inspectcode.xml"));
+    var failBuild = false;
+    foreach(var xml in doc.Descendants("Issue"))
+    {
+        var typeId = xml.Attribute("TypeId").Value.ToString();
+        if(badIssues.Contains(typeId))
         {
-            var typeId = xml.Attribute("TypeId").Value.ToString();
-            if(badIssues.Contains(typeId))
-            {
-                var file = xml.Attribute("File").Value.ToString().ToLower();
-                if(whitelist.Any(wh => file.StartsWith(wh)))
-                    continue;
-                var line = xml.Attribute("Line").Value.ToString();
-                Error(typeId + " - " + file + " on line " + line);
-                failBuild = true;
-            }
+            var file = xml.Attribute("File").Value.ToString().ToLower();
+            if(whitelist.Any(wh => file.StartsWith(wh)))
+                continue;
+            var line = xml.Attribute("Line").Value.ToString();
+            Error(typeId + " - " + file + " on line " + line);
+            failBuild = true;
         }
-        if(failBuild)
-            throw new Exception("Issues found");
-    });
+    }
+    if(failBuild)
+        throw new Exception("Issues found");
+});
 
 ///////////////////////////////////////////////////////////////////////////////
 // TARGETS
 ///////////////////////////////////////////////////////////////////////////////
 
+Task("Run-Tests")
+    .IsDependentOn("Clean-Impl")
+    .IsDependentOn("Restore-NuGet-Packages-Impl")
+    .IsDependentOn("Build-Impl")
+    .IsDependentOn("Run-Unit-Tests-Impl")
+    .IsDependentOn("Run-Render-Tests-Impl")
+    .IsDependentOn("Run-Designer-Tests-Impl")
+    .IsDependentOn("Run-Leak-Tests-Impl");
+
 Task("Package")
-  .IsDependentOn("Create-NuGet-Packages");
+    .IsDependentOn("Run-Tests")
+    .IsDependentOn("Inspect-Impl")
+    .IsDependentOn("Create-NuGet-Packages-Impl");
 
 Task("AppVeyor")
-  .IsDependentOn("Zip-Files")
-  .IsDependentOn("Publish-MyGet")
-  .IsDependentOn("Publish-NuGet");
+  .IsDependentOn("Package")
+  .IsDependentOn("Copy-Files-Impl")
+  .IsDependentOn("Zip-Files-Impl")
+  .IsDependentOn("Publish-MyGet-Impl")
+  .IsDependentOn("Publish-NuGet-Impl");
 
 Task("Travis")
   .IsDependentOn("Run-Tests");

+ 54 - 36
packages.cake

@@ -1,3 +1,6 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
 using System.Xml.Linq;
 
 public class Packages
@@ -9,12 +12,11 @@ public class Packages
     public string SkiaSharpVersion {get; private set; }
     public string SkiaSharpLinuxVersion {get; private set; }
     public Dictionary<string, IList<Tuple<string,string>>> PackageVersions{get; private set;}
-    
-       
-    
+
     class DependencyBuilder : List<NuSpecDependency>
     {
         Packages _parent;
+
         public DependencyBuilder(Packages parent)
         {
             _parent = parent;
@@ -24,8 +26,7 @@ public class Packages
         {
             return _parent.PackageVersions[name].First().Item1;
         }
-        
-        
+
         public DependencyBuilder Dep(string name, params string[] fws)
         {
             if(fws.Length == 0)
@@ -212,17 +213,33 @@ public class Packages
             };
         });
 
-        var toolsContent = new[] {
-            new NuSpecContent{
-                Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp/bin/" + parameters.DirSuffix + "/netcoreapp2.0/Avalonia.Designer.HostApp.dll")).FullPath, 
-                Target = "tools/netcoreapp2.0/previewer"
-            },
-            new NuSpecContent{
-                Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp.NetFx/bin/" + parameters.DirSuffix + "/Avalonia.Designer.HostApp.exe")).FullPath, 
-                Target = "tools/net461/previewer"
-            }
+        var toolHostApp = new NuSpecContent{
+            Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp/bin/" + parameters.DirSuffix + "/netcoreapp2.0/Avalonia.Designer.HostApp.dll")).FullPath, 
+            Target = "tools/netcoreapp2.0/previewer"
+        };
+
+        var toolHostAppNetFx = new NuSpecContent{
+            Source = ((FilePath)context.File("./src/tools/Avalonia.Designer.HostApp.NetFx/bin/" + parameters.DirSuffix + "/Avalonia.Designer.HostApp.exe")).FullPath, 
+            Target = "tools/net461/previewer"
         };
 
+        IList<NuSpecContent> coreFiles;
+
+        if (parameters.Platform != "NetCoreOnly") {
+            var toolsContent = new[] { toolHostApp, toolHostAppNetFx };
+            coreFiles = coreLibrariesNuSpecContent
+                .Concat(win32CoreLibrariesNuSpecContent).Concat(net45RuntimePlatform)
+                .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
+                .Concat(toolsContent)
+                .ToList();
+        } else {
+            var toolsContent = new[] { toolHostApp };
+            coreFiles = coreLibrariesNuSpecContent
+                .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
+                .Concat(toolsContent)
+                .ToList();
+        }
+
         var nuspecNuGetSettingsCore = new []
         {
             ///////////////////////////////////////////////////////////////////////////////
@@ -255,11 +272,7 @@ public class Packages
                     "System.ValueTuple", "System.ComponentModel.TypeConverter", "System.ComponentModel.Primitives",
                     "System.Runtime.Serialization.Primitives", "System.Xml.XmlDocument", "System.Xml.ReaderWriter", "System.Memory")
                 .ToArray(),
-                Files = coreLibrariesNuSpecContent
-                    .Concat(win32CoreLibrariesNuSpecContent).Concat(net45RuntimePlatform)
-                    .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
-                    .Concat(toolsContent)
-                    .ToList(),
+                Files = coreFiles,
                 BasePath = context.Directory("./"),
                 OutputDirectory = parameters.NugetRoot
             },
@@ -451,22 +464,6 @@ public class Packages
                 BasePath = context.Directory("./"),
                 OutputDirectory = parameters.NugetRoot
             },
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Win32.Interoperability",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia.Win32", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "SharpDX.Direct3D9", Version = SharpDXDirect3D9Version },
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Win32.Interop/bin/" + parameters.DirSuffix + "/Avalonia.Win32.Interop.dll", Target = "lib/net45" }
-                },
-                BasePath = context.Directory("./src/Windows"),
-                OutputDirectory = parameters.NugetRoot
-            },
             ///////////////////////////////////////////////////////////////////////////////
             // Avalonia.LinuxFramebuffer
             ///////////////////////////////////////////////////////////////////////////////
@@ -487,11 +484,32 @@ public class Packages
             }
         };
 
+        var nuspecNuGetSettingInterop = new NuGetPackSettings()
+        {
+            Id = "Avalonia.Win32.Interoperability",
+            Dependencies = new []
+            {
+                new NuSpecDependency() { Id = "Avalonia.Win32", Version = parameters.Version },
+                new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = parameters.Version },
+                new NuSpecDependency() { Id = "SharpDX.Direct3D9", Version = SharpDXDirect3D9Version },
+            },
+            Files = new []
+            {
+                new NuSpecContent { Source = "Avalonia.Win32.Interop/bin/" + parameters.DirSuffix + "/Avalonia.Win32.Interop.dll", Target = "lib/net45" }
+            },
+            BasePath = context.Directory("./src/Windows"),
+            OutputDirectory = parameters.NugetRoot
+        };
+
         NuspecNuGetSettings = new List<NuGetPackSettings>();
 
         NuspecNuGetSettings.AddRange(nuspecNuGetSettingsCore);
         NuspecNuGetSettings.AddRange(nuspecNuGetSettingsDesktop);
-        NuspecNuGetSettings.AddRange(nuspecNuGetSettingsMobile);
+
+        if (parameters.Platform != "NetCoreOnly") {
+            NuspecNuGetSettings.Add(nuspecNuGetSettingInterop);
+            NuspecNuGetSettings.AddRange(nuspecNuGetSettingsMobile);
+        }
 
         NuspecNuGetSettings.ForEach((nuspec) => SetNuGetNuspecCommonProperties(nuspec));
 

+ 5 - 7
parameters.cake

@@ -8,11 +8,11 @@ public class Parameters
     public string AssemblyInfoPath { get; private set; }
     public string ReleasePlatform { get; private set; }
     public string ReleaseConfiguration { get; private set; }
-    public string MSBuildSolution { get; private set; } 
-    public string XBuildSolution { get; private set; } 
+    public string MSBuildSolution { get; private set; }
     public bool IsPlatformAnyCPU { get; private set; }
     public bool IsPlatformX86 { get; private set; }
     public bool IsPlatformX64 { get; private set; }
+    public bool IsPlatformNetCoreOnly { get; private set; }
     public bool IsLocalBuild { get; private set; }
     public bool IsRunningOnUnix { get; private set; }
     public bool IsRunningOnWindows { get; private set; }
@@ -34,6 +34,7 @@ public class Parameters
     public DirectoryPathCollection BuildDirs { get; private set; }
     public string FileZipSuffix { get; private set; }
     public FilePath ZipCoreArtifacts { get; private set; }
+    public FilePath ZipNuGetArtifacts { get; private set; }
     public DirectoryPath ZipSourceControlCatalogDesktopDirs { get; private set; }
     public FilePath ZipTargetControlCatalogDesktopDirs { get; private set; }
 
@@ -53,12 +54,12 @@ public class Parameters
         ReleasePlatform = "Any CPU";
         ReleaseConfiguration = "Release";
         MSBuildSolution = "./Avalonia.sln";
-        XBuildSolution = "./Avalonia.XBuild.sln";
 
         // PARAMETERS
         IsPlatformAnyCPU = StringComparer.OrdinalIgnoreCase.Equals(Platform, "Any CPU");
         IsPlatformX86 = StringComparer.OrdinalIgnoreCase.Equals(Platform, "x86");
         IsPlatformX64 = StringComparer.OrdinalIgnoreCase.Equals(Platform, "x64");
+        IsPlatformNetCoreOnly = StringComparer.OrdinalIgnoreCase.Equals(Platform, "NetCoreOnly");
         IsLocalBuild = buildSystem.IsLocalBuild;
         IsRunningOnUnix = context.IsRunningOnUnix();
         IsRunningOnWindows = context.IsRunningOnWindows();
@@ -71,7 +72,6 @@ public class Parameters
         IsReleasable = StringComparer.OrdinalIgnoreCase.Equals(ReleasePlatform, Platform) 
                     && StringComparer.OrdinalIgnoreCase.Equals(ReleaseConfiguration, Configuration);
         IsMyGetRelease = !IsTagged && IsReleasable;
-        
 
         // VERSION
         Version = context.Argument("force-nuget-version", context.ParseAssemblyInfo(AssemblyInfoPath).AssemblyVersion);
@@ -103,14 +103,12 @@ public class Parameters
         NugetRoot = ArtifactsDir.Combine("nuget");
         ZipRoot = ArtifactsDir.Combine("zip");
         BinRoot = ArtifactsDir.Combine("bin");
-
         BuildDirs = context.GetDirectories("**/bin") + context.GetDirectories("**/obj");
-
         DirSuffix = Configuration;
         DirSuffixIOS = "iPhone" + "/" + Configuration;
-
         FileZipSuffix = Version + ".zip";
         ZipCoreArtifacts = ZipRoot.CombineWithFilePath("Avalonia-" + FileZipSuffix);
+        ZipNuGetArtifacts = ZipRoot.CombineWithFilePath("Avalonia-NuGet-" + FileZipSuffix);
         ZipSourceControlCatalogDesktopDirs = (DirectoryPath)context.Directory("./samples/ControlCatalog.Desktop/bin/" + DirSuffix + "/net461");
         ZipTargetControlCatalogDesktopDirs = ZipRoot.CombineWithFilePath("ControlCatalog.Desktop-" + FileZipSuffix);
     }