Browse Source

Merge branch 'master' into refactor/pixelsize

Dan Walmsley 7 years ago
parent
commit
0a191bb260
100 changed files with 603 additions and 1314 deletions
  1. 10 4
      .gitignore
  2. 0 0
      .ncrunch/Avalonia.DesktopRuntime.v3.ncrunchproject
  3. 0 6
      .ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject
  4. 0 5
      .ncrunch/Avalonia.Gtk.v3.ncrunchproject
  5. 0 5
      .ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject
  6. 0 3
      .ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject
  7. 0 3
      .ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject
  8. 0 6
      .ncrunch/BindingTest.v3.ncrunchproject
  9. 0 5
      .ncrunch/RemoteTest.v3.ncrunchproject
  10. 0 8
      .ncrunch/RenderTest.v3.ncrunchproject
  11. 0 6
      .ncrunch/VirtualizationTest.v3.ncrunchproject
  12. 82 81
      Avalonia.sln
  13. 5 0
      Directory.Build.props
  14. 53 23
      azure-pipelines.yml
  15. 6 0
      build-native.sh
  16. 104 87
      build.cake
  17. 20 0
      build/CoreLibraries.props
  18. 3 0
      build/LegacyProject.targets
  19. 6 0
      build/ReferenceCoreLibraries.props
  20. 0 4
      build/Rx.props
  21. 1 6
      build/SampleApp.props
  22. 1 1
      build/System.Drawing.Common.props
  23. 1 1
      dirs.proj
  24. 3 2
      global.json
  25. 0 0
      native/Avalonia.Native/inc/avalonia-native-guids.h
  26. 0 0
      native/Avalonia.Native/inc/avalonia-native.h
  27. 0 0
      native/Avalonia.Native/inc/com.h
  28. 5 4
      native/Avalonia.Native/inc/comimpl.h
  29. 0 0
      native/Avalonia.Native/inc/key.h
  30. 0 0
      native/Avalonia.Native/src/OSX/.gitignore
  31. 3 3
      native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.pbxproj
  32. 0 0
      native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  33. 1 1
      native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme
  34. 0 0
      native/Avalonia.Native/src/OSX/KeyTransform.h
  35. 0 0
      native/Avalonia.Native/src/OSX/KeyTransform.mm
  36. 2 2
      native/Avalonia.Native/src/OSX/Screens.mm
  37. 3 3
      native/Avalonia.Native/src/OSX/SystemDialogs.mm
  38. 3 3
      native/Avalonia.Native/src/OSX/clipboard.mm
  39. 0 0
      native/Avalonia.Native/src/OSX/common.h
  40. 0 0
      native/Avalonia.Native/src/OSX/cursor.h
  41. 1 1
      native/Avalonia.Native/src/OSX/cursor.mm
  42. 10 10
      native/Avalonia.Native/src/OSX/gl.mm
  43. 11 11
      native/Avalonia.Native/src/OSX/main.mm
  44. 7 7
      native/Avalonia.Native/src/OSX/platformthreading.mm
  45. 0 0
      native/Avalonia.Native/src/OSX/window.h
  46. 37 37
      native/Avalonia.Native/src/OSX/window.mm
  47. 0 508
      packages.cake
  48. 36 0
      packages/Avalonia/Avalonia.csproj
  49. 5 1
      parameters.cake
  50. 0 22
      samples/BindingDemo/App.config
  51. 1 19
      samples/BindingDemo/BindingDemo.csproj
  52. 1 0
      samples/ControlCatalog.Android/ControlCatalog.Android.csproj
  53. 0 22
      samples/ControlCatalog.Desktop/App.config
  54. 0 7
      samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
  55. 5 3
      samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj
  56. 1 0
      samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
  57. 0 22
      samples/ControlCatalog/App.config
  58. 1 12
      samples/ControlCatalog/ControlCatalog.csproj
  59. 4 1
      samples/Directory.Build.props
  60. 4 14
      samples/Previewer/Previewer.csproj
  61. 2 13
      samples/RemoteDemo/RemoteDemo.csproj
  62. 1 19
      samples/RenderDemo/RenderDemo.csproj
  63. 0 22
      samples/VirtualizationDemo/App.config
  64. 1 19
      samples/VirtualizationDemo/VirtualizationDemo.csproj
  65. 2 4
      samples/interop/Direct3DInteropSample/Direct3DInteropSample.csproj
  66. 5 4
      samples/interop/WindowsInteropTest/WindowsInteropTest.csproj
  67. 1 8
      src/Android/Avalonia.Android/Avalonia.Android.csproj
  68. 1 0
      src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
  69. 2 1
      src/Avalonia.Animation/Avalonia.Animation.csproj
  70. 1 0
      src/Avalonia.Base/Avalonia.Base.csproj
  71. 2 1
      src/Avalonia.Controls/Avalonia.Controls.csproj
  72. 2 22
      src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
  73. 57 0
      src/Avalonia.Desktop/AppBuilderDesktopExtensions.cs
  74. 14 0
      src/Avalonia.Desktop/Avalonia.Desktop.csproj
  75. 1 1
      src/Avalonia.DesktopRuntime/AppBuilder.cs
  76. 21 0
      src/Avalonia.DesktopRuntime/Avalonia.DesktopRuntime.csproj
  77. 4 1
      src/Avalonia.DesktopRuntime/RuntimeInfo.cs
  78. 2 9
      src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj
  79. 0 58
      src/Avalonia.DotNetCoreRuntime/AppBuilder.cs
  80. 0 18
      src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
  81. 0 17
      src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj
  82. 0 44
      src/Avalonia.DotNetFrameworkRuntime/RuntimeInfo.cs
  83. 5 2
      src/Avalonia.Input/AccessKeyHandler.cs
  84. 2 1
      src/Avalonia.Input/Avalonia.Input.csproj
  85. 1 0
      src/Avalonia.Interactivity/Avalonia.Interactivity.csproj
  86. 2 1
      src/Avalonia.Layout/Avalonia.Layout.csproj
  87. 2 1
      src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj
  88. 0 1
      src/Avalonia.Native/.gitignore
  89. 15 20
      src/Avalonia.Native/Avalonia.Native.csproj
  90. 0 9
      src/Avalonia.Native/Avalonia.Native.targets
  91. 1 5
      src/Avalonia.Native/Mappings.xml
  92. 4 0
      src/Avalonia.Native/Properties/AssemblyInfo.cs
  93. 2 9
      src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj
  94. 2 1
      src/Avalonia.Styling/Avalonia.Styling.csproj
  95. 2 1
      src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj
  96. 2 1
      src/Avalonia.Visuals/Avalonia.Visuals.csproj
  97. 2 1
      src/Directory.Build.props
  98. 2 7
      src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj
  99. 2 6
      src/Linux/Avalonia.LinuxFramebuffer/Avalonia.LinuxFramebuffer.csproj
  100. 2 18
      src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj

+ 10 - 4
.gitignore

@@ -94,10 +94,6 @@ publish/
 *.Publish.xml
 *.pubxml
 
-# NuGet Packages Directory
-## TODO: If you have NuGet Package Restore enabled, uncomment the next line
-packages/
-
 # Windows Azure Build Output
 csx
 *.build.csdef
@@ -189,3 +185,13 @@ project.lock.json
 BenchmarkDotNet.Artifacts/
 
 dirs.sln
+
+
+##################
+# XCode
+##################
+Index/
+Logs/
+ModuleCache.noindex/
+Build/Intermediates.noindex/
+info.plist

+ 0 - 0
.ncrunch/Avalonia.DotNetCoreRuntime.v3.ncrunchproject → .ncrunch/Avalonia.DesktopRuntime.v3.ncrunchproject


+ 0 - 6
.ncrunch/Avalonia.DotNetFrameworkRuntime.v3.ncrunchproject

@@ -1,6 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <IgnoreThisComponentCompletely>False</IgnoreThisComponentCompletely>
-    <PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
-  </Settings>
-</ProjectConfiguration>

+ 0 - 5
.ncrunch/Avalonia.Gtk.v3.ncrunchproject

@@ -1,5 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
-  </Settings>
-</ProjectConfiguration>

+ 0 - 5
.ncrunch/Avalonia.HtmlRenderer.v3.ncrunchproject

@@ -1,5 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
-  </Settings>
-</ProjectConfiguration>

+ 0 - 3
.ncrunch/Avalonia.Win32.NetStandard.v3.ncrunchproject

@@ -1,3 +0,0 @@
-<ProjectConfiguration>
-  <Settings />
-</ProjectConfiguration>

+ 0 - 3
.ncrunch/Avalonia.Win32.Shared.v3.ncrunchproject

@@ -1,3 +0,0 @@
-<ProjectConfiguration>
-  <Settings />
-</ProjectConfiguration>

+ 0 - 6
.ncrunch/BindingTest.v3.ncrunchproject

@@ -1,6 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
-    <PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
-  </Settings>
-</ProjectConfiguration>

+ 0 - 5
.ncrunch/RemoteTest.v3.ncrunchproject

@@ -1,5 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
-  </Settings>
-</ProjectConfiguration>

+ 0 - 8
.ncrunch/RenderTest.v3.ncrunchproject

@@ -1,8 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <HiddenComponentWarnings>
-      <Value>MissingOrIgnoredProjectReference</Value>
-    </HiddenComponentWarnings>
-    <PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
-  </Settings>
-</ProjectConfiguration>

+ 0 - 6
.ncrunch/VirtualizationTest.v3.ncrunchproject

@@ -1,6 +0,0 @@
-<ProjectConfiguration>
-  <Settings>
-    <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
-    <PreviouslyBuiltSuccessfully>True</PreviouslyBuiltSuccessfully>
-  </Settings>
-</ProjectConfiguration>

+ 82 - 81
Avalonia.sln

@@ -116,14 +116,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Interop", "Interop", "{A0CC
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInteropTest", "samples\interop\WindowsInteropTest\WindowsInteropTest.csproj", "{C7A69145-60B6-4882-97D6-A3921DD43978}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DotNetFrameworkRuntime", "src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj", "{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RenderDemo", "samples\RenderDemo\RenderDemo.csproj", "{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Android", "samples\ControlCatalog.Android\ControlCatalog.Android.csproj", "{29132311-1848-4FD6-AE0C-4FF841151BD3}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DotNetCoreRuntime", "src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj", "{7863EA94-F0FB-4386-BF8C-E5BFA761560A}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia", "src\Skia\Avalonia.Skia\Avalonia.Skia.csproj", "{7D2D3083-71DD-4CC9-8907-39A0D86FB322}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Gtk3", "src\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj", "{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}"
@@ -178,21 +174,25 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Designer.HostApp",
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Previewer", "samples\Previewer\Previewer.csproj", "{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Designer.HostApp.NetFX", "src\tools\Avalonia.Designer.HostApp.NetFX\Avalonia.Designer.HostApp.NetFX.csproj", "{4ADA61C8-D191-428D-9066-EF4F0D86520F}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.UnitTests", "tests\Avalonia.Skia.UnitTests\Avalonia.Skia.UnitTests.csproj", "{E1240B49-7B4B-4371-A00E-068778C5CF0B}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.OpenGL", "src\Avalonia.OpenGL\Avalonia.OpenGL.csproj", "{7CCAEFC4-135D-401D-BDDD-896B9B7D3569}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Native", "src\Avalonia.Native\Avalonia.Native.csproj", "{12A91A62-C064-42CA-9A8C-A1272F354388}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.DesktopRuntime", "src\Avalonia.DesktopRuntime\Avalonia.DesktopRuntime.csproj", "{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Packages", "Packages", "{E870DCD7-F46A-498D-83FC-D0FD13E0A11C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia", "packages\Avalonia\Avalonia.csproj", "{D49233F8-F29C-47DD-9975-C4C9E4502720}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Desktop", "src\Avalonia.Desktop\Avalonia.Desktop.csproj", "{3C471044-3640-45E3-B1B2-16D2FF8399EE}"
+EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
 		src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4
 		src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4
-		src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4
-		src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4
 		src\Shared\PlatformSupport\PlatformSupport.projitems*{7b92af71-6287-4693-9dcb-bd5b6e927e23}*SharedItemsImports = 4
 		src\Shared\RenderHelpers\RenderHelpers.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4
 		tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{dabfd304-d6a4-4752-8123-c2ccf7ac7831}*SharedItemsImports = 4
@@ -1219,30 +1219,6 @@ Global
 		{C7A69145-60B6-4882-97D6-A3921DD43978}.Release|iPhone.Build.0 = Release|Any CPU
 		{C7A69145-60B6-4882-97D6-A3921DD43978}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{C7A69145-60B6-4882-97D6-A3921DD43978}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|Any CPU.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhone.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhone.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhone.Build.0 = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{4A1ABB09-9047-4BD5-A4AD-A055E52C5EE0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 		{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
 		{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{F1FDC5B0-4654-416F-AE69-E3E9BBD87801}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1303,30 +1279,6 @@ Global
 		{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 		{29132311-1848-4FD6-AE0C-4FF841151BD3}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|Any CPU.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhone.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhone.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhone.Build.0 = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{7863EA94-F0FB-4386-BF8C-E5BFA761560A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 		{7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
 		{7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
 		{7D2D3083-71DD-4CC9-8907-39A0D86FB322}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -1591,30 +1543,6 @@ Global
 		{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Release|iPhone.Build.0 = Release|Any CPU
 		{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|Any CPU.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhone.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhone.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhone.Build.0 = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 		{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
 		{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
 		{E1240B49-7B4B-4371-A00E-068778C5CF0B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
@@ -1687,6 +1615,78 @@ Global
 		{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhone.Build.0 = Release|Any CPU
 		{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{12A91A62-C064-42CA-9A8C-A1272F354388}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|Any CPU.Build.0 = Release|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhone.Build.0 = Release|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{878FEFE0-CD14-41CB-90B0-DBCB163E8F15}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhone.Build.0 = Release|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{D49233F8-F29C-47DD-9975-C4C9E4502720}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhone.Build.0 = Release|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -1737,8 +1737,9 @@ Global
 		{E2999E4A-9086-401F-898C-AEB0AD38E676} = {9B9E3891-2366-4253-A952-D08BCEB71098}
 		{050CC912-FF49-4A8B-B534-9544017446DD} = {4ED8B739-6F4E-4CD4-B993-545E6B5CE637}
 		{F40FC0A2-1BC3-401C-BFC1-928EC4D4A9CE} = {9B9E3891-2366-4253-A952-D08BCEB71098}
-		{4ADA61C8-D191-428D-9066-EF4F0D86520F} = {4ED8B739-6F4E-4CD4-B993-545E6B5CE637}
 		{E1240B49-7B4B-4371-A00E-068778C5CF0B} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
+		{D49233F8-F29C-47DD-9975-C4C9E4502720} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C}
+		{3C471044-3640-45E3-B1B2-16D2FF8399EE} = {E870DCD7-F46A-498D-83FC-D0FD13E0A11C}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}

+ 5 - 0
Directory.Build.props

@@ -0,0 +1,5 @@
+<Project>
+  <PropertyGroup>
+      <PackageOutputPath Condition="'$(PackageOutputPath)' == ''">$(MSBuildThisFileDirectory)artifacts/nuget</PackageOutputPath>
+  </PropertyGroup>
+</Project>

+ 53 - 23
azure-pipelines.yml

@@ -4,20 +4,31 @@ jobs:
     vmImage: 'ubuntu-16.04'
   steps:
   - task: CmdLine@2
+    displayName: 'Install CastXML'
     inputs:
       script: |
         sudo apt-get update
         sudo apt-get install castxml
+
   - task: CmdLine@2
+    displayName: 'Install Cake'
     inputs:
       script: |
         dotnet tool install -g Cake.Tool --version 0.30.0
   
-  - script: |
-      export PATH="$PATH:$HOME/.dotnet/tools"
-      dotnet --info
-      printenv
-      dotnet cake build.cake -target="Azure-Linux" -configuration="Release"
+  - task: CmdLine@2
+    displayName: 'Run Cake'
+    inputs:
+      script: |
+        export PATH="$PATH:$HOME/.dotnet/tools"
+        dotnet --info
+        printenv
+        dotnet cake build.cake -target="Azure-Linux" -configuration="Release"
+
+  - task: PublishTestResults@2
+    inputs:
+      testResultsFormat: 'VSTest'
+      testResultsFiles: '$(Build.SourcesDirectory)/artifacts/test-results/*.trx'
      
 - job: macOS
   pool:
@@ -26,6 +37,7 @@ jobs:
   - task: DotNetCoreInstaller@0
     inputs:
       version: '2.1.403'
+
   - task: Xcode@5
     inputs:
       actions: 'build'
@@ -35,34 +47,47 @@ jobs:
       xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
       xcodeVersion: 'default' # Options: 8, 9, default, specifyPath
       args: '-derivedDataPath ./'
+
   - task: CmdLine@2
+    displayName: 'Install CastXML'
     inputs:
       script: brew install castxml
+
   - task: CmdLine@2
+    displayName: 'Install Cake'
     inputs:
       script: |
         dotnet tool install -g Cake.Tool --version 0.30.0
-  - script: |
-      export COREHOST_TRACE=0
-      export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
-      export DOTNET_CLI_TELEMETRY_OPTOUT=1
-      which dotnet
-      dotnet --info
-      export PATH="$PATH:$HOME/.dotnet/tools"
-      dotnet --info
-      printenv
-      dotnet cake build.cake -target="Azure-OSX" -configuration="Release"
+
+  - task: CmdLine@2
+    displayName: 'Run Cake'
+    inputs:
+      script: |
+        export COREHOST_TRACE=0
+        export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+        export DOTNET_CLI_TELEMETRY_OPTOUT=1
+        which dotnet
+        dotnet --info
+        export PATH="$PATH:$HOME/.dotnet/tools"
+        dotnet --info
+        printenv
+        dotnet cake build.cake -target="Azure-OSX" -configuration="Release"
+
+  - task: PublishTestResults@2
+    inputs:
+      testResultsFormat: 'VSTest'
+      testResultsFiles: '$(Build.SourcesDirectory)/artifacts/test-results/*.trx'
   
   - task: PublishBuildArtifacts@1
     inputs:
       pathToPublish: '$(Build.SourcesDirectory)/Build/Products/Release/'
       artifactName: 'Avalonia.Native.OSX'
     condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
-
+    
   - task: PublishBuildArtifacts@1
     inputs:
-      pathToPublish: '$(Build.SourcesDirectory)/artifacts/bin'
-      artifactName: 'BinariesOSX'
+      pathtoPublish: '$(Build.SourcesDirectory)/artifacts/nuget'
+      artifactName: 'NuGetOSX'
     condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
 
 - job: Windows
@@ -70,26 +95,31 @@ jobs:
     vmImage: 'vs2017-win2016'
   steps:
   - task: CmdLine@2
+    displayName: 'Install Cake'
     inputs:
       script: |
         dotnet tool install -g Cake.Tool --version 0.30.0
+
   - task: CmdLine@2
+    displayName: 'Run Cake'
     inputs:
       script: |
         set PATH=%PATH%;%USERPROFILE%\.dotnet\tools
         dotnet cake build.cake -target="Azure-Windows" -configuration="Release"
+      
+  - task: PublishTestResults@2
+    inputs:
+      testResultsFormat: 'VSTest'
+      testResultsFiles: '$(Build.SourcesDirectory)/artifacts/test-results/*.trx'
+
   - task: PublishBuildArtifacts@1
     inputs:
       pathtoPublish: '$(Build.SourcesDirectory)/artifacts/nuget'
       artifactName: 'NuGet'
     condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
+
   - task: PublishBuildArtifacts@1
     inputs:
       pathToPublish: '$(Build.SourcesDirectory)/artifacts/zip'
       artifactName: 'Samples'
     condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))
-  - task: PublishBuildArtifacts@1
-    inputs:
-      pathToPublish: '$(Build.SourcesDirectory)/artifacts/bin'
-      artifactName: 'BinariesWindows'
-    condition: and(succeeded(), eq(variables['system.pullrequest.isfork'], false))

+ 6 - 0
build-native.sh

@@ -0,0 +1,6 @@
+# /bin/sh
+
+mkdir native-build
+cd native-build
+cmake -DCMAKE_BUILD_TYPE=$1 ../native
+cmake --build . --target install

+ 104 - 87
build.cake

@@ -21,32 +21,14 @@ using System.Linq;
 ///////////////////////////////////////////////////////////////////////////////
 
 #load "./parameters.cake"
-#load "./packages.cake"
-
-//////////////////////////////////////////////////////////////////////
-// PARAMETERS
-//////////////////////////////////////////////////////////////////////
-
-class AvaloniaBuildData
-{
-    public AvaloniaBuildData(Parameters parameters, Packages packages)
-    {
-        Parameters = parameters;
-        Packages = packages;
-    }
-
-    public Parameters Parameters { get; }
-    public Packages Packages { get; }
-}
 
 ///////////////////////////////////////////////////////////////////////////////
 // SETUP
 ///////////////////////////////////////////////////////////////////////////////
 
-Setup<AvaloniaBuildData>(context =>
+Setup<Parameters>(context =>
 {
     var parameters = new Parameters(context);
-    var buildContext = new AvaloniaBuildData(parameters, new Packages(context, parameters));
 
     Information("Building version {0} of Avalonia ({1}) using version {2} of Cake.", 
         parameters.Version,
@@ -73,14 +55,14 @@ Setup<AvaloniaBuildData>(context =>
     Information("IsMyGetRelease: " + parameters.IsMyGetRelease);
     Information("IsNuGetRelease: " + parameters.IsNuGetRelease);
 
-    return buildContext;
+    return parameters;
 });
 
 ///////////////////////////////////////////////////////////////////////////////
 // TEARDOWN
 ///////////////////////////////////////////////////////////////////////////////
 
-Teardown<AvaloniaBuildData>((context, buildContext) =>
+Teardown<Parameters>((context, buildContext) =>
 {
     Information("Finished running tasks.");
 });
@@ -90,13 +72,13 @@ Teardown<AvaloniaBuildData>((context, buildContext) =>
 ///////////////////////////////////////////////////////////////////////////////
 
 Task("Clean-Impl")
-    .Does<AvaloniaBuildData>(data =>
+    .Does<Parameters>(data =>
 {
-    CleanDirectories(data.Parameters.BuildDirs);
-    CleanDirectory(data.Parameters.ArtifactsDir);
-    CleanDirectory(data.Parameters.NugetRoot);
-    CleanDirectory(data.Parameters.ZipRoot);
-    CleanDirectory(data.Parameters.BinRoot);
+    CleanDirectories(data.BuildDirs);
+    CleanDirectory(data.ArtifactsDir);
+    CleanDirectory(data.NugetRoot);
+    CleanDirectory(data.ZipRoot);
+    CleanDirectory(data.TestResultsRoot);
 });
 
 void DotNetCoreBuild(Parameters parameters)
@@ -104,27 +86,35 @@ void DotNetCoreBuild(Parameters parameters)
     var settings = new DotNetCoreBuildSettings 
     {
         Configuration = parameters.Configuration,
+        MSBuildSettings = new DotNetCoreMSBuildSettings
+        {
+            Properties =
+            {
+                { "PackageVersion", new [] { parameters.Version } }
+            }
+        }
     };
 
     DotNetCoreBuild(parameters.MSBuildSolution, settings);
 }
 
 Task("Build-Impl")
-    .Does<AvaloniaBuildData>(data =>
+    .Does<Parameters>(data =>
 {
-    if(data.Parameters.IsRunningOnWindows)
+    if(data.IsRunningOnWindows)
     {
-        MSBuild(data.Parameters.MSBuildSolution, settings => {
-            settings.SetConfiguration(data.Parameters.Configuration);
+        MSBuild(data.MSBuildSolution, settings => {
+            settings.SetConfiguration(data.Configuration);
             settings.SetVerbosity(Verbosity.Minimal);
             settings.WithProperty("iOSRoslynPathHackRequired", "true");
+            settings.WithProperty("PackageVersion", data.Version);
             settings.UseToolVersion(MSBuildToolVersion.VS2017);
             settings.WithRestore();
         });
     }
     else
     {
-        DotNetCoreBuild(data.Parameters);
+        DotNetCoreBuild(data);
     }
 });
 
@@ -140,56 +130,63 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
             continue;
         Information("Running for " + fw);
         
-        DotNetCoreTest(project,
-            new DotNetCoreTestSettings {
-                Configuration = parameters.Configuration,
-                Framework = fw,
-                NoBuild = true,
-                NoRestore = true
-            });
+        var settings = new DotNetCoreTestSettings {
+            Configuration = parameters.Configuration,
+            Framework = fw,
+            NoBuild = true,
+            NoRestore = true
+        };
+
+        if (parameters.PublishTestResults)
+        {
+            settings.Logger = "trx";
+            settings.ResultsDirectory = parameters.TestResultsRoot;
+        }
+
+        DotNetCoreTest(project, settings);
     }
 }
 
 Task("Run-Unit-Tests-Impl")
-    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
-    .Does<AvaloniaBuildData>(data =>
+    .WithCriteria<Parameters>((context, data) => !data.SkipTests)
+    .Does<Parameters>(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);
-    RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests", data.Parameters, false);
-    if (data.Parameters.IsRunningOnWindows)
+    RunCoreTest("./tests/Avalonia.Base.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Controls.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Input.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Layout.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Markup.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Styling.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Visuals.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.Skia.UnitTests", data, false);
+    RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests", data, false);
+    if (data.IsRunningOnWindows)
     {
-        RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data.Parameters, false);
+        RunCoreTest("./tests/Avalonia.Direct2D1.UnitTests", data, false);
     }
 });
 
 Task("Run-Designer-Tests-Impl")
-    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
-    .Does<AvaloniaBuildData>(data =>
+    .WithCriteria<Parameters>((context, data) => !data.SkipTests)
+    .Does<Parameters>(data =>
 {
-    RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data.Parameters, false);
+    RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", data, false);
 });
 
 Task("Run-Render-Tests-Impl")
-    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
-    .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows)
-    .Does<AvaloniaBuildData>(data =>
+    .WithCriteria<Parameters>((context, data) => !data.SkipTests)
+    .WithCriteria<Parameters>((context, data) => data.IsRunningOnWindows)
+    .Does<Parameters>(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);
+    RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", data, true);
+    RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", data, true);
 });
 
 Task("Run-Leak-Tests-Impl")
-    .WithCriteria<AvaloniaBuildData>((context, data) => !data.Parameters.SkipTests)
-    .WithCriteria<AvaloniaBuildData>((context, data) => data.Parameters.IsRunningOnWindows)
+    .WithCriteria<Parameters>((context, data) => !data.SkipTests)
+    .WithCriteria<Parameters>((context, data) => data.IsRunningOnWindows)
     .Does(() =>
 {
     var dotMemoryUnit = Context.Tools.Resolve("dotMemoryUnit.exe");
@@ -209,34 +206,57 @@ Task("Run-Leak-Tests-Impl")
     }
 });
 
-Task("Copy-Files-Impl")
-    .Does<AvaloniaBuildData>(data =>
-{
-    CopyFiles(data.Packages.BinFiles, data.Parameters.BinRoot);
-});
-
 Task("Zip-Files-Impl")
-    .Does<AvaloniaBuildData>(data =>
+    .Does<Parameters>(data =>
 {
-    Zip(data.Parameters.BinRoot, data.Parameters.ZipCoreArtifacts);
+    Zip(data.BinRoot, data.ZipCoreArtifacts);
 
-    Zip(data.Parameters.NugetRoot, data.Parameters.ZipNuGetArtifacts);
+    Zip(data.NugetRoot, data.ZipNuGetArtifacts);
 
-    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.ZipSourceControlCatalogDesktopDirs, 
+        data.ZipTargetControlCatalogDesktopDirs, 
+        GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dll") + 
+        GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.config") + 
+        GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.so") + 
+        GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.dylib") + 
+        GetFiles(data.ZipSourceControlCatalogDesktopDirs.FullPath + "/*.exe"));
 });
 
+void DotNetCorePack(Parameters parameters)
+{
+    var settings = new DotNetCorePackSettings 
+    {
+        Configuration = parameters.Configuration,
+        MSBuildSettings = new DotNetCoreMSBuildSettings
+        {
+            Properties =
+            {
+                { "PackageVersion", new [] { parameters.Version } }
+            }
+        }
+    };
+
+    DotNetCorePack(parameters.MSBuildSolution, settings);
+}
+
 Task("Create-NuGet-Packages-Impl")
-    .Does<AvaloniaBuildData>(data =>
+    .Does<Parameters>(data =>
 {
-    foreach(var nuspec in data.Packages.NuspecNuGetSettings)
+    if(data.IsRunningOnWindows)
     {
-        NuGetPack(nuspec);
+        MSBuild(data.MSBuildSolution, settings => {
+            settings.SetConfiguration(data.Configuration);
+            settings.SetVerbosity(Verbosity.Minimal);
+            settings.WithProperty("iOSRoslynPathHackRequired", "true");
+            settings.WithProperty("PackageVersion", data.Version);
+            settings.UseToolVersion(MSBuildToolVersion.VS2017);
+            settings.WithRestore();
+            settings.WithTarget("Pack");
+        });
+    }
+    else
+    {
+        DotNetCorePack(data);
     }
 });
 
@@ -261,7 +281,6 @@ Task("Package")
 
 Task("AppVeyor")
   .IsDependentOn("Package")
-  .IsDependentOn("Copy-Files-Impl")
   .IsDependentOn("Zip-Files-Impl");
 
 Task("Travis")
@@ -271,13 +290,11 @@ Task("Azure-Linux")
   .IsDependentOn("Run-Tests");
 
 Task("Azure-OSX")
-  .IsDependentOn("Run-Tests")
-  .IsDependentOn("Copy-Files-Impl")
+  .IsDependentOn("Package")
   .IsDependentOn("Zip-Files-Impl");
 
 Task("Azure-Windows")
   .IsDependentOn("Package")
-  .IsDependentOn("Copy-Files-Impl")
   .IsDependentOn("Zip-Files-Impl");
 
 ///////////////////////////////////////////////////////////////////////////////

+ 20 - 0
build/CoreLibraries.props

@@ -0,0 +1,20 @@
+<Project>
+  <ItemGroup>
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Base/Avalonia.Base.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Animation/Avalonia.Animation.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Controls/Avalonia.Controls.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Input/Avalonia.Input.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Interactivity/Avalonia.Interactivity.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Layout/Avalonia.Layout.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Visuals/Avalonia.Visuals.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Styling/Avalonia.Styling.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.OpenGL/Avalonia.OpenGL.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Markup/Avalonia.Markup/Avalonia.Markup.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj" />
+      <ProjectReference Include="$(MSBuildThisFileDirectory)/../src/Avalonia.DesktopRuntime/Avalonia.DesktopRuntime.csproj" Condition="'$(TargetFramework)' != 'netstandard2.0'" />
+  </ItemGroup>
+</Project>

+ 3 - 0
build/LegacyProject.targets

@@ -0,0 +1,3 @@
+<Project>
+  <Target Name="Pack" />
+</Project>

+ 6 - 0
build/ReferenceCoreLibraries.props

@@ -0,0 +1,6 @@
+<Project>
+  <Import Condition="'$(TargetFramework)' == 'netcoreapp2.0'" Project="CoreLibraries.props" />
+  <ItemGroup>
+      <ProjectReference Include="$(MSBuildThisFileDirectory)../packages/Avalonia/Avalonia.csproj" />
+  </ItemGroup>
+</Project>

+ 0 - 4
build/Rx.props

@@ -1,9 +1,5 @@
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
     <PackageReference Include="System.Reactive" Version="4.0.0" />
-    <PackageReference Include="System.Reactive.Core" Version="4.0.0" />
-    <PackageReference Include="System.Reactive.Interfaces" Version="4.0.0" />
-    <PackageReference Include="System.Reactive.Linq" Version="4.0.0" />
-    <PackageReference Include="System.Reactive.PlatformServices" Version="4.0.0" />
   </ItemGroup>
 </Project>

+ 1 - 6
build/SampleApp.props

@@ -2,12 +2,7 @@
   <PropertyGroup Condition="'$(TargetFramework)'=='net461'" >
     <OutputType>WinExe</OutputType>
   </PropertyGroup>
-
-  <!-- Should be a Condition="'$(TargetFramework)'=='net461'" here but that doesn't work due
-       to https://github.com/dotnet/sdk/issues/1227 -->
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Windows\Avalonia.Win32\Avalonia.Win32.csproj" />
-    <ProjectReference Include="..\..\src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj" />
+    <ProjectReference Include="$(MSBuildThisFileDirectory)..\src\Avalonia.Desktop\Avalonia.Desktop.csproj" />
   </ItemGroup>
-  <Import Condition="'$(TargetFramework)'=='net461'" Project="SharpDX.props" />
 </Project>

+ 1 - 1
build/System.Drawing.Common.props

@@ -1,5 +1,5 @@
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <PackageReference Include="System.Drawing.Common" Version="4.5.0-preview1-25914-04" />
+    <PackageReference Include="System.Drawing.Common" Version="4.5.0" />
   </ItemGroup>
 </Project>

+ 1 - 1
dirs.proj

@@ -3,9 +3,9 @@
     <ProjectReference Include="src/**/*.*proj" />
     <ProjectReference Include="samples/**/*.*proj" />
     <ProjectReference Include="tests/**/*.*proj" />
+    <ProjectReference Include="packages/**/*.*proj" />
     <ProjectReference Remove="**/*.shproj" />
     <ProjectReference Remove="src/Markup/Avalonia.Markup.Xaml/PortableXaml/**/*.*proj" />
-    <ProjectReference Remove="**/*.pbxproj" />
   </ItemGroup>
   <ItemGroup Condition="!Exists('$(MSBuildExtensionsPath)\Xamarin\Android')">
     <ProjectReference Remove="src/Android/**/*.*proj" />

+ 3 - 2
global.json

@@ -1,6 +1,7 @@
 {
     "msbuild-sdks": {
-        "Microsoft.Build.Traversal": "1.0.41",
-        "MSBuild.Sdk.Extras": "1.6.46"
+        "Microsoft.Build.Traversal": "1.0.43",
+        "MSBuild.Sdk.Extras": "1.6.46",
+        "AggregatePackage.NuGet.Sdk" : "0.1.12"
     }
 }

+ 0 - 0
src/Avalonia.Native/headers/avalonia-native-guids.h → native/Avalonia.Native/inc/avalonia-native-guids.h


+ 0 - 0
src/Avalonia.Native/headers/avalonia-native.h → native/Avalonia.Native/inc/avalonia-native.h


+ 0 - 0
src/Avalonia.Native/headers/com.h → native/Avalonia.Native/inc/com.h


+ 5 - 4
src/Avalonia.Native/headers/comimpl.h → native/Avalonia.Native/inc/comimpl.h

@@ -63,19 +63,20 @@ public:
 
 
 #define FORWARD_IUNKNOWN() \
-virtual ULONG Release(){ \
+virtual ULONG Release() override \
+{ \
 return ComObject::Release(); \
 } \
-virtual ULONG AddRef() \
+virtual ULONG AddRef() override \
 { \
     return ComObject::AddRef(); \
 } \
-virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) \
+virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) override \
 { \
     return ComObject::QueryInterface(riid, ppvObject); \
 }
 
-#define BEGIN_INTERFACE_MAP() public: virtual HRESULT STDMETHODCALLTYPE QueryInterfaceImpl(REFIID riid, void **ppvObject){
+#define BEGIN_INTERFACE_MAP() public: virtual HRESULT STDMETHODCALLTYPE QueryInterfaceImpl(REFIID riid, void **ppvObject) override {
 #define INTERFACE_MAP_ENTRY(TInterface, IID) if(0 == memcmp(riid, &IID, sizeof(GUID))) { TInterface* casted = this; *ppvObject = casted; return S_OK; }
 #define END_INTERFACE_MAP() return E_NOINTERFACE; }
 #define INHERIT_INTERFACE_MAP(TBase) if(TBase::QueryInterfaceImpl(riid, ppvObject) == S_OK) return S_OK;

+ 0 - 0
src/Avalonia.Native/headers/key.h → native/Avalonia.Native/inc/key.h


+ 0 - 0
src/Avalonia.Native.OSX/.gitignore → native/Avalonia.Native/src/OSX/.gitignore


+ 3 - 3
src/Avalonia.Native.OSX/Avalonia.Native.OSX.xcodeproj/project.pbxproj → native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.pbxproj

@@ -22,7 +22,7 @@
 
 /* Begin PBXFileReference section */
 		379860FE214DA0C000CD0246 /* KeyTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KeyTransform.h; sourceTree = "<group>"; };
-		37A4E71A2178846A00EACBCD /* headers */ = {isa = PBXFileReference; lastKnownFileType = folder; name = headers; path = ../Avalonia.Native/headers; sourceTree = "<group>"; };
+		37A4E71A2178846A00EACBCD /* headers */ = {isa = PBXFileReference; lastKnownFileType = folder; name = headers; path = ../../inc; sourceTree = "<group>"; };
 		37A517B22159597E00FBA241 /* Screens.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Screens.mm; sourceTree = "<group>"; };
 		37C09D8721580FE4006A6758 /* SystemDialogs.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SystemDialogs.mm; sourceTree = "<group>"; };
 		37C09D8A21581EF2006A6758 /* window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = window.h; sourceTree = "<group>"; };
@@ -285,7 +285,7 @@
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
 				EXECUTABLE_PREFIX = lib;
-				HEADER_SEARCH_PATHS = ../Avalonia.Native/headers;
+				HEADER_SEARCH_PATHS = ../../inc;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Debug;
@@ -296,7 +296,7 @@
 				DYLIB_COMPATIBILITY_VERSION = 1;
 				DYLIB_CURRENT_VERSION = 1;
 				EXECUTABLE_PREFIX = lib;
-				HEADER_SEARCH_PATHS = ../Avalonia.Native/headers;
+				HEADER_SEARCH_PATHS = ../../inc;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 			};
 			name = Release;

+ 0 - 0
src/Avalonia.Native.OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata → native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/project.xcworkspace/contents.xcworkspacedata


+ 1 - 1
src/Avalonia.Native.OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme → native/Avalonia.Native/src/OSX/Avalonia.Native.OSX.xcodeproj/xcshareddata/xcschemes/Avalonia.Native.OSX.xcscheme

@@ -38,7 +38,7 @@
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "YES"
-      customWorkingDirectory = "$PROJECT_DIR/../../samples/ControlCatalog"
+      customWorkingDirectory = "$PROJECT_DIR/../../../../samples/ControlCatalog"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "YES"
       debugServiceExtension = "internal"

+ 0 - 0
src/Avalonia.Native.OSX/KeyTransform.h → native/Avalonia.Native/src/OSX/KeyTransform.h


+ 0 - 0
src/Avalonia.Native.OSX/KeyTransform.mm → native/Avalonia.Native/src/OSX/KeyTransform.mm


+ 2 - 2
src/Avalonia.Native.OSX/Screens.mm → native/Avalonia.Native/src/OSX/Screens.mm

@@ -7,7 +7,7 @@ class Screens : public ComSingleObject<IAvnScreens, &IID_IAvnScreens>
 {
     public:
     FORWARD_IUNKNOWN()
-    virtual HRESULT GetScreenCount (int* ret)
+    virtual HRESULT GetScreenCount (int* ret) override
     {
         @autoreleasepool
         {
@@ -17,7 +17,7 @@ class Screens : public ComSingleObject<IAvnScreens, &IID_IAvnScreens>
         }
     }
     
-    virtual HRESULT GetScreen (int index, AvnScreen* ret)
+    virtual HRESULT GetScreen (int index, AvnScreen* ret) override
     {
         @autoreleasepool
         {

+ 3 - 3
src/Avalonia.Native.OSX/SystemDialogs.mm → native/Avalonia.Native/src/OSX/SystemDialogs.mm

@@ -11,7 +11,7 @@ public:
     virtual void SelectFolderDialog (IAvnWindow* parentWindowHandle,
                                      IAvnSystemDialogEvents* events,
                                      const char* title,
-                                     const char* initialDirectory)
+                                     const char* initialDirectory) override
     {
         @autoreleasepool
         {
@@ -88,7 +88,7 @@ public:
                                  const char* title,
                                  const char* initialDirectory,
                                  const char* initialFile,
-                                 const char* filters)
+                                 const char* filters) override
     {
         @autoreleasepool
         {
@@ -179,7 +179,7 @@ public:
                                  const char* title,
                                  const char* initialDirectory,
                                  const char* initialFile,
-                                 const char* filters)
+                                 const char* filters) override
     {
         @autoreleasepool
         {

+ 3 - 3
src/Avalonia.Native.OSX/clipboard.mm → native/Avalonia.Native/src/OSX/clipboard.mm

@@ -7,7 +7,7 @@ class Clipboard : public ComSingleObject<IAvnClipboard, &IID_IAvnClipboard>
 {
 public:
     FORWARD_IUNKNOWN()
-    virtual HRESULT GetText (void** retOut)
+    virtual HRESULT GetText (void** retOut) override
     {
         @autoreleasepool
         {
@@ -18,7 +18,7 @@ public:
         return S_OK;
     }
     
-    virtual HRESULT SetText (char* text)
+    virtual HRESULT SetText (char* text) override
     {
         @autoreleasepool
         {
@@ -30,7 +30,7 @@ public:
         return S_OK;
     }
 
-    virtual HRESULT Clear()
+    virtual HRESULT Clear() override
     {
         @autoreleasepool
         {

+ 0 - 0
src/Avalonia.Native.OSX/common.h → native/Avalonia.Native/src/OSX/common.h


+ 0 - 0
src/Avalonia.Native.OSX/cursor.h → native/Avalonia.Native/src/OSX/cursor.h


+ 1 - 1
src/Avalonia.Native.OSX/cursor.mm → native/Avalonia.Native/src/OSX/cursor.mm

@@ -51,7 +51,7 @@ class CursorFactory : public ComSingleObject<IAvnCursorFactory, &IID_IAvnCursorF
 
 public:
     FORWARD_IUNKNOWN()
-    virtual HRESULT GetCursor (AvnStandardCursorType cursorType, IAvnCursor** retOut)
+    virtual HRESULT GetCursor (AvnStandardCursorType cursorType, IAvnCursor** retOut) override
     {
         *retOut = s_cursorMap[cursorType];
         

+ 10 - 10
src/Avalonia.Native.OSX/gl.mm → native/Avalonia.Native/src/OSX/gl.mm

@@ -48,7 +48,7 @@ public:
     }
     
     
-    virtual HRESULT MakeCurrent()
+    virtual HRESULT MakeCurrent()  override
     {
         [GlContext makeCurrentContext];/*
         glBindFramebufferEXT(GL_FRAMEBUFFER, Framebuffer);
@@ -75,24 +75,24 @@ public:
         _libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib", RTLD_LAZY);
     }
     
-    virtual HRESULT GetSampleCount(int* ret)
+    virtual HRESULT GetSampleCount(int* ret)  override
     {
         *ret = _sampleCount;
         return S_OK;
     }
-    virtual HRESULT GetStencilSize(int* ret)
+    virtual HRESULT GetStencilSize(int* ret) override
     {
         *ret = _stencilSize;
         return S_OK;
     }
     
-    virtual HRESULT ClearContext()
+    virtual HRESULT ClearContext()  override
     {
         [NSOpenGLContext clearCurrentContext];
         return S_OK;
     }
     
-    virtual void* GetProcAddress(char* proc)
+    virtual void* GetProcAddress(char* proc)  override
     {
         return dlsym(_libgl, proc);
     }
@@ -121,14 +121,14 @@ public:
         //return [[NSOpenGLContext alloc] initWithFormat:_format shareContext:nil];
     }
     
-    virtual HRESULT ObtainDisplay(IAvnGlDisplay**retOut)
+    virtual HRESULT ObtainDisplay(IAvnGlDisplay**retOut)  override
     {
         *retOut = _display;
         _display->AddRef();
         return S_OK;
     }
     
-    virtual HRESULT ObtainImmediateContext(IAvnGlContext**retOut)
+    virtual HRESULT ObtainImmediateContext(IAvnGlContext**retOut)  override
     {
         *retOut = _immediate;
         _immediate->AddRef();
@@ -193,14 +193,14 @@ public:
         _view = view;
     }
     
-    virtual HRESULT GetPixelSize(AvnPixelSize* ret)
+    virtual HRESULT GetPixelSize(AvnPixelSize* ret)  override
     {
         auto fsize = [_view convertSizeToBacking: [_view frame].size];
         ret->Width = (int)fsize.width;
         ret->Height = (int)fsize.height;
         return S_OK;
     }
-    virtual HRESULT GetScaling(double* ret)
+    virtual HRESULT GetScaling(double* ret)  override
     {
         *ret = [_window backingScaleFactor];
         return S_OK;
@@ -230,7 +230,7 @@ public:
         _context = GetFeature()->CreateContext();
     }
     
-    virtual HRESULT BeginDrawing(IAvnGlSurfaceRenderingSession** ret)
+    virtual HRESULT BeginDrawing(IAvnGlSurfaceRenderingSession** ret)  override
     {
         auto f = GetFeature();
         if(f == NULL)

+ 11 - 11
src/Avalonia.Native.OSX/main.mm → native/Avalonia.Native/src/OSX/main.mm

@@ -16,7 +16,7 @@ class MacOptions : public ComSingleObject<IAvnMacOptions, &IID_IAvnMacOptions>
 {
 public:
     FORWARD_IUNKNOWN()
-    virtual HRESULT SetShowInDock(int show)
+    virtual HRESULT SetShowInDock(int show)  override
     {
         ShowInDock = show;
         SetActivationPolicy();
@@ -64,7 +64,7 @@ class AvaloniaNative : public ComSingleObject<IAvaloniaNativeFactory, &IID_IAval
     
 public:
     FORWARD_IUNKNOWN()
-    virtual HRESULT Initialize()
+    virtual HRESULT Initialize() override
     {
         @autoreleasepool{
             [[ThreadingInitializer new] do];
@@ -72,12 +72,12 @@ public:
         }
     };
     
-    virtual IAvnMacOptions* GetMacOptions()
+    virtual IAvnMacOptions* GetMacOptions()  override
     {
         return (IAvnMacOptions*)new MacOptions();
     }
     
-    virtual HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnWindow** ppv)
+    virtual HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnWindow** ppv)  override
     {
         if(cb == nullptr || ppv == nullptr)
             return E_POINTER;
@@ -85,7 +85,7 @@ public:
         return S_OK;
     };
     
-    virtual HRESULT CreatePopup(IAvnWindowEvents* cb, IAvnPopup** ppv)
+    virtual HRESULT CreatePopup(IAvnWindowEvents* cb, IAvnPopup** ppv) override
     {
         if(cb == nullptr || ppv == nullptr)
             return E_POINTER;
@@ -94,37 +94,37 @@ public:
         return S_OK;
     }
     
-    virtual HRESULT CreatePlatformThreadingInterface(IAvnPlatformThreadingInterface** ppv)
+    virtual HRESULT CreatePlatformThreadingInterface(IAvnPlatformThreadingInterface** ppv)  override
     {
         *ppv = CreatePlatformThreading();
         return S_OK;
     }
     
-    virtual HRESULT CreateSystemDialogs(IAvnSystemDialogs** ppv)
+    virtual HRESULT CreateSystemDialogs(IAvnSystemDialogs** ppv) override
     {
         *ppv = ::CreateSystemDialogs();
         return  S_OK;
     }
     
-    virtual HRESULT CreateScreens (IAvnScreens** ppv)
+    virtual HRESULT CreateScreens (IAvnScreens** ppv) override
     {
         *ppv = ::CreateScreens ();
         return S_OK;
     }
 
-    virtual HRESULT CreateClipboard(IAvnClipboard** ppv)
+    virtual HRESULT CreateClipboard(IAvnClipboard** ppv) override
     {
         *ppv = ::CreateClipboard ();
         return S_OK;
     }
 
-    virtual HRESULT CreateCursorFactory(IAvnCursorFactory** ppv)
+    virtual HRESULT CreateCursorFactory(IAvnCursorFactory** ppv) override
     {
         *ppv = ::CreateCursorFactory();
         return S_OK;
     }
     
-    virtual HRESULT ObtainGlFeature(IAvnGlFeature** ppv)
+    virtual HRESULT ObtainGlFeature(IAvnGlFeature** ppv) override
     {
         auto rv = ::GetGlFeature();
         if(rv == NULL)

+ 7 - 7
src/Avalonia.Native.OSX/platformthreading.mm → native/Avalonia.Native/src/OSX/platformthreading.mm

@@ -63,7 +63,7 @@ private:
     public:
         FORWARD_IUNKNOWN()
         bool Cancelled = 0;
-        virtual void Cancel()
+        virtual void Cancel() override
         {
             Cancelled = 1;
         }
@@ -86,20 +86,20 @@ public:
         _signaler = NULL;
     }
     
-    virtual bool GetCurrentThreadIsLoopThread()
+    virtual bool GetCurrentThreadIsLoopThread() override
     {
         return [[NSThread currentThread] isMainThread];
     }
-    virtual void SetSignaledCallback(IAvnSignaledCallback* cb)
+    virtual void SetSignaledCallback(IAvnSignaledCallback* cb) override
     {
         SignaledCallback = cb;
     }
-    virtual IAvnLoopCancellation* CreateLoopCancellation()
+    virtual IAvnLoopCancellation* CreateLoopCancellation() override
     {
         return new LoopCancellation();
     }
     
-    virtual void RunLoop(IAvnLoopCancellation* cancel)
+    virtual void RunLoop(IAvnLoopCancellation* cancel) override
     {
         @autoreleasepool {
             auto can = dynamic_cast<LoopCancellation*>(cancel);
@@ -125,12 +125,12 @@ public:
         }
     }
     
-    virtual void Signal(int priority)
+    virtual void Signal(int priority) override
     {
         [_signaler signal:priority];
     }
     
-    virtual IUnknown* StartTimer(int priority, int ms, IAvnActionCallback* callback)
+    virtual IUnknown* StartTimer(int priority, int ms, IAvnActionCallback* callback) override
     {
         @autoreleasepool {
             

+ 0 - 0
src/Avalonia.Native.OSX/window.h → native/Avalonia.Native/src/OSX/window.h


+ 37 - 37
src/Avalonia.Native.OSX/window.mm → native/Avalonia.Native/src/OSX/window.mm

@@ -81,12 +81,12 @@ public:
         [Window setContentView: View];
     }
     
-    virtual AvnWindow* GetNSWindow()
+    virtual AvnWindow* GetNSWindow() override
     {
         return Window;
     }
     
-    virtual HRESULT Show()
+    virtual HRESULT Show() override
     {
         @autoreleasepool
         {
@@ -102,7 +102,7 @@ public:
         }
     }
     
-    virtual HRESULT Hide ()
+    virtual HRESULT Hide () override
     {
         @autoreleasepool
         {
@@ -115,7 +115,7 @@ public:
         }
     }
     
-    virtual HRESULT Activate ()
+    virtual HRESULT Activate () override
     {
         @autoreleasepool
         {
@@ -128,7 +128,7 @@ public:
         return S_OK;
     }
     
-    virtual HRESULT SetTopMost (bool value)
+    virtual HRESULT SetTopMost (bool value) override
     {
         @autoreleasepool
         {
@@ -138,7 +138,7 @@ public:
         }
     }
     
-    virtual HRESULT Close()
+    virtual HRESULT Close() override
     {
         @autoreleasepool
         {
@@ -147,7 +147,7 @@ public:
         }
     }
     
-    virtual HRESULT GetClientSize(AvnSize* ret)
+    virtual HRESULT GetClientSize(AvnSize* ret) override
     {
         @autoreleasepool
         {
@@ -160,7 +160,7 @@ public:
         }
     }
     
-    virtual HRESULT GetMaxClientSize(AvnSize* ret)
+    virtual HRESULT GetMaxClientSize(AvnSize* ret) override
     {
         @autoreleasepool
         {
@@ -176,7 +176,7 @@ public:
         }
     }
     
-    virtual HRESULT GetScaling (double* ret)
+    virtual HRESULT GetScaling (double* ret) override
     {
         @autoreleasepool
         {
@@ -194,7 +194,7 @@ public:
         }
     }
     
-    virtual HRESULT SetMinMaxSize (AvnSize minSize, AvnSize maxSize)
+    virtual HRESULT SetMinMaxSize (AvnSize minSize, AvnSize maxSize) override
     {
         @autoreleasepool
         {
@@ -205,7 +205,7 @@ public:
         }
     }
     
-    virtual HRESULT Resize(double x, double y)
+    virtual HRESULT Resize(double x, double y) override
     {
         @autoreleasepool
         {
@@ -215,7 +215,7 @@ public:
         }
     }
     
-    virtual HRESULT Invalidate (AvnRect rect)
+    virtual HRESULT Invalidate (AvnRect rect) override
     {
         @autoreleasepool
         {
@@ -225,7 +225,7 @@ public:
         }
     }
     
-    virtual bool TryLock()
+    virtual bool TryLock() override
     {
         @autoreleasepool
         {
@@ -233,7 +233,7 @@ public:
         }
     }
     
-    virtual void Unlock()
+    virtual void Unlock() override
     {
         @autoreleasepool
         {
@@ -241,7 +241,7 @@ public:
         }
     }
     
-    virtual HRESULT BeginMoveDrag ()
+    virtual HRESULT BeginMoveDrag () override
     {
         @autoreleasepool
         {
@@ -258,12 +258,12 @@ public:
         }
     }
     
-    virtual HRESULT BeginResizeDrag (AvnWindowEdge edge)
+    virtual HRESULT BeginResizeDrag (AvnWindowEdge edge) override
     {
         return S_OK;
     }
     
-    virtual HRESULT GetPosition (AvnPoint* ret)
+    virtual HRESULT GetPosition (AvnPoint* ret) override
     {
         @autoreleasepool
         {
@@ -283,7 +283,7 @@ public:
         }
     }
     
-    virtual HRESULT SetPosition (AvnPoint point)
+    virtual HRESULT SetPosition (AvnPoint point) override
     {
         @autoreleasepool
         {
@@ -294,7 +294,7 @@ public:
         }
     }
     
-    virtual HRESULT PointToClient (AvnPoint point, AvnPoint* ret)
+    virtual HRESULT PointToClient (AvnPoint point, AvnPoint* ret) override
     {
         @autoreleasepool
         {
@@ -312,7 +312,7 @@ public:
         }
     }
     
-    virtual HRESULT PointToScreen (AvnPoint point, AvnPoint* ret)
+    virtual HRESULT PointToScreen (AvnPoint point, AvnPoint* ret) override
     {
         @autoreleasepool
         {
@@ -329,13 +329,13 @@ public:
         }
     }
     
-    virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose)
+    virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose) override
     {
         [View setSwRenderedFrame: fb dispose: dispose];
         return S_OK;
     }
     
-    virtual HRESULT GetSoftwareFramebuffer(AvnFramebuffer*ret)
+    virtual HRESULT GetSoftwareFramebuffer(AvnFramebuffer*ret) override
     {
         if(![[NSThread currentThread] isMainThread])
             return E_FAIL;
@@ -345,7 +345,7 @@ public:
         return S_OK;
     }
     
-    virtual HRESULT SetCursor(IAvnCursor* cursor)
+    virtual HRESULT SetCursor(IAvnCursor* cursor) override
     {
         @autoreleasepool
         {
@@ -367,7 +367,7 @@ public:
         }
     }
     
-    virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ppv)
+    virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ppv) override
     {
         if(View == NULL)
             return E_FAIL;
@@ -440,7 +440,7 @@ private:
         [Window setCanBecomeKeyAndMain];
     }
     
-    virtual HRESULT Show ()
+    virtual HRESULT Show () override
     {
         @autoreleasepool
         {
@@ -450,7 +450,7 @@ private:
         }
     }
     
-    virtual HRESULT ShowDialog (IUnknown**ppv)
+    virtual HRESULT ShowDialog (IUnknown**ppv) override
     {
         @autoreleasepool
         {
@@ -475,7 +475,7 @@ private:
         }
     }
     
-    void WindowStateChanged ()
+    void WindowStateChanged () override
     {
         AvnWindowState state;
         GetWindowState(&state);
@@ -509,7 +509,7 @@ private:
         }
     }
     
-    virtual HRESULT SetCanResize(bool value)
+    virtual HRESULT SetCanResize(bool value) override
     {
         @autoreleasepool
         {
@@ -519,7 +519,7 @@ private:
         }
     }
     
-    virtual HRESULT SetHasDecorations(bool value)
+    virtual HRESULT SetHasDecorations(bool value) override
     {
         @autoreleasepool
         {
@@ -530,7 +530,7 @@ private:
         }
     }
     
-    virtual HRESULT SetTitle (const char* title)
+    virtual HRESULT SetTitle (const char* title) override
     {
         @autoreleasepool
         {
@@ -542,7 +542,7 @@ private:
         }
     }
     
-    virtual HRESULT SetTitleBarColor(AvnColor color)
+    virtual HRESULT SetTitleBarColor(AvnColor color) override
     {
         @autoreleasepool
         {
@@ -571,7 +571,7 @@ private:
         return S_OK;
     }
     
-    virtual HRESULT GetWindowState (AvnWindowState*ret)
+    virtual HRESULT GetWindowState (AvnWindowState*ret) override
     {
         @autoreleasepool
         {
@@ -598,7 +598,7 @@ private:
         }
     }
     
-    virtual HRESULT SetWindowState (AvnWindowState state)
+    virtual HRESULT SetWindowState (AvnWindowState state) override
     {
         @autoreleasepool
         {
@@ -642,7 +642,7 @@ private:
     }
     
 protected:
-    virtual void OnResized ()
+    virtual void OnResized () override
     {
         auto windowState = [Window isMiniaturized] ? Minimized
         : (IsZoomed() ? Maximized : Normal);
@@ -655,7 +655,7 @@ protected:
         }
     }
     
-    virtual NSWindowStyleMask GetStyle()
+    virtual NSWindowStyleMask GetStyle() override
     {
         unsigned long s = NSWindowStyleMaskBorderless;
         if(_hasDecorations)
@@ -1192,12 +1192,12 @@ private:
     }
     
 protected:
-    virtual NSWindowStyleMask GetStyle()
+    virtual NSWindowStyleMask GetStyle() override
     {
         return NSWindowStyleMaskBorderless;
     }
     
-    virtual HRESULT Resize(double x, double y)
+    virtual HRESULT Resize(double x, double y) override
     {
         @autoreleasepool
         {

+ 0 - 508
packages.cake

@@ -1,508 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Xml.Linq;
-
-public class Packages
-{
-    public List<NuGetPackSettings> NuspecNuGetSettings { get; private set; }
-    public FilePath[] NugetPackages { get; private set; }
-    public FilePath[] BinFiles { get; private set; }
-    public string NugetPackagesDir {get; private set;}
-    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;
-        }
-        
-        string GetVersion(string name)
-        {
-            return _parent.PackageVersions[name].First().Item1;
-        }
-
-        public DependencyBuilder Dep(string name, params string[] fws)
-        {
-            if(fws.Length == 0)
-                Add(new NuSpecDependency() { Id = name, Version = GetVersion(name) });
-            foreach(var fw in fws)
-                Add(new NuSpecDependency() { Id = name, TargetFramework = fw, Version = GetVersion(name) });
-            return this;
-        }
-        public DependencyBuilder Deps(string[] fws, params string[] deps)
-        {
-            foreach(var fw in fws)
-                foreach(var name in deps)
-                    Add(new NuSpecDependency() { Id = name, TargetFramework = fw, Version = GetVersion(name) });
-            return this;
-        }
-    }
-        
-    public Packages(ICakeContext context, Parameters parameters)
-    {
-        // NUGET NUSPECS
-        context.Information("Getting git modules:");
-
-        var ignoredSubModulesPaths = System.IO.File.ReadAllLines(".git/config").Where(m=>m.StartsWith("[submodule ")).Select(m => 
-        {
-            var path = m.Split(' ')[1].Trim("\"[] \t".ToArray());
-            context.Information(path);
-            return ((DirectoryPath)context.Directory(path)).FullPath;
-        }).ToList();
-
-        var normalizePath = new Func<string, string>(
-            path => path.Replace(System.IO.Path.DirectorySeparatorChar, System.IO.Path.AltDirectorySeparatorChar).ToUpperInvariant());
-
-        // Key: Package Id
-        // Value is Tuple where Item1: Package Version, Item2: The *.csproj/*.props file path.
-        var packageVersions = new Dictionary<string, IList<Tuple<string,string>>>();
-        PackageVersions = packageVersions;
-        System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./build")).FullPath,
-            "*.props", SearchOption.AllDirectories).ToList().ForEach(fileName =>
-        {
-            if (!ignoredSubModulesPaths.Any(i => normalizePath(fileName).Contains(normalizePath(i))))
-            {
-                var xdoc = XDocument.Load(fileName);
-                foreach (var reference in xdoc.Descendants().Where(x => x.Name.LocalName == "PackageReference"))
-                {
-                    var name = reference.Attribute("Include").Value;
-                    var versionAttribute = reference.Attribute("Version");
-                    var version = versionAttribute != null 
-                        ? versionAttribute.Value 
-                        : reference.Elements().First(x=>x.Name.LocalName == "Version").Value;
-                    IList<Tuple<string, string>> versions;
-                    packageVersions.TryGetValue(name, out versions);
-                    if (versions == null)
-                    {
-                        versions = new List<Tuple<string, string>>();
-                        packageVersions[name] = versions;
-                    }
-                    versions.Add(Tuple.Create(version, fileName));
-                }
-            }
-        });
-
-        context.Information("Checking installed NuGet package dependencies versions:");
-
-        packageVersions.ToList().ForEach(package =>
-        {
-            var packageVersion = package.Value.First().Item1;
-            bool isValidVersion = package.Value.All(x => x.Item1 == packageVersion);
-            if (!isValidVersion)
-            {
-                context.Information("Error: package {0} has multiple versions installed:", package.Key);
-                foreach (var v in package.Value)
-                {
-                    context.Information("{0}, file: {1}", v.Item1, v.Item2);
-                }
-                throw new Exception("Detected multiple NuGet package version installed for different projects.");
-            }
-        });
-
-        context.Information("Setting NuGet package dependencies versions:");
-
-        var SerilogVersion = packageVersions["Serilog"].FirstOrDefault().Item1;
-        var SerilogSinksDebugVersion = packageVersions["Serilog.Sinks.Debug"].FirstOrDefault().Item1;
-        var SerilogSinksTraceVersion = packageVersions["Serilog.Sinks.Trace"].FirstOrDefault().Item1;
-        var SystemReactiveVersion = packageVersions["System.Reactive"].FirstOrDefault().Item1;
-        var ReactiveUIVersion = packageVersions["reactiveui"].FirstOrDefault().Item1;
-        var SystemValueTupleVersion = packageVersions["System.ValueTuple"].FirstOrDefault().Item1;
-        SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1;
-		SkiaSharpLinuxVersion = packageVersions["Avalonia.Skia.Linux.Natives"].FirstOrDefault().Item1;
-        var SharpDXVersion = packageVersions["SharpDX"].FirstOrDefault().Item1;
-        var SharpDXDirect2D1Version = packageVersions["SharpDX.Direct2D1"].FirstOrDefault().Item1;
-        var SharpDXDirect3D11Version = packageVersions["SharpDX.Direct3D11"].FirstOrDefault().Item1;
-        var SharpDXDirect3D9Version = packageVersions["SharpDX.Direct3D9"].FirstOrDefault().Item1;
-        var SharpDXDXGIVersion = packageVersions["SharpDX.DXGI"].FirstOrDefault().Item1;
-        var SystemMemoryVersion = packageVersions["System.Memory"].FirstOrDefault().Item1;
-
-        context.Information("Package: Serilog, version: {0}", SerilogVersion);
-        context.Information("Package: System.Reactive, version: {0}", SystemReactiveVersion);
-        context.Information("Package: reactiveui, version: {0}", ReactiveUIVersion);
-        context.Information("Package: System.ValueTuple, version: {0}", SystemValueTupleVersion);
-        context.Information("Package: SkiaSharp, version: {0}", SkiaSharpVersion);
-        context.Information("Package: Avalonia.Skia.Linux.Natives, version: {0}", SkiaSharpLinuxVersion);
-        context.Information("Package: SharpDX, version: {0}", SharpDXVersion);
-        context.Information("Package: SharpDX.Direct2D1, version: {0}", SharpDXDirect2D1Version);
-        context.Information("Package: SharpDX.Direct3D11, version: {0}", SharpDXDirect3D11Version);
-        context.Information("Package: SharpDX.Direct3D9, version: {0}", SharpDXDirect3D9Version);
-        context.Information("Package: SharpDX.DXGI, version: {0}", SharpDXDXGIVersion);
-        context.Information("Package: System.Memory, version: {0}", SystemMemoryVersion);
-
-        var nugetPackagesDir = System.Environment.GetEnvironmentVariable("NUGET_HOME")
-            ?? System.IO.Path.Combine(System.Environment.GetEnvironmentVariable("USERPROFILE") ?? System.Environment.GetEnvironmentVariable("HOME"), ".nuget");
-        
-        NugetPackagesDir = System.IO.Path.Combine(nugetPackagesDir, "packages");
-        
-        var SetNuGetNuspecCommonProperties = new Action<NuGetPackSettings> ((nuspec) => {
-            nuspec.Version = parameters.Version;
-            nuspec.Authors = new [] { "Avalonia Team" };
-            nuspec.Owners = new [] { "stevenk" };
-            nuspec.LicenseUrl = new Uri("http://opensource.org/licenses/MIT");
-            nuspec.ProjectUrl = new Uri("https://github.com/AvaloniaUI/Avalonia/");
-            nuspec.RequireLicenseAcceptance = false;
-            nuspec.Symbols = false;
-            nuspec.NoPackageAnalysis = true;
-            nuspec.Description = "The Avalonia UI framework";
-            nuspec.Copyright = "Copyright 2018";
-            nuspec.Tags = new [] { "Avalonia" };
-        });
-
-        var coreLibraries = new string[][]
-        {
-            new [] { "./src/", "Avalonia.Animation"},
-            new [] { "./src/", "Avalonia.Base"},
-            new [] { "./src/", "Avalonia.Controls"},
-            new [] { "./src/", "Avalonia.DesignerSupport"},
-            new [] { "./src/", "Avalonia.Diagnostics"},
-            new [] { "./src/", "Avalonia.Input"},
-            new [] { "./src/", "Avalonia.Interactivity"},
-            new [] { "./src/", "Avalonia.Layout"},
-            new [] { "./src/", "Avalonia.Logging.Serilog"},
-            new [] { "./src/", "Avalonia.Visuals"},
-            new [] { "./src/", "Avalonia.Styling"},
-            new [] { "./src/", "Avalonia.OpenGL"},
-            new [] { "./src/", "Avalonia.Themes.Default"},
-            new [] { "./src/Markup/", "Avalonia.Markup"},
-            new [] { "./src/Markup/", "Avalonia.Markup.Xaml"},
-        };
-
-        var extensionsToPack = new [] {".dll", ".xml", ".pdb"};
-
-        var coreLibrariesFiles = coreLibraries
-            .SelectMany(lib => extensionsToPack.Select(ext => new {lib, ext}))
-            .Select((lib) => {
-                return (FilePath)context.File(lib.lib[0] + lib.lib[1] + "/bin/" + parameters.DirSuffix + "/netstandard2.0/" + lib.lib[1] + lib.ext);
-        }).ToList();
-
-        var coreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => {
-            return new NuSpecContent { 
-                Source = file.FullPath, Target = "lib/netstandard2.0" 
-            };
-        });
-
-        var netFrameworkCoreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => {
-            return new NuSpecContent { 
-                Source = file.FullPath, Target = "lib/net461" 
-            };
-        });
-
-        var netcoreappCoreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => {
-            return new NuSpecContent { 
-                Source = file.FullPath, Target = "lib/netcoreapp2.0" 
-            };
-        });
-
-        var netFrameworkRuntimePlatform = extensionsToPack.Select(libSuffix => {
-            return new NuSpecContent {
-                Source = ((FilePath)context.File("./src/Avalonia.DotNetFrameworkRuntime/bin/" + parameters.DirSuffix + "/net461/Avalonia.DotNetFrameworkRuntime" + libSuffix)).FullPath, 
-                Target = "lib/net461" 
-            };
-        });
-
-        var netCoreRuntimePlatform = extensionsToPack.Select(libSuffix => {
-            return new NuSpecContent {
-                Source = ((FilePath)context.File("./src/Avalonia.DotNetCoreRuntime/bin/" + parameters.DirSuffix + "/netcoreapp2.0/Avalonia.DotNetCoreRuntime" + libSuffix)).FullPath, 
-                Target = "lib/netcoreapp2.0" 
-            };
-        });
-
-        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 + "/net461/Avalonia.Designer.HostApp.exe")).FullPath, 
-            Target = "tools/net461/previewer"
-        };
-
-        var toolsContent = new[] { toolHostApp, toolHostAppNetFx };
-        var coreFiles = coreLibrariesNuSpecContent
-            .Concat(netFrameworkCoreLibrariesNuSpecContent).Concat(netFrameworkRuntimePlatform)
-            .Concat(netcoreappCoreLibrariesNuSpecContent).Concat(netCoreRuntimePlatform)
-            .Concat(toolsContent)
-            .ToList();
-
-        var nuspecNuGetSettingsCore = new []
-        {
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia",
-                Dependencies = new DependencyBuilder(this)
-                {
-                    new NuSpecDependency() { Id = "Avalonia.Remote.Protocol", Version = parameters.Version, TargetFramework="netstandard2.0" },
-                    new NuSpecDependency() { Id = "Avalonia.Remote.Protocol", Version = parameters.Version, TargetFramework="netcoreapp2.0" },
-                    new NuSpecDependency() { Id = "Avalonia.Remote.Protocol", Version = parameters.Version, TargetFramework="net461" },
-                    new NuSpecDependency() { Id = "System.ValueTuple", Version = SystemValueTupleVersion, TargetFramework="net461" },
-                    new NuSpecDependency() { Id = "System.ComponentModel.TypeConverter", Version = "4.3.0", TargetFramework="net461" },
-                    new NuSpecDependency() { Id = "NETStandard.Library", Version = "2.0.0", TargetFramework="net461"}
-                }
-                .Deps(new string[]{"netstandard2.0", "netcoreapp2.0", "net461"},
-                    "Serilog", "Serilog.Sinks.Debug", "Serilog.Sinks.Trace",
-                    "System.Memory", "System.Reactive", "System.ComponentModel.Annotations")
-                .ToArray(),
-                Files = coreFiles,
-                BasePath = context.Directory("./"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.ReactiveUI
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.ReactiveUI",
-                Dependencies = new DependencyBuilder(this)
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                }.Deps(new string[] {null}, "reactiveui"),
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.ReactiveUI.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Avalonia.ReactiveUI/bin/" + parameters.DirSuffix + "/netstandard2.0"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Remote.Protocol
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Remote.Protocol",
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Remote.Protocol.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Avalonia.Remote.Protocol/bin/" + parameters.DirSuffix + "/netstandard2.0"),
-                OutputDirectory = parameters.NugetRoot
-            },
-        };
-
-        var nuspecNuGetSettingsMobile = new []
-        {
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Android
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Android",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Skia", Version = parameters.Version }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Android.dll", Target = "lib/MonoAndroid10" }
-                },
-                BasePath = context.Directory("./src/Android/Avalonia.Android/bin/" + parameters.DirSuffix + "/monoandroid44/MonoAndroid44/"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.iOS
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.iOS",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Skia", Version = parameters.Version }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.iOS.dll", Target = "lib/Xamarin.iOS10" }
-                },
-                BasePath = context.Directory("./src/iOS/Avalonia.iOS/bin/" + parameters.DirSuffix + "/xamarin.ios10/"),
-                OutputDirectory = parameters.NugetRoot
-            }
-        };
-
-        var nuspecNuGetSettingsDesktop = new []
-        {
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Win32
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Win32",
-                Dependencies = new DependencyBuilder(this)
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version }
-                }.Deps(new string[]{null}, "System.Drawing.Common"),
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Win32/bin/" + parameters.DirSuffix + "/netstandard2.0/Avalonia.Win32.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Windows"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Direct2D1
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Direct2D1",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "SharpDX", Version = SharpDXVersion },
-                    new NuSpecDependency() { Id = "SharpDX.Direct2D1", Version = SharpDXDirect2D1Version },
-                    new NuSpecDependency() { Id = "SharpDX.Direct3D11", Version = SharpDXDirect3D11Version },
-                    new NuSpecDependency() { Id = "SharpDX.DXGI", Version = SharpDXDXGIVersion }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Direct2D1.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Windows/Avalonia.Direct2D1/bin/" + parameters.DirSuffix + "/netstandard2.0"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Gtk3
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Gtk3",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Gtk3.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Gtk/Avalonia.Gtk3/bin/" + parameters.DirSuffix + "/netstandard2.0"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Skia
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Skia",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion },
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version, TargetFramework="netcoreapp2.0" },
-                    new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion, TargetFramework="netcoreapp2.0" },
-                    new NuSpecDependency() { Id = "Avalonia.Skia.Linux.Natives", Version = SkiaSharpLinuxVersion, TargetFramework="netcoreapp2.0" },
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version, TargetFramework="net461" },
-                    new NuSpecDependency() { Id = "SkiaSharp", Version = SkiaSharpVersion, TargetFramework="net461" },
-                    new NuSpecDependency() { Id = "Avalonia.Skia.Linux.Natives", Version = SkiaSharpLinuxVersion, TargetFramework="net461" }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Skia.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Skia/Avalonia.Skia/bin/" + parameters.DirSuffix + "/netstandard2.0"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Desktop
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Desktop",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia.Direct2D1", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Win32", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Skia", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Gtk3", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Native", Version = parameters.Version }
-                },
-                Files = new NuSpecContent[]
-                {
-                    new NuSpecContent { Source = "licence.md", Target = "" }
-                },
-                BasePath = context.Directory("./"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.LinuxFramebuffer
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.LinuxFramebuffer",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version },
-                    new NuSpecDependency() { Id = "Avalonia.Skia", Version = parameters.Version }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.LinuxFramebuffer/bin/" + parameters.DirSuffix + "/netstandard2.0/Avalonia.LinuxFramebuffer.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Linux/"),
-                OutputDirectory = parameters.NugetRoot
-            },
-            ///////////////////////////////////////////////////////////////////////////////
-            // Avalonia.Native
-            ///////////////////////////////////////////////////////////////////////////////
-            new NuGetPackSettings()
-            {
-                Id = "Avalonia.Native",
-                Dependencies = new []
-                {
-                    new NuSpecDependency() { Id = "Avalonia", Version = parameters.Version }
-                },
-                Files = new []
-                {
-                    new NuSpecContent { Source = "Avalonia.Native.dll", Target = "lib/netstandard2.0" }
-                },
-                BasePath = context.Directory("./src/Avalonia.Native/bin/" + parameters.DirSuffix + "/netstandard2.0"),
-                OutputDirectory = parameters.NugetRoot
-            },
-        };
-
-        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 + "/net461/Avalonia.Win32.Interop.dll", Target = "lib/net461" }
-            },
-            BasePath = context.Directory("./src/Windows"),
-            OutputDirectory = parameters.NugetRoot
-        };
-
-        NuspecNuGetSettings = new List<NuGetPackSettings>();
-
-        NuspecNuGetSettings.AddRange(nuspecNuGetSettingsCore);
-        NuspecNuGetSettings.AddRange(nuspecNuGetSettingsDesktop);
-
-        if (parameters.IsRunningOnWindows) {
-            NuspecNuGetSettings.Add(nuspecNuGetSettingInterop);
-            NuspecNuGetSettings.AddRange(nuspecNuGetSettingsMobile);
-        }
-
-        NuspecNuGetSettings.ForEach((nuspec) => SetNuGetNuspecCommonProperties(nuspec));
-
-        NugetPackages = NuspecNuGetSettings.Select(nuspec => {
-            return nuspec.OutputDirectory.CombineWithFilePath(string.Concat(nuspec.Id, ".", nuspec.Version, ".nupkg"));
-        }).ToArray();
-
-        BinFiles = NuspecNuGetSettings.SelectMany(nuspec => {
-            return nuspec.Files.Select(file => {
-                return ((DirectoryPath)nuspec.BasePath).CombineWithFilePath(file.Source);
-            });
-        }).GroupBy(f => f.FullPath).Select(g => g.First()).ToArray();
-    }
-}

+ 36 - 0
packages/Avalonia/Avalonia.csproj

@@ -0,0 +1,36 @@
+<Project Sdk="AggregatePackage.NuGet.Sdk">
+  <PropertyGroup>
+      <TargetFrameworks>netstandard2.0;net461;netcoreapp2.0</TargetFrameworks>
+  </PropertyGroup>
+
+  <ItemGroup>
+      <ProjectReference Include="../../src/Avalonia.Remote.Protocol/Avalonia.Remote.Protocol.csproj" EmbedReference="false" />
+  </ItemGroup>
+
+  <PropertyGroup>
+      <DesignerHostAppPath>../../src/tools</DesignerHostAppPath>
+  </PropertyGroup>
+
+  <Target Name="AddDesignerHostAppsToPackage" BeforeTargets="GenerateNuspec">
+    <MSBuild Projects="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj"
+             Properties="Configuration=$(Configuration);
+                         Platform=$(Platform)" />
+
+    <ItemGroup>
+      <_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/netcoreapp2.0/Avalonia.Designer.HostApp.dll">
+        <PackagePath>tools/netcoreapp2.0/designer</PackagePath>
+        <Visible>false</Visible>
+        <BuildAction>None</BuildAction>
+      </_PackageFiles>
+      <_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/net461/Avalonia.Designer.HostApp.exe">
+        <PackagePath>tools/net461/designer</PackagePath>
+        <Visible>false</Visible>
+        <BuildAction>None</BuildAction>
+      </_PackageFiles>
+    </ItemGroup>
+  </Target>
+
+  <Import Project="..\..\build\SharedVersion.props" />
+  <Import Project="..\..\build\NetFX.props" />
+  <Import Project="..\..\build\CoreLibraries.props" />
+</Project>

+ 5 - 1
parameters.cake

@@ -22,11 +22,13 @@ public class Parameters
     public bool IsReleasable { get; private set; }
     public bool IsMyGetRelease { get; private set; }
     public bool IsNuGetRelease { get; private set; }
+    public bool PublishTestResults { get; private set; }
     public string Version { get; private set; } 
     public DirectoryPath ArtifactsDir { get; private set; }
     public DirectoryPath NugetRoot { get; private set; }
     public DirectoryPath ZipRoot { get; private set; }
     public DirectoryPath BinRoot { get; private set; }
+    public DirectoryPath TestResultsRoot { get; private set; }
     public string DirSuffix { get; private set; }
     public DirectoryPathCollection BuildDirs { get; private set; }
     public string FileZipSuffix { get; private set; }
@@ -91,7 +93,8 @@ public class Parameters
         else if (IsRunningOnAzure)
         {
                 // Use AssemblyVersion with Build as version
-                Version += "-build" + context.EnvironmentVariable("BUILD_BUILDID") + "-beta";   
+                Version += "-build" + context.EnvironmentVariable("BUILD_BUILDID") + "-beta";
+                PublishTestResults = true; 
         }
 
         // DIRECTORIES
@@ -99,6 +102,7 @@ public class Parameters
         NugetRoot = ArtifactsDir.Combine("nuget");
         ZipRoot = ArtifactsDir.Combine("zip");
         BinRoot = ArtifactsDir.Combine("bin");
+        TestResultsRoot = ArtifactsDir.Combine("test-results");
         BuildDirs = context.GetDirectories("**/bin") + context.GetDirectories("**/obj");
         DirSuffix = Configuration;
         FileZipSuffix = Version + ".zip";

+ 0 - 22
samples/BindingDemo/App.config

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
-    </startup>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX" publicKeyToken="b4dcf0f35e5521f1" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX.DXGI" publicKeyToken="b4dcf0f35e5521f1" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="Mono.Cairo" publicKeyToken="0738eb9f132ed756" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-</configuration>

+ 1 - 19
samples/BindingDemo/BindingDemo.csproj

@@ -4,27 +4,8 @@
     <TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-    
-    <ProjectReference Condition="'$(TargetFramework)'=='netcoreapp2.0'" Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
-                      
-    <ProjectReference Condition="'$(TargetFramework)'=='net461'" Include="..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj" />
-
     <ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Logging.Serilog\Avalonia.Logging.Serilog.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\SampleApp.props" />
   <Import Project="..\..\build\EmbedXaml.props" />
@@ -32,4 +13,5 @@
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\ReactiveUI.props" />
   <Import Condition="'$(TargetFramework)'=='net461'" Project="..\..\build\NetFX.props" />
+  <Import Project="..\..\build\ReferenceCoreLibraries.props" />
 </Project>

+ 1 - 0
samples/ControlCatalog.Android/ControlCatalog.Android.csproj

@@ -155,4 +155,5 @@
   <Import Project="..\..\build\Rx.props" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
   <Import Project="..\..\build\AndroidWorkarounds.props" />
+  <Import Project="..\..\build\LegacyProject.targets" />
 </Project>

+ 0 - 22
samples/ControlCatalog.Desktop/App.config

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
-    </startup>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="Mono.Cairo" publicKeyToken="0738eb9f132ed756" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX" publicKeyToken="b4dcf0f35e5521f1" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX.DXGI" publicKeyToken="b4dcf0f35e5521f1" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0"/>
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-</configuration>

+ 0 - 7
samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj

@@ -6,16 +6,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Logging.Serilog\Avalonia.Logging.Serilog.csproj" />
     <ProjectReference Include="..\ControlCatalog\ControlCatalog.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Properties\" />
-  </ItemGroup>
-
   <Import Project="..\..\build\SampleApp.props" />
   <Import Project="..\..\build\Serilog.props" />
   <Import Project="..\..\build\NetFX.props" />

+ 5 - 3
samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj

@@ -6,10 +6,12 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
     <ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
     <ProjectReference Include="..\ControlCatalog\ControlCatalog.csproj" />
+    <ProjectReference Include="..\..\src\Avalonia.Desktop\Avalonia.Desktop.csproj" />
   </ItemGroup>
 
-</Project>
+
+  <Import Project="..\..\build\SampleApp.props" />
+  <Import Project="..\..\build\ReferenceCoreLibraries.props" />
+</Project>

+ 1 - 0
samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj

@@ -176,4 +176,5 @@
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
   <Import Project="..\..\build\iOSWorkarounds.props" />
+  <Import Project="..\..\build\LegacyProject.targets" />
 </Project>

+ 0 - 22
samples/ControlCatalog/App.config

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
-    </startup>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="Mono.Cairo" publicKeyToken="0738eb9f132ed756" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX" publicKeyToken="b4dcf0f35e5521f1" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-3.0.2.0" newVersion="3.0.2.0" />
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX.DXGI" publicKeyToken="b4dcf0f35e5521f1" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-3.0.2.0" newVersion="3.0.2.0" />
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-</configuration>

+ 1 - 12
samples/ControlCatalog/ControlCatalog.csproj

@@ -19,19 +19,8 @@
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
+    <ProjectReference Include="..\..\packages\Avalonia\Avalonia.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
   </ItemGroup>
   
   <Import Project="..\..\build\Serilog.props" />

+ 4 - 1
samples/Directory.Build.props

@@ -1,3 +1,6 @@
 <Project>
+  <PropertyGroup>
+      <IsPackable>false</IsPackable>
+  </PropertyGroup>
   <Import Project="..\build\SharedVersion.props" />
-</Project>
+</Project>

+ 4 - 14
samples/Previewer/Previewer.csproj

@@ -8,19 +8,9 @@
       <DependentUpon>%(Filename)</DependentUpon>
     </Compile>
     <EmbeddedResource Include="**\*.xaml" />
-    <ProjectReference Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
   </ItemGroup>
-</Project>
+  
+  <Import Project="..\..\build\SampleApp.props" />
+  <Import Project="..\..\build\ReferenceCoreLibraries.props" />
+</Project>

+ 2 - 13
samples/RemoteDemo/RemoteDemo.csproj

@@ -6,20 +6,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
     <ProjectReference Include="..\ControlCatalog\ControlCatalog.csproj" />
   </ItemGroup>
+  <Import Project="..\..\build\SampleApp.props" />
+  <Import Project="..\..\build\ReferenceCoreLibraries.props" />
 
 </Project>

+ 1 - 19
samples/RenderDemo/RenderDemo.csproj

@@ -4,27 +4,8 @@
     <TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-    
-    <ProjectReference Condition="'$(TargetFramework)'=='netcoreapp2.0'" Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
-                      
-    <ProjectReference Condition="'$(TargetFramework)'=='net461'" Include="..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj" />
-
     <ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Logging.Serilog\Avalonia.Logging.Serilog.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\SampleApp.props" />
   <Import Project="..\..\build\EmbedXaml.props" />
@@ -32,4 +13,5 @@
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\ReactiveUI.props" />
   <Import Condition="'$(TargetFramework)'=='net461'" Project="..\..\build\NetFX.props" />
+  <Import Project="..\..\build\ReferenceCoreLibraries.props" />
 </Project>

+ 0 - 22
samples/VirtualizationDemo/App.config

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
-    </startup>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="Mono.Cairo" publicKeyToken="0738eb9f132ed756" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX" publicKeyToken="b4dcf0f35e5521f1" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="SharpDX.DXGI" publicKeyToken="b4dcf0f35e5521f1" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0"/>
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-</configuration>

+ 1 - 19
samples/VirtualizationDemo/VirtualizationDemo.csproj

@@ -4,27 +4,8 @@
     <TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-    
-    <ProjectReference Condition="'$(TargetFramework)'=='netcoreapp2.0'" Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
-                      
-    <ProjectReference Condition="'$(TargetFramework)'=='net461'" Include="..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj" />
-
     <ProjectReference Include="..\..\src\Linux\Avalonia.LinuxFramebuffer\Avalonia.LinuxFramebuffer.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.Logging.Serilog\Avalonia.Logging.Serilog.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\SampleApp.props" />
   <Import Project="..\..\build\EmbedXaml.props" />
@@ -32,4 +13,5 @@
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\ReactiveUI.props" />
   <Import Condition="'$(TargetFramework)'=='net461'" Project="..\..\build\NetFX.props" />
+  <Import Project="..\..\build\ReferenceCoreLibraries.props" />
 </Project>

+ 2 - 4
samples/interop/Direct3DInteropSample/Direct3DInteropSample.csproj

@@ -22,13 +22,11 @@
       </EmbeddedResource>
     </ItemGroup>
     <ItemGroup>
-        <ProjectReference Include="..\..\..\src\Avalonia.DesignerSupport\Avalonia.DesignerSupport.csproj" />
-        <ProjectReference Include="..\..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj" />
         <ProjectReference Include="..\..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
-        <ProjectReference Include="..\..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
         <ProjectReference Include="..\..\..\src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj" />
         <ProjectReference Include="..\..\..\src\Windows\Avalonia.Win32\Avalonia.Win32.csproj" />
     </ItemGroup>
     <Import Project="..\..\..\build\Serilog.props" />
     <Import Project="..\..\..\build\Rx.props" />
-</Project>
+    <Import Project="..\..\..\build\ReferenceCoreLibraries.props" />
+</Project>

+ 5 - 4
samples/interop/WindowsInteropTest/WindowsInteropTest.csproj

@@ -112,14 +112,14 @@
       <Project>{799a7bb5-3c2c-48b6-85a7-406a12c420da}</Project>
       <Name>Avalonia.DesignerSupport</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\..\src\Avalonia.DesktopRuntime\Avalonia.DesktopRuntime.csproj">
+      <Project>{878fefe0-cd14-41cb-90b0-dbcb163e8f15}</Project>
+      <Name>Avalonia.DesktopRuntime</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\src\Avalonia.Diagnostics\Avalonia.Diagnostics.csproj">
       <Project>{7062ae20-5dcc-4442-9645-8195bdece63e}</Project>
       <Name>Avalonia.Diagnostics</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\..\src\Avalonia.DotNetFrameworkRuntime\Avalonia.DotNetFrameworkRuntime.csproj">
-      <Project>{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}</Project>
-      <Name>Avalonia.DotNetFrameworkRuntime</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\..\src\Avalonia.Input\Avalonia.Input.csproj">
       <Project>{62024b2d-53eb-4638-b26b-85eeaa54866e}</Project>
       <Name>Avalonia.Input</Name>
@@ -186,4 +186,5 @@
   <Import Project="..\..\..\build\Rx.props" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="..\..\..\build\SkiaSharp.props" />
+  <Import Project="..\..\..\build\LegacyProject.targets" />
 </Project>

+ 1 - 8
src/Android/Avalonia.Android/Avalonia.Android.csproj

@@ -4,14 +4,7 @@
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\..\..\packages\Avalonia\Avalonia.csproj" />
     <ProjectReference Include="..\..\Skia\Avalonia.Skia\Avalonia.Skia.csproj" />
   </ItemGroup>
   <Import Project="..\..\Shared\PlatformSupport\PlatformSupport.projitems" Label="Shared" />

+ 1 - 0
src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj

@@ -153,4 +153,5 @@
   <Import Project="..\..\..\build\Rx.props" />
   <Import Project="..\..\..\build\System.Memory.props" />
   <Import Project="..\..\..\build\AndroidWorkarounds.props" />
+  <Import Project="..\..\..\build\LegacyProject.targets" />
 </Project>

+ 2 - 1
src/Avalonia.Animation/Avalonia.Animation.csproj

@@ -1,9 +1,10 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\Rx.props" />
-</Project>
+</Project>

+ 1 - 0
src/Avalonia.Base/Avalonia.Base.csproj

@@ -4,6 +4,7 @@
     <AssemblyName>Avalonia.Base</AssemblyName>
     <RootNamespace>Avalonia</RootNamespace>
     <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <Import Project="..\..\build\Base.props" />
   <Import Project="..\..\build\Binding.props" />

+ 2 - 1
src/Avalonia.Controls/Avalonia.Controls.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
@@ -14,4 +15,4 @@
   </ItemGroup>
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\JetBrains.Annotations.props" />
-</Project>
+</Project>

+ 2 - 22
src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj

@@ -1,32 +1,13 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
     <!-- WARNING! The designer support version number needs to be frozen 
          To allow projects that implement designer functionality to still
          work with newer versions of Avalonia. This version number only
          need change when there are breaking changes to designer support api.
     -->
     <Version>0.7.0</Version>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <DocumentationFile>bin\Debug\Avalonia.DesignerSupport.xml</DocumentationFile>
-    <NoWarn>CS1591;CS0067</NoWarn>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <DocumentationFile>bin\Release\Avalonia.DesignerSupport.xml</DocumentationFile>
     <NoWarn>CS1591</NoWarn>
   </PropertyGroup>
   <ItemGroup>
@@ -42,6 +23,5 @@
     <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
     <ProjectReference Include="..\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
   </ItemGroup>
-  <Import Project="..\..\build\Microsoft.CSharp.props" />
   <Import Project="..\..\build\Rx.props" />
-</Project>
+</Project>

+ 57 - 0
src/Avalonia.Desktop/AppBuilderDesktopExtensions.cs

@@ -0,0 +1,57 @@
+using Avalonia.Controls;
+using Avalonia.Platform;
+
+namespace Avalonia
+{
+    public static class AppBuilderDesktopExtensions
+    {
+        public static TAppBuilder UsePlatformDetect<TAppBuilder>(this TAppBuilder builder)
+            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
+        {
+            var os = builder.RuntimePlatform.GetRuntimeInfo().OperatingSystem;
+
+            // We don't have the ability to load every assembly right now, so we are
+            // stuck with manual configuration  here
+            // Helpers are extracted to separate methods to take the advantage of the fact
+            // that CLR doesn't try to load dependencies before referencing method is jitted
+            // Additionally, by having a hard reference to each assembly,
+            // we verify that the assemblies are in the final .deps.json file
+            //  so .NET Core knows where to load the assemblies from,.
+            if (os == OperatingSystemType.WinNT)
+            {
+                LoadWin32(builder);
+                LoadSkia(builder);
+            }
+            else if(os==OperatingSystemType.OSX)
+            {
+                LoadAvaloniaNative(builder);
+                LoadSkia(builder);
+            }
+            else
+            {
+                LoadGtk3(builder);
+                LoadSkia(builder);
+            }
+            return builder;
+        }
+
+        static void LoadAvaloniaNative<TAppBuilder>(TAppBuilder builder)
+            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
+             => builder.UseAvaloniaNative();
+        static void LoadWin32<TAppBuilder>(TAppBuilder builder)
+            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
+             => builder.UseWin32();
+
+        static void LoadGtk3<TAppBuilder>(TAppBuilder builder)
+            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
+             => builder.UseGtk3();
+
+        static void LoadDirect2D1<TAppBuilder>(TAppBuilder builder)
+            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
+             => builder.UseDirect2D1();
+
+        static void LoadSkia<TAppBuilder>(TAppBuilder builder)
+            where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
+             => builder.UseSkia();
+    }
+}

+ 14 - 0
src/Avalonia.Desktop/Avalonia.Desktop.csproj

@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+      <TargetFrameworks>netstandard2.0</TargetFrameworks>
+  </PropertyGroup>
+
+  <ItemGroup>
+      <ProjectReference Include="../../src/Windows/Avalonia.Win32/Avalonia.Win32.csproj" />
+      <ProjectReference Include="../../src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj" />
+      <ProjectReference Include="../../src/Skia/Avalonia.Skia/Avalonia.Skia.csproj" />
+      <ProjectReference Include="../../src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj" />
+      <ProjectReference Include="../../src/Avalonia.Native/Avalonia.Native.csproj" />
+      <ProjectReference Include="../../packages/Avalonia/Avalonia.csproj" />
+  </ItemGroup>
+</Project>

+ 1 - 1
src/Avalonia.DotNetFrameworkRuntime/AppBuilder.cs → src/Avalonia.DesktopRuntime/AppBuilder.cs

@@ -49,7 +49,7 @@ namespace Avalonia
         /// Instructs the <see cref="AppBuilder"/> to use the best settings for the platform.
         /// </summary>
         /// <returns>An <see cref="AppBuilder"/> instance.</returns>
-        public AppBuilder UsePlatformDetect()
+        public AppBuilder UseSubsystemsFromStartupDirectory()
         {
             var os = RuntimePlatform.GetRuntimeInfo().OperatingSystem;
 

+ 21 - 0
src/Avalonia.DesktopRuntime/Avalonia.DesktopRuntime.csproj

@@ -0,0 +1,21 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>
+    <IsPackable>false</IsPackable>
+  </PropertyGroup>
+
+  <ItemGroup>
+      <ProjectReference Include="../Avalonia.Base/Avalonia.Base.csproj" />
+      <ProjectReference Include="../Avalonia.Visuals/Avalonia.Visuals.csproj" />
+      <ProjectReference Include="../Avalonia.Controls/Avalonia.Controls.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" Condition="'$(TargetFramework)' == 'net461'" />
+  </ItemGroup>
+
+  <Import Project="..\..\build\NetCore.props" />
+  <Import Project="..\..\build\NetFX.props" />
+  <Import Project="..\Shared\PlatformSupport\PlatformSupport.projitems" />
+</Project>

+ 4 - 1
src/Avalonia.DotNetCoreRuntime/RuntimeInfo.cs → src/Avalonia.DesktopRuntime/RuntimeInfo.cs

@@ -21,9 +21,12 @@ namespace Avalonia.Shared.PlatformSupport
 
             return new RuntimePlatformInfo
             {
+#if NETCOREAPP2_0
                 IsCoreClr = true,
-                IsDesktop = true,
+#elif NET461
                 IsDotNetFramework = false,
+#endif
+                IsDesktop = true,
                 IsMono = false,
                 IsMobile = false,
                 IsUnix = os != OperatingSystemType.WinNT,

+ 2 - 9
src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj

@@ -1,10 +1,8 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
-  <ItemGroup>
-    <None Remove="Views\EventsView.xaml" />
-  </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
     <ProjectReference Include="..\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
@@ -20,9 +18,4 @@
   </ItemGroup>  
   <Import Project="..\..\build\EmbedXaml.props" />
   <Import Project="..\..\build\Rx.props" />
-  <ItemGroup>
-    <EmbeddedResource Update="Views\EventsView.xaml">
-      <Generator>MSBuild:Compile</Generator>
-    </EmbeddedResource>
-  </ItemGroup>
-</Project>
+</Project>

+ 0 - 58
src/Avalonia.DotNetCoreRuntime/AppBuilder.cs

@@ -1,58 +0,0 @@
-using System.Reflection;
-using Avalonia.Controls;
-using Avalonia.Platform;
-using Avalonia.Shared.PlatformSupport;
-
-namespace Avalonia
-{
-    /// <summary>
-    /// Initializes platform-specific services for an <see cref="Application"/>.
-    /// </summary>
-    public sealed class AppBuilder : AppBuilderBase<AppBuilder>
-    {
-        /// <summary>
-        /// Initializes a new instance of the <see cref="AppBuilder"/> class.
-        /// </summary>
-        public AppBuilder()
-            : base(new StandardRuntimePlatform(),
-                  builder => StandardRuntimePlatformServices.Register(builder.Instance?.GetType()
-                      ?.GetTypeInfo().Assembly))
-        {
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="AppBuilder"/> class.
-        /// </summary>
-        /// <param name="app">The <see cref="Application"/> instance.</param>
-        public AppBuilder(Application app) : this()
-        {
-            Instance = app;
-        }
-
-        /// <summary>
-        /// Instructs the <see cref="AppBuilder"/> to use the best settings for the platform.
-        /// </summary>
-        /// <returns>An <see cref="AppBuilder"/> instance.</returns>
-        public AppBuilder UsePlatformDetect()
-        {
-            var os = RuntimePlatform.GetRuntimeInfo().OperatingSystem;
-            //We don't have the ability to load every assembly right now, so we are
-            //stuck with manual configuration  here
-            //Helpers are extracted to separate methods to take the advantage of the fact
-            //that CLR doesn't try to load dependencies before referencing method is jitted
-            if (os == OperatingSystemType.WinNT)
-                LoadWin32();
-            else if(os==OperatingSystemType.OSX)
-                LoadAvaloniaNative();
-            else
-                LoadGtk3();
-            this.UseSkia();
-
-            return this;
-        }
-
-        void LoadAvaloniaNative() => this.UseAvaloniaNative();
-        void LoadWin32() => this.UseWin32();
-        void LoadGtk3() => this.UseGtk3();
-    }
-}

+ 0 - 18
src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj

@@ -1,18 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-  <PropertyGroup>
-    <TargetFramework>netcoreapp2.0</TargetFramework>
-    <DefineConstants>$(DefineConstants);DOTNETCORE</DefineConstants>
-  </PropertyGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    <ProjectReference Include="..\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj" />
-    <ProjectReference Include="..\Skia\Avalonia.Skia\Avalonia.Skia.csproj" />
-    <ProjectReference Include="..\Avalonia.Native\Avalonia.Native.csproj" />
-    <ProjectReference Include="..\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj" />
-    <ProjectReference Include="..\Windows\Avalonia.Win32\Avalonia.Win32.csproj" />
-  </ItemGroup>  
-  <Import Project="..\..\build\NetCore.props" />
-  <Import Project="..\Shared\PlatformSupport\PlatformSupport.projitems" />
-</Project>

+ 0 - 17
src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj

@@ -1,17 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-    <PropertyGroup>
-        <TargetFramework>net461</TargetFramework>
-        <DocumentationFile>bin\$(Configuration)\Avalonia.DotNetFrameworkRuntime.xml</DocumentationFile>
-        <DefineConstants>$(DefineConstants);FULLDOTNET</DefineConstants>
-        <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-    </PropertyGroup>
-    <ItemGroup>
-        <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
-        <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj" />
-        <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-        <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
-    </ItemGroup>    
-    <Import Project="..\Shared\PlatformSupport\PlatformSupport.projitems" Label="Shared" />
-    <Import Project="..\..\build\Rx.props" />
-    <Import Project="..\..\build\NetFX.props" />
-</Project>

+ 0 - 44
src/Avalonia.DotNetFrameworkRuntime/RuntimeInfo.cs

@@ -1,44 +0,0 @@
-using System;
-using System.Runtime.InteropServices;
-using Avalonia.Platform;
-
-namespace Avalonia.Shared.PlatformSupport
-{
-    internal partial class StandardRuntimePlatform
-    {
-        private static readonly Lazy<RuntimePlatformInfo> Info = new Lazy<RuntimePlatformInfo>(() =>
-        {
-            var isMono = Type.GetType("Mono.Runtime") != null;
-            var isUnix = Environment.OSVersion.Platform == PlatformID.Unix ||
-                         Environment.OSVersion.Platform == PlatformID.MacOSX;
-            return new RuntimePlatformInfo
-            {
-                IsCoreClr = false,
-                IsDesktop = true,
-                IsDotNetFramework = !isMono,
-                IsMono = isMono,
-                IsMobile = false,
-                IsUnix = isUnix,
-                OperatingSystem = isUnix ? DetectUnix() : OperatingSystemType.WinNT,
-            };
-        });
-
-        [DllImport("libc")]
-        static extern int uname(IntPtr buf);
-
-        static OperatingSystemType DetectUnix()
-        {
-            var buffer = Marshal.AllocHGlobal(0x1000);
-            uname(buffer);
-            var unixName = Marshal.PtrToStringAnsi(buffer);
-            Marshal.FreeHGlobal(buffer);
-            if(unixName=="Darwin")
-                return OperatingSystemType.OSX;
-            if (unixName == "Linux")
-                return OperatingSystemType.Linux;
-            return OperatingSystemType.Unknown;
-        }
-
-        public RuntimePlatformInfo GetRuntimeInfo() => Info.Value;
-    }
-}

+ 5 - 2
src/Avalonia.Input/AccessKeyHandler.cs

@@ -234,8 +234,11 @@ namespace Avalonia.Input
 
                 case Key.F10:
                     _owner.ShowAccessKeys = _showingAccessKeys = true;
-                    MainMenu.Open();
-                    e.Handled = true;
+                    if (MainMenu != null)
+                    {
+                        MainMenu.Open();
+                        e.Handled = true;
+                    }
                     break;
             }
         }

+ 2 - 1
src/Avalonia.Input/Avalonia.Input.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
@@ -10,4 +11,4 @@
     <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>  
   <Import Project="..\..\build\Rx.props" />
-</Project>
+</Project>

+ 1 - 0
src/Avalonia.Interactivity/Avalonia.Interactivity.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />

+ 2 - 1
src/Avalonia.Layout/Avalonia.Layout.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
@@ -8,4 +9,4 @@
     <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>  
   <Import Project="..\..\build\Rx.props" />
-</Project>
+</Project>

+ 2 - 1
src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj

@@ -1,10 +1,11 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
     <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj" />
   </ItemGroup>  
   <Import Project="..\..\build\Serilog.props" />
-</Project>
+</Project>

+ 0 - 1
src/Avalonia.Native/.gitignore

@@ -1 +0,0 @@
-Generated

+ 15 - 20
src/Avalonia.Native/Avalonia.Native.csproj

@@ -1,31 +1,26 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
+    <IsPackable>false</IsPackable>
+    <IsPackable Condition="'$([MSBuild]::IsOSPlatform(OSX))' == 'True'">true</IsPackable>
     <TargetFramework>netstandard2.0</TargetFramework>
     <CastXmlPath Condition="Exists('/usr/bin/castxml')">/usr/bin/castxml</CastXmlPath>
     <CastXmlPath Condition="Exists('/usr/local/bin/castxml')">/usr/local/bin/castxml</CastXmlPath>
-    
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <SharpGenGeneratedCodeFolder>$(MSBuildThisFileDirectory)/Generated</SharpGenGeneratedCodeFolder>
   </PropertyGroup>
-    <ItemGroup>
-        <PackageReference Include="SharpGenTools.Sdk" Version="1.1.2" PrivateAssets="all" />
-        <PackageReference Include="SharpGen.Runtime.Com" Version="1.1.0" />
-        <SharpGenMapping Include="Mappings.xml" />
-      <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
-      <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj" />
-      <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj" />
-      <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-      <ProjectReference Include="..\Avalonia.OpenGL\Avalonia.OpenGL.csproj" />
-      <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
-    </ItemGroup>
 
-
-    <ItemGroup Condition="'$(Configuration)' == 'Release' AND '$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">
-      <Content Include="../../Build/Products/Release/libAvalonia.Native.OSX.dylib">
-        <PackagePath>runtimes/osx/native/libAvaloniaNative.dylib</PackagePath>
-        <Pack>true</Pack>
-        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-      </Content>
+  <ItemGroup Condition="'$(Configuration)' == 'Release' AND '$([MSBuild]::IsOSPlatform(OSX))' == 'true'">
+    <Content Include="../../Build/Products/Release/libAvalonia.Native.OSX.dylib">
+      <PackagePath>runtimes/osx/native/libAvaloniaNative.dylib</PackagePath>
+      <Pack>true</Pack>
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  
+  <ItemGroup>
+    <SharpGenMapping Include="Mappings.xml" />
+    <PackageReference Include="SharpGenTools.Sdk" Version="1.1.2" PrivateAssets="all" />
+    <PackageReference Include="SharpGen.Runtime.COM" Version="1.1.0" />
+    <ProjectReference Include="..\..\packages\Avalonia\Avalonia.csproj" />
   </ItemGroup>
 </Project>

+ 0 - 9
src/Avalonia.Native/Avalonia.Native.targets

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-    <ItemGroup>
-        <None Include="$(MSBuildThisFileDirectory)..\..\runtimes\osx-x64\native\libAvalonia.Native.OSX.dylib">
-            <Link>libAvalonia.Native.OSX.dylib</Link>
-            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-        </None>
-    </ItemGroup>
-</Project>

+ 1 - 5
src/Avalonia.Native/Mappings.xml

@@ -3,7 +3,7 @@
     <assembly>Avalonia.Native</assembly>
     <namespace>Avalonia.Native.Interop</namespace>
     <depends>SharpGen.Runtime.COM</depends>
-    <include-dir>$(THIS_CONFIG_PATH)/headers</include-dir>
+    <include-dir>$(THIS_CONFIG_PATH)/../../native/Avalonia.Native/inc</include-dir>
     <include file="avalonia-native.h" 
              namespace="Avalonia.Native.Interop"
              attach="true"
@@ -12,10 +12,6 @@
              namespace="Avalonia.Native.Interop"
              attach="true"
              pre="#define COM_GUIDS_MATERIALIZE\n"/>
-    <bindings>
-        <bind from="HRESULT" to="SharpGen.Runtime.Result"/>
-        <bind from="HRESULT" to="SharpGen.Runtime.Result"/>
-    </bindings>
     <mapping>
         <remove function=".*" />
         <map interface="*.Events" callback="true" autogen-shadow="true"/>

+ 4 - 0
src/Avalonia.Native/Properties/AssemblyInfo.cs

@@ -0,0 +1,4 @@
+using Avalonia.Native;
+using Avalonia.Platform;
+
+[assembly: ExportWindowingSubsystem(OperatingSystemType.OSX, 1, "AvaloniaNative", typeof(AvaloniaNativePlatform), nameof(AvaloniaNativePlatform.Initialize))]

+ 2 - 9
src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj

@@ -3,15 +3,8 @@
     <TargetFramework>netstandard2.0</TargetFramework>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj" />
-    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\..\packages\Avalonia\Avalonia.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\ReactiveUI.props" />
-</Project>
+</Project>

+ 2 - 1
src/Avalonia.Styling/Avalonia.Styling.csproj

@@ -3,10 +3,11 @@
     <TargetFramework>netstandard2.0</TargetFramework>
     <AssemblyName>Avalonia.Styling</AssemblyName>
     <RootNamespace>Avalonia</RootNamespace>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
     <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
   </ItemGroup>
   <Import Project="..\..\build\Rx.props" />
-</Project>
+</Project>

+ 2 - 1
src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup>
     <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
@@ -15,4 +16,4 @@
   </ItemGroup>  
   <Import Project="..\..\build\EmbedXaml.props" />
   <Import Project="..\..\build\Rx.props" />
-</Project>
+</Project>

+ 2 - 1
src/Avalonia.Visuals/Avalonia.Visuals.csproj

@@ -2,6 +2,7 @@
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
     <RootNamespace>Avalonia</RootNamespace>
+    <IsPackable>false</IsPackable>
   </PropertyGroup>
   <ItemGroup> 
     <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
@@ -10,4 +11,4 @@
   </ItemGroup>
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\System.Memory.props" />
-</Project>
+</Project>

+ 2 - 1
src/Directory.Build.props

@@ -1,4 +1,5 @@
 <Project>
+  <Import Project="..\Directory.Build.props" />
   <Import Project="..\build\SharedVersion.props" />
   <Import Project="..\build\SourceLink.props" Condition="'$(DisableSourceLink)' == ''" />
-</Project>
+</Project>

+ 2 - 7
src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj

@@ -5,11 +5,6 @@
     <DefineConstants>$(DefineConstants);GTK3_PINVOKE</DefineConstants>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\Avalonia.OpenGL\Avalonia.OpenGL.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\..\..\packages\Avalonia\Avalonia.csproj" />
   </ItemGroup>
-</Project>
+</Project>

+ 2 - 6
src/Linux/Avalonia.LinuxFramebuffer/Avalonia.LinuxFramebuffer.csproj

@@ -4,11 +4,7 @@
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\..\..\packages\Avalonia\Avalonia.csproj" />
     <ProjectReference Include="..\..\Skia\Avalonia.Skia\Avalonia.Skia.csproj" />
   </ItemGroup>  
-</Project>
+</Project>

+ 2 - 18
src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj

@@ -4,23 +4,7 @@
     <DefineConstants>PCL;NETSTANDARD;NETSTANDARD2_0;HAS_TYPE_CONVERTER;HAS_CUSTOM_ATTRIBUTE_PROVIDER</DefineConstants>
     <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
     <EnableDefaultItems>false</EnableDefaultItems>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1591</NoWarn>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <DocumentationFile>bin\Release\Avalonia.Markup.Xaml.xml</DocumentationFile>
+    <IsPackable>false</IsPackable>
     <NoWarn>CS1591</NoWarn>
   </PropertyGroup>
     <ItemGroup>
@@ -78,4 +62,4 @@
     <ProjectReference Include="..\Avalonia.Markup\Avalonia.Markup.csproj" />
   </ItemGroup>
   <Import Project="..\..\..\build\Rx.props" />
-</Project>
+</Project>

Some files were not shown because too many files changed in this diff