Browse Source

Merge branch 'master' into avalonia-object-thread-affinity

Steven Kirk 8 years ago
parent
commit
0aa8866401
100 changed files with 1486 additions and 2743 deletions
  1. 2 0
      .travis.yml
  2. 48 11
      Avalonia.sln
  3. 5 3
      appveyor.yml
  4. 60 58
      build.cake
  5. 33 19
      packages.cake
  6. 12 22
      samples/BindingTest/BindingTest.csproj
  7. 0 7
      samples/BindingTest/packages.config
  8. 6 1
      samples/ControlCatalog.Android/ControlCatalog.Android.csproj
  9. 0 4
      samples/ControlCatalog.Android/GettingStarted.Xamarin
  10. 7 2
      samples/ControlCatalog.Android/Resources/Resource.Designer.cs
  11. 9 10
      samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj
  12. 0 4
      samples/ControlCatalog.Desktop/packages.config
  13. 13 0
      samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj
  14. 15 0
      samples/ControlCatalog.NetCore/Program.cs
  15. 1 0
      samples/ControlCatalog.iOS/ControlCatalog.iOS.csproj
  16. 21 80
      samples/ControlCatalog/ControlCatalog.csproj
  17. 0 4
      samples/ControlCatalog/packages.config
  18. 15 34
      samples/RenderTest/RenderTest.csproj
  19. 0 11
      samples/RenderTest/packages.config
  20. 11 22
      samples/VirtualizationTest/VirtualizationTest.csproj
  21. 0 7
      samples/VirtualizationTest/packages.config
  22. 1 0
      samples/interop/GtkInteropDemo/GtkInteropDemo.csproj
  23. 1 0
      samples/interop/WindowsInteropTest/WindowsInteropTest.csproj
  24. 23 14
      src/Android/Avalonia.Android/Avalonia.Android.csproj
  25. 5 2
      src/Android/Avalonia.Android/Resources/Resource.Designer.cs
  26. 0 19
      src/Android/Avalonia.Android/packages.config
  27. 26 29
      src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj
  28. 1 0
      src/Android/Avalonia.AndroidTestApplication/Resources/Resource.Designer.cs
  29. 0 25
      src/Android/Avalonia.AndroidTestApplication/packages.config
  30. 9 60
      src/Avalonia.Animation/Avalonia.Animation.csproj
  31. 0 8
      src/Avalonia.Animation/packages.config
  32. 9 129
      src/Avalonia.Base/Avalonia.Base.csproj
  33. 0 9
      src/Avalonia.Base/packages.config
  34. 16 246
      src/Avalonia.Controls/Avalonia.Controls.csproj
  35. 0 1
      src/Avalonia.Controls/Utils/UndoRedoHelper.cs
  36. 0 9
      src/Avalonia.Controls/packages.config
  37. 20 93
      src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
  38. 0 8
      src/Avalonia.DesignerSupport/packages.config
  39. 26 118
      src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj
  40. 0 9
      src/Avalonia.Diagnostics/packages.config
  41. 11 58
      src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj
  42. 6 0
      src/Avalonia.DotNetCoreRuntime/Properties/AssemblyInfo.cs
  43. 0 11
      src/Avalonia.DotNetCoreRuntime/project.json
  44. 6 12
      src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj
  45. 0 5
      src/Avalonia.DotNetFrameworkRuntime/packages.config
  46. 16 77
      src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj
  47. 28 0
      src/Avalonia.HtmlRenderer/Compat/Api.cs
  48. 0 7
      src/Avalonia.HtmlRenderer/packages.config
  49. 13 115
      src/Avalonia.Input/Avalonia.Input.csproj
  50. 0 2
      src/Avalonia.Input/IInputElement.cs
  51. 0 8
      src/Avalonia.Input/packages.config
  52. 12 69
      src/Avalonia.Interactivity/Avalonia.Interactivity.csproj
  53. 0 8
      src/Avalonia.Interactivity/packages.config
  54. 11 65
      src/Avalonia.Layout/Avalonia.Layout.csproj
  55. 0 8
      src/Avalonia.Layout/packages.config
  56. 5 39
      src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj
  57. 0 4
      src/Avalonia.Logging.Serilog/packages.config
  58. 29 49
      src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj
  59. 34 0
      src/Avalonia.ReactiveUI/Shims.cs
  60. 0 9
      src/Avalonia.ReactiveUI/packages.config
  61. 11 93
      src/Avalonia.Styling/Avalonia.Styling.csproj
  62. 0 8
      src/Avalonia.Styling/packages.config
  63. 0 1
      src/Avalonia.Themes.Default/Accents/BaseLight.xaml
  64. 20 190
      src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj
  65. 0 8
      src/Avalonia.Themes.Default/packages.config
  66. 10 166
      src/Avalonia.Visuals/Avalonia.Visuals.csproj
  67. 2 1
      src/Avalonia.Visuals/Media/Brush.cs
  68. 284 282
      src/Avalonia.Visuals/Media/Brushes.cs
  69. 1 0
      src/Avalonia.Visuals/Media/DrawingContext.cs
  70. 16 0
      src/Avalonia.Visuals/Media/IMutableBrush.cs
  71. 47 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableGradientBrush.cs
  72. 58 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs
  73. 51 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableLinearGradientBrush.cs
  74. 59 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableRadialGradientBrush.cs
  75. 59 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs
  76. 77 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs
  77. 58 0
      src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs
  78. 0 35
      src/Avalonia.Visuals/Media/Mutable/SolidColorBrush.cs
  79. 28 8
      src/Avalonia.Visuals/Media/SolidColorBrush.cs
  80. 2 1
      src/Avalonia.Visuals/Platform/IDrawingContextImpl.cs
  81. 1 2
      src/Avalonia.Visuals/Properties/AssemblyInfo.cs
  82. 0 8
      src/Avalonia.Visuals/packages.config
  83. 6 10
      src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj
  84. 1 1
      src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs
  85. 1 1
      src/Gtk/Avalonia.Cairo/Media/SolidColorBrushImpl.cs
  86. 0 5
      src/Gtk/Avalonia.Cairo/packages.config
  87. 4 10
      src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj
  88. 0 5
      src/Gtk/Avalonia.Gtk/packages.config
  89. 0 1
      src/Gtk/Avalonia.Gtk3/.gitignore
  90. 9 49
      src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj
  91. 0 10
      src/Gtk/Avalonia.Gtk3/project.json
  92. 26 79
      src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
  93. 0 13
      src/Markup/Avalonia.Markup.Xaml/packages.config
  94. 16 111
      src/Markup/Avalonia.Markup/Avalonia.Markup.csproj
  95. 0 9
      src/Markup/Avalonia.Markup/packages.config
  96. BIN
      src/Shared/Microsoft.NuGet.Build.Tasks.Patched.dll
  97. 1 1
      src/Shared/PlatformSupport/StandardRuntimePlatform.cs
  98. 67 0
      src/Shared/nuget.workaround.targets
  99. 5 7
      src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj
  100. 0 4
      src/Skia/Avalonia.Skia.Android/packages.config

+ 2 - 0
.travis.yml

@@ -2,8 +2,10 @@ language: csharp
 os:
   - linux
   - osx
+dist: trusty
 mono:
   - latest
+dotnet: 1.0.1
 script:
   - ./build.sh --target "Travis" --platform "Mono" --configuration "Release"
 notifications:

+ 48 - 11
Avalonia.sln

@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.26228.4
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}"
 EndProject
@@ -15,9 +15,6 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Direct2D1", "src\Windows\Avalonia.Direct2D1\Avalonia.Direct2D1.csproj", "{3E908F67-5543-4879-A1DC-08EACE79B3CD}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Designer", "src\Windows\Avalonia.Designer\Avalonia.Designer.csproj", "{EC42600F-049B-43FF-AED1-8314D61B2749}"
-	ProjectSection(ProjectDependencies) = postProject
-		{2B888490-D14A-4BCA-AB4B-48676FA93C9B} = {2B888490-D14A-4BCA-AB4B-48676FA93C9B}
-	EndProjectSection
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Input", "src\Avalonia.Input\Avalonia.Input.csproj", "{62024B2D-53EB-4638-B26B-85EEAA54866E}"
 EndProject
@@ -34,6 +31,9 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Animation", "src\Avalonia.Animation\Avalonia.Animation.csproj", "{D211E587-D8BC-45B9-95A4-F297C8FA5200}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}"
+	ProjectSection(SolutionItems) = preProject
+		tests\coretests.props = tests\coretests.props
+	EndProjectSection
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Styling.UnitTests", "tests\Avalonia.Styling.UnitTests\Avalonia.Styling.UnitTests.csproj", "{47ECDF59-DEF8-4C53-87B1-2098A3429059}"
 EndProject
@@ -85,9 +85,6 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Markup.UnitTests", "tests\Avalonia.Markup.UnitTests\Avalonia.Markup.UnitTests.csproj", "{8EF392D5-1416-45AA-9956-7CBBC3229E8A}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BindingTest", "samples\BindingTest\BindingTest.csproj", "{08B3E6B9-1CD5-443C-9F61-6D49D1C5F162}"
-	ProjectSection(ProjectDependencies) = postProject
-		{B61B66A3-B82D-4875-8001-89D3394FE0C9} = {B61B66A3-B82D-4875-8001-89D3394FE0C9}
-	EndProjectSection
 EndProject
 Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "RenderHelpers", "src\Shared\RenderHelpers\RenderHelpers.shproj", "{3C4C0CB4-0C0F-4450-A37B-148C84FF905F}"
 EndProject
@@ -126,9 +123,6 @@ EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog", "samples\ControlCatalog\ControlCatalog.csproj", "{D0A739B9-3C68-4BA6-A328-41606954B6BD}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Desktop", "samples\ControlCatalog.Desktop\ControlCatalog.Desktop.csproj", "{2B888490-D14A-4BCA-AB4B-48676FA93C9B}"
-	ProjectSection(ProjectDependencies) = postProject
-		{BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {BB1F7BB5-6AD4-4776-94D9-C09D0A972658}
-	EndProjectSection
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{57E0455D-D565-44BB-B069-EE1AA20F8337}"
 EndProject
@@ -164,6 +158,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Skia.Desktop.NetSt
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Gtk3", "src\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj", "{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.NetCore", "samples\ControlCatalog.NetCore\ControlCatalog.NetCore.csproj", "{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}"
+EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{2f59f3d0-748d-4652-b01e-e0d954756308}*SharedItemsImports = 13
@@ -2442,6 +2438,46 @@ Global
 		{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|Mono.Build.0 = Release|Any CPU
 		{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|x86.ActiveCfg = Release|Any CPU
 		{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}.Release|x86.Build.0 = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Mono.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|Mono.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Mono.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|Mono.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|x86.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.AppStore|x86.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Mono.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|Mono.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Debug|x86.Build.0 = Debug|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhone.Build.0 = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Mono.ActiveCfg = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|Mono.Build.0 = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|x86.ActiveCfg = Release|Any CPU
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -2497,5 +2533,6 @@ Global
 		{40759A76-D0F2-464E-8000-6FF0F5C4BD7C} = {B39A8919-9F95-48FE-AD7B-76E08B509888}
 		{7D2D3083-71DD-4CC9-8907-39A0D86FB322} = {3743B0F2-CC41-4F14-A8C8-267F579BF91E}
 		{BB1F7BB5-6AD4-4776-94D9-C09D0A972658} = {B9894058-278A-46B5-B6ED-AD613FCC03B3}
+		{39D7B147-1A5B-47C2-9D01-21FB7C47C4B3} = {9B9E3891-2366-4253-A952-D08BCEB71098}
 	EndGlobalSection
 EndGlobal

+ 5 - 3
appveyor.yml

@@ -1,4 +1,4 @@
-os: Visual Studio 2015
+os: Visual Studio 2017 RC
 platform:
 - Any CPU
 configuration:
@@ -11,16 +11,17 @@ environment:
     secure: OtVfyN3ErqQrDTnWH2HDfJDlCiu/i4/X4wFmK3ZXXP7HmCiXYPSbTjMPwwdOxRaK
   MYGET_API_URL: https://www.myget.org/F/avalonia-ci/api/v2/package
 install:
+  - if not exist dotnet-1.0.1.exe appveyor DownloadFile https://go.microsoft.com/fwlink/?linkid=843448 -FileName "dotnet-1.0.1.exe"
   - if not exist gtk-sharp-2.12.26.msi appveyor DownloadFile http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.26.msi
   - msiexec /i gtk-sharp-2.12.26.msi /qn /norestart
+  - cmd: call dotnet-1.0.1.exe /quiet
   - cmd: set PATH=%programfiles(x86)%\GtkSharp\2.12\bin\;%PATH%
 before_build:
 - git submodule update --init
 build_script:
 - ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration"
 after_build:
-- .\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode  --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll"
-
+- tools\JetBrains.dotMemoryUnit\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode  --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll"
 - "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%"
 - pip install codecov
 - codecov -f "./artifacts/coverage.xml"
@@ -31,3 +32,4 @@ artifacts:
   - path: artifacts\zip\*.zip
 cache:
   - gtk-sharp-2.12.26.msi
+  - dotnet-1.0.1.exe

+ 60 - 58
build.cake

@@ -4,7 +4,8 @@
 
 #addin "nuget:?package=Polly&version=4.2.0"
 #addin "nuget:?package=NuGet.Core&version=2.12.0"
-
+#tool "nuget:https://dotnet.myget.org/F/nuget-build/?package=NuGet.CommandLine&version=4.3.0-beta1-2361&prerelease"
+#tool "nuget:?package=JetBrains.dotMemoryUnit&version=2.1.20150828.125449"
 ///////////////////////////////////////////////////////////////////////////////
 // TOOLS
 ///////////////////////////////////////////////////////////////////////////////
@@ -96,46 +97,10 @@ Task("Clean")
     CleanDirectory(parameters.TestsRoot);
 });
 
-Task("Prepare-XBuild-Solution")
-    .Does(() =>
-{
-    var blacklistedProjects = new[]
-    {
-        "Avalonia.Win32.NetStandard",
-        "Avalonia.DotNetCoreRuntime",
-        "Avalonia.Skia.Desktop.NetStandard",
-        "Avalonia.Gtk3"
-    };
-    var blacklistedGuids = System.IO.File.ReadAllLines(parameters.MSBuildSolution)
-        .Where(l=>l.StartsWith("Project") && blacklistedProjects.Any(p=>l.Contains(p)))
-        .Select(l => l.Split(',').Select(part => part.Trim()).FirstOrDefault(part => part.StartsWith("\"{")))
-        .Where(g=>g!=null)
-        .Select(l=>l.Trim(new[]{'"', '}', '{'}).ToLower()).ToArray();
-
-    Console.WriteLine("Blacklisted guids are: " + string.Join(",", blacklistedGuids));
-    var removeUntilEndProject = false;
-
-    System.IO.File.WriteAllLines(parameters.XBuildSolution, System.IO.File.ReadAllLines(parameters.MSBuildSolution)
-        .Where(l => 
-        {
-            if(removeUntilEndProject)
-            {
-                if(l.StartsWith("EndProject"))
-                    removeUntilEndProject = false;
-                return false;
-            }
-            
-            var blacklist = blacklistedGuids.Any(g => l.ToLower().Contains(g));
-            if(blacklist && l.StartsWith("Project"))
-                removeUntilEndProject = true;
-            
-            return !blacklist;
-        }));
-});
 
 Task("Restore-NuGet-Packages")
     .IsDependentOn("Clean")
-    .IsDependentOn("Prepare-XBuild-Solution")
+    .WithCriteria(parameters.IsRunningOnWindows)
     .Does(() =>
 {
     var maxRetryCount = 5;
@@ -153,21 +118,23 @@ Task("Restore-NuGet-Packages")
                 toolTimeout+=0.5;
             }})
         .Execute(()=> {
-            if(parameters.IsRunningOnWindows)
-            {
                 NuGetRestore(parameters.MSBuildSolution, new NuGetRestoreSettings {
+                    ToolPath = "./tools/NuGet.CommandLine/tools/NuGet.exe",
                     ToolTimeout = TimeSpan.FromMinutes(toolTimeout)
                 });
-            }
-            else
-            {
-                NuGetRestore(parameters.XBuildSolution, new NuGetRestoreSettings {
-                    ToolTimeout = TimeSpan.FromMinutes(toolTimeout)
-                });
-            }
         });
 });
 
+void DotNetCoreBuild()
+{
+    DotNetCoreRestore("samples\\ControlCatalog.NetCore");
+    DotNetBuild("samples\\ControlCatalog.NetCore");
+}
+
+Task("DotNetCoreBuild")
+    .IsDependentOn("Clean")
+    .Does(() => DotNetCoreBuild());
+
 Task("Build")
     .IsDependentOn("Restore-NuGet-Packages")
     .Does(() =>
@@ -177,27 +144,54 @@ Task("Build")
         MSBuild(parameters.MSBuildSolution, settings => {
             settings.SetConfiguration(parameters.Configuration);
             settings.WithProperty("Platform", "\"" + parameters.Platform + "\"");
+            settings.WithProperty("UseRoslynPathHack", "true");
             settings.SetVerbosity(Verbosity.Minimal);
             settings.WithProperty("Windows", "True");
-            settings.UseToolVersion(MSBuildToolVersion.VS2015);
+            settings.UseToolVersion(MSBuildToolVersion.VS2017);
             settings.SetNodeReuse(false);
         });
     }
     else
     {
-        XBuild(parameters.XBuildSolution, settings => {
-            settings.SetConfiguration(parameters.Configuration);
-            settings.WithProperty("Platform", "\"" + parameters.Platform + "\"");
-            settings.SetVerbosity(Verbosity.Minimal);
-        });
+        DotNetCoreBuild();
     }
 });
 
+void RunCoreTest(string dir, Parameters parameters, bool net461Only)
+{
+    Information("Running tests from " + dir);
+    DotNetCoreRestore(dir);
+    var frameworks = new List<string>(){"netcoreapp1.1"};
+    if(parameters.IsRunningOnWindows)
+        frameworks.Add("net461");
+    foreach(var fw in frameworks)
+    {
+        if(fw != "net461" && net461Only)
+            continue;
+        Information("Running for " + fw);
+        DotNetCoreTest(System.IO.Path.Combine(dir, System.IO.Path.GetFileName(dir)+".csproj"),
+            new DotNetCoreTestSettings{Framework = fw});
+    }
+}
+
+
+Task("Run-Net-Core-Unit-Tests")
+    .IsDependentOn("Clean")
+    .Does(() => {
+        RunCoreTest("./tests/Avalonia.Base.UnitTests", parameters, false);
+        RunCoreTest("./tests/Avalonia.Controls.UnitTests", parameters, true);
+        RunCoreTest("./tests/Avalonia.Layout.UnitTests", parameters, true);
+    });
+
 Task("Run-Unit-Tests")
+    .IsDependentOn("Run-Net-Core-Unit-Tests")
     .IsDependentOn("Build")
     .WithCriteria(() => !parameters.SkipTests)
     .Does(() =>
 {
+    if(!parameters.IsRunningOnWindows)
+       return;
+
     var unitTests = GetDirectories("./tests/Avalonia.*.UnitTests")
         .Select(dir => System.IO.Path.GetFileName(dir.FullPath))
         .Where(name => parameters.IsRunningOnWindows ? true : !(name.IndexOf("Direct2D", StringComparison.OrdinalIgnoreCase) >= 0))
@@ -236,7 +230,11 @@ Task("Run-Unit-Tests")
     {
         CopyDirectory(test.GetDirectory(), parameters.TestsRoot);
     }
-
+    
+    CopyFile(System.IO.Path.Combine(packages.NugetPackagesDir, "SkiaSharp", packages.SkiaSharpVersion,
+        "runtimes", "win7-x86", "native", "libSkiaSharp.dll"),
+        System.IO.Path.Combine(parameters.TestsRoot.ToString(), "libSkiaSharp.dll"));
+    
     var testsInDirectoryToRun = new List<FilePath>();
     if(parameters.IsRunningOnWindows)
     {
@@ -363,16 +361,20 @@ Task("Publish-NuGet")
 Task("Package")
   .IsDependentOn("Create-NuGet-Packages");
 
-Task("Default")
-  .IsDependentOn("Package");
-
+Task("Default").Does(() =>
+{
+    if(parameters.IsRunningOnWindows)
+        RunTarget("Package");
+    else
+        RunTarget("Run-Net-Core-Unit-Tests");
+});
 Task("AppVeyor")
   .IsDependentOn("Zip-Files")
   .IsDependentOn("Publish-MyGet")
   .IsDependentOn("Publish-NuGet");
 
 Task("Travis")
-  .IsDependentOn("Run-Unit-Tests");
+  .IsDependentOn("Run-Net-Core-Unit-Tests");
 
 ///////////////////////////////////////////////////////////////////////////////
 // EXECUTE

+ 33 - 19
packages.cake

@@ -1,9 +1,12 @@
+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 Packages(ICakeContext context, Parameters parameters)
     {
         // NUGET NUSPECS
@@ -23,21 +26,27 @@ public class Packages
         // Value is Tuple where Item1: Package Version, Item2: The packages.config file path.
         var packageVersions = new Dictionary<string, IList<Tuple<string,string>>>();
 
-        System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./src")).FullPath, "packages.config", SearchOption.AllDirectories).ToList().ForEach(fileName =>
+        System.IO.Directory.EnumerateFiles(((DirectoryPath)context.Directory("./src")).FullPath,
+            "*.csproj", SearchOption.AllDirectories).ToList().ForEach(fileName =>
         {
             if (!ignoredSubModulesPaths.Any(i => normalizePath(fileName).Contains(normalizePath(i))))
             {
-                var file = new PackageReferenceFile(fileName);
-                foreach (PackageReference packageReference in file.GetPackageReferences())
+                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(packageReference.Id, out versions);
+                    packageVersions.TryGetValue(name, out versions);
                     if (versions == null)
                     {
                         versions = new List<Tuple<string, string>>();
-                        packageVersions[packageReference.Id] = versions;
+                        packageVersions[name] = versions;
                     }
-                    versions.Add(Tuple.Create(packageReference.Version.ToString(), fileName));
+                    versions.Add(Tuple.Create(version, fileName));
                 }
             }
         });
@@ -65,7 +74,7 @@ public class Packages
         var SplatVersion = packageVersions["Splat"].FirstOrDefault().Item1;
         var SpracheVersion = packageVersions["Sprache"].FirstOrDefault().Item1;
         var SystemReactiveVersion = packageVersions["System.Reactive"].FirstOrDefault().Item1;
-        var SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1;
+        SkiaSharpVersion = packageVersions["SkiaSharp"].FirstOrDefault().Item1;
         var SharpDXVersion = packageVersions["SharpDX"].FirstOrDefault().Item1;
         var SharpDXDirect2D1Version = packageVersions["SharpDX.Direct2D1"].FirstOrDefault().Item1;
         var SharpDXDirect3D11Version = packageVersions["SharpDX.Direct3D11"].FirstOrDefault().Item1;
@@ -81,6 +90,11 @@ public class Packages
         context.Information("Package: SharpDX.Direct3D11, version: {0}", SharpDXDirect3D11Version);
         context.Information("Package: SharpDX.DXGI, version: {0}", SharpDXDXGIVersion);
 
+        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" };
@@ -129,12 +143,12 @@ public class Packages
         };
 
         var coreLibrariesFiles = coreLibraries.Select((lib) => {
-            return (FilePath)context.File(lib[0] + lib[1] + "/bin/" + parameters.DirSuffix + "/" + lib[1] + lib[2]);
+            return (FilePath)context.File(lib[0] + lib[1] + "/bin/" + parameters.DirSuffix + "/netstandard1.1/" + lib[1] + lib[2]);
         }).ToList();
 
         var coreLibrariesNuSpecContent = coreLibrariesFiles.Select((file) => {
             return new NuSpecContent { 
-                Source = file.FullPath, Target = "lib/portable-windows8+net45" 
+                Source = file.FullPath, Target = "lib/netstandard1.1" 
             };
         });
 
@@ -161,7 +175,7 @@ public class Packages
         var netCoreRuntimePlatformExtensions = new [] {".xml", ".dll"};
         var netCoreRuntimePlatform = netCoreRuntimePlatformExtensions.Select(libSuffix => {
             return new NuSpecContent {
-                Source = ((FilePath)context.File("./src/Avalonia.DotNetCoreRuntime/bin/" + parameters.DirSuffix + "/Avalonia.DotNetCoreRuntime" + libSuffix)).FullPath, 
+                Source = ((FilePath)context.File("./src/Avalonia.DotNetCoreRuntime/bin/" + parameters.DirSuffix + "/netcoreapp1.0/Avalonia.DotNetCoreRuntime" + libSuffix)).FullPath, 
                 Target = "lib/netcoreapp1.0" 
             };
         });
@@ -180,12 +194,12 @@ public class Packages
                     new NuSpecDependency() { Id = "Splat", Version = SplatVersion },
                     new NuSpecDependency() { Id = "Sprache", Version = SpracheVersion },
                     new NuSpecDependency() { Id = "System.Reactive", Version = SystemReactiveVersion },
-                    new NuSpecDependency() { Id = "System.Threading.ThreadPool", TargetFramework = "netcoreapp1.0", Version = "4.3.0" },
                     //.NET Core
+                    new NuSpecDependency() { Id = "System.Threading.ThreadPool", TargetFramework = "netcoreapp1.0", Version = "4.3.0" },
                     new NuSpecDependency() { Id = "NETStandard.Library", TargetFramework = "netcoreapp1.0", Version = "1.6.0" },
                     new NuSpecDependency() { Id = "Microsoft.NETCore.Portable.Compatibility", TargetFramework = "netcoreapp1.0", Version = "1.0.1" },
-                    new NuSpecDependency() { Id = "Splat", TargetFramework = "netcoreapp1.0", Version = "2.0.0" },
-                    new NuSpecDependency() { Id = "Serilog", TargetFramework = "netcoreapp1.0", Version = "2.3.0" },
+                    new NuSpecDependency() { Id = "Splat", TargetFramework = "netcoreapp1.0", Version = SplatVersion },
+                    new NuSpecDependency() { Id = "Serilog", TargetFramework = "netcoreapp1.0", Version = SerilogVersion },
                     new NuSpecDependency() { Id = "Sprache", TargetFramework = "netcoreapp1.0", Version = SpracheVersion },
                     new NuSpecDependency() { Id = "System.Reactive", TargetFramework = "netcoreapp1.0", Version = SystemReactiveVersion }
                 },
@@ -208,9 +222,9 @@ public class Packages
                 },
                 Files = new []
                 {
-                    new NuSpecContent { Source = "Avalonia.HtmlRenderer.dll", Target = "lib/portable-windows8+net45" }
+                    new NuSpecContent { Source = "Avalonia.HtmlRenderer.dll", Target = "lib/netstandard1.1" }
                 },
-                BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix),
+                BasePath = context.Directory("./src/Avalonia.HtmlRenderer/bin/" + parameters.DirSuffix + "/netstandard1.1"),
                 OutputDirectory = parameters.NugetRoot
             }
         };
@@ -324,7 +338,7 @@ public class Packages
                 Files = new []
                 {
                     new NuSpecContent { Source = "Avalonia.Win32/bin/" + parameters.DirSuffix + "/Avalonia.Win32.dll", Target = "lib/net45" },
-                    new NuSpecContent { Source = "Avalonia.Win32.NetStandard/bin/" + parameters.DirSuffix + "/Avalonia.Win32.dll", Target = "lib/netstandard1.1" }
+                    new NuSpecContent { Source = "Avalonia.Win32.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.1/Avalonia.Win32.dll", Target = "lib/netstandard1.1" }
                 },
                 BasePath = context.Directory("./src/Windows"),
                 OutputDirectory = parameters.NugetRoot
@@ -381,7 +395,7 @@ public class Packages
                 {
                     new NuSpecContent { Source = "Avalonia.Gtk3.dll", Target = "lib/netstandard1.1" }
                 },
-                BasePath = context.Directory("./src/Gtk/Avalonia.Gtk3/bin/" + parameters.DirSuffix),
+                BasePath = context.Directory("./src/Gtk/Avalonia.Gtk3/bin/" + parameters.DirSuffix + "/netstandard1.1"),
                 OutputDirectory = parameters.NugetRoot
             },
             ///////////////////////////////////////////////////////////////////////////////
@@ -420,7 +434,7 @@ public class Packages
                 Files = new []
                 {
                     new NuSpecContent { Source = "Avalonia.Skia.Desktop/bin/" + parameters.DirSuffixSkia + "/Avalonia.Skia.Desktop.dll", Target = "lib/net45" },
-                    new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/Avalonia.Skia.Desktop.dll", Target = "lib/netcoreapp1.0" }
+                    new NuSpecContent { Source = "Avalonia.Skia.Desktop.NetStandard/bin/" + parameters.DirSuffix + "/netstandard1.3/Avalonia.Skia.Desktop.dll", Target = "lib/netcoreapp1.0" }
                 },
                 BasePath = context.Directory("./src/Skia/"),
                 OutputDirectory = parameters.NugetRoot

+ 12 - 22
samples/BindingTest/BindingTest.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -13,6 +13,7 @@
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <TargetFrameworkProfile />
+    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -37,29 +38,9 @@
     <StartupObject />
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -92,7 +73,6 @@
     <EmbeddedResource Include="MainWindow.xaml">
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <None Include="packages.config" />
     <EmbeddedResource Include="TestItemView.xaml" />
   </ItemGroup>
   <ItemGroup>
@@ -185,4 +165,14 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="Serilog" Version="2.4.0" />
+    <PackageReference Include="Serilog.Sinks.Trace">
+      <Version>2.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="Splat" Version="2.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 7
samples/BindingTest/packages.config

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="net46" />
-  <package id="Splat" version="1.6.2" targetFramework="net46" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" />
-</packages>

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

@@ -73,7 +73,6 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="GettingStarted.Xamarin" />
     <None Include="Resources\AboutResources.txt" />
     <None Include="Assets\AboutAssets.txt" />
   </ItemGroup>
@@ -157,6 +156,11 @@
       <Name>ControlCatalog</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="System.Reactive">
+      <Version>3.0.0</Version>
+    </PackageReference>
+  </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
      Other similar extension points exist, see Microsoft.Common.targets.
@@ -165,4 +169,5 @@
 		<Target Name="AfterBuild">
 		</Target>
  -->
+  <Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 4
samples/ControlCatalog.Android/GettingStarted.Xamarin

@@ -1,4 +0,0 @@
-<GettingStarted>
-	<LocalContent>GS\Android\CS\AndroidApp\GettingStarted.html</LocalContent>
-	<EmbeddedNavigation>false</EmbeddedNavigation>
-</GettingStarted>

+ 7 - 2
samples/ControlCatalog.Android/Resources/Resource.Designer.cs

@@ -28,6 +28,8 @@ namespace ControlCatalog.Android
 		{
 			global::Avalonia.Android.Resource.String.ApplicationName = global::ControlCatalog.Android.Resource.String.ApplicationName;
 			global::Avalonia.Android.Resource.String.Hello = global::ControlCatalog.Android.Resource.String.Hello;
+			global::Avalonia.Android.Resource.String.library_name = global::ControlCatalog.Android.Resource.String.library_name;
+			global::Splat.Resource.String.library_name = global::ControlCatalog.Android.Resource.String.library_name;
 		}
 		
 		public partial class Attribute
@@ -94,11 +96,14 @@ namespace ControlCatalog.Android
 		public partial class String
 		{
 			
+			// aapt resource value: 0x7f040002
+			public const int ApplicationName = 2130968578;
+			
 			// aapt resource value: 0x7f040001
-			public const int ApplicationName = 2130968577;
+			public const int Hello = 2130968577;
 			
 			// aapt resource value: 0x7f040000
-			public const int Hello = 2130968576;
+			public const int library_name = 2130968576;
 			
 			static String()
 			{

+ 9 - 10
samples/ControlCatalog.Desktop/ControlCatalog.Desktop.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -13,6 +13,7 @@
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <TargetFrameworkProfile />
+    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -37,14 +38,6 @@
     <StartupObject />
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />
@@ -57,7 +50,6 @@
   <ItemGroup>
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
@@ -156,4 +148,11 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="Serilog" Version="2.4.0" />
+    <PackageReference Include="Serilog.Sinks.Trace">
+      <Version>2.1.0</Version>
+    </PackageReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 4
samples/ControlCatalog.Desktop/packages.config

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="net451" />
-</packages>

+ 13 - 0
samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj

@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>netcoreapp1.1</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\src\Avalonia.DotNetCoreRuntime\Avalonia.DotNetCoreRuntime.csproj" />
+    <ProjectReference Include="..\ControlCatalog\ControlCatalog.csproj" />
+  </ItemGroup>
+
+</Project>

+ 15 - 0
samples/ControlCatalog.NetCore/Program.cs

@@ -0,0 +1,15 @@
+using System;
+using Avalonia;
+
+namespace ControlCatalog.NetCore
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            AppBuilder.Configure<App>()
+                .UsePlatformDetect()
+                .Start<MainWindow>();
+        }
+    }
+}

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

@@ -181,4 +181,5 @@
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
+  <Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 21 - 80
samples/ControlCatalog/ControlCatalog.csproj

@@ -1,20 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{D0A739B9-3C68-4BA6-A328-41606954B6BD}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>ControlCatalog</RootNamespace>
-    <AssemblyName>ControlCatalog</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -153,62 +141,20 @@
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj">
-      <Project>{3E53A01A-B331-47F3-B828-4A5717E77A24}</Project>
-      <Name>Avalonia.Markup.Xaml</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj">
-      <Project>{6417E941-21BC-467B-A771-0DE389353CE6}</Project>
-      <Name>Avalonia.Markup</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</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.HtmlRenderer\Avalonia.HtmlRenderer.csproj">
-      <Project>{5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}</Project>
-      <Name>Avalonia.HtmlRenderer</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj">
-      <Project>{6417B24E-49C2-4985-8DB2-3AB9D898EC91}</Project>
-      <Name>Avalonia.ReactiveUI</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\src\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj">
-      <Project>{3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}</Project>
-      <Name>Avalonia.Themes.Default</Name>
-    </ProjectReference>
+    <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.HtmlRenderer\Avalonia.HtmlRenderer.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>
   <ItemGroup>
     <EmbeddedResource Include="Assets\test_icon.ico" />
@@ -225,12 +171,7 @@
       </SubType>
     </EmbeddedResource>
   </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
+  <ItemGroup>
+    <PackageReference Include="Serilog" Version="2.4.0" />
+  </ItemGroup>
 </Project>

+ 0 - 4
samples/ControlCatalog/packages.config

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="net46" />
-</packages>

+ 15 - 34
samples/RenderTest/RenderTest.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -37,40 +37,8 @@
     <StartupObject />
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\net45\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Windows.Threading, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Windows.Threading.3.0.0\lib\net45\System.Reactive.Windows.Threading.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -98,7 +66,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
-    <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="App.xaml">
@@ -219,4 +186,18 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="Serilog" Version="2.4.0" />
+    <PackageReference Include="Serilog.Sinks.Trace">
+      <Version>2.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="Splat" Version="2.0.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Windows.Threading" Version="3.0.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 11
samples/RenderTest/packages.config

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="net45" />
-  <package id="Splat" version="1.6.2" targetFramework="net45" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Windows.Threading" version="3.0.0" targetFramework="net45" />
-</packages>

+ 11 - 22
samples/VirtualizationTest/VirtualizationTest.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -37,28 +37,8 @@
     <StartupObject />
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\net45\Serilog.FullNetFx.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Splat.1.6.2\lib\Net45\Splat.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -80,7 +60,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="App.config" />
-    <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj">
@@ -182,4 +161,14 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="Serilog" Version="2.4.0" />
+    <PackageReference Include="Serilog.Sinks.Trace">
+      <Version>2.1.0</Version>
+    </PackageReference>
+    <PackageReference Include="Splat" Version="2.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 7
samples/VirtualizationTest/packages.config

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="net452" />
-  <package id="Splat" version="1.6.2" targetFramework="net452" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="net452" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net452" />
-</packages>

+ 1 - 0
samples/interop/GtkInteropDemo/GtkInteropDemo.csproj

@@ -157,4 +157,5 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <Import Project="$(MSBuildThisFileDirectory)..\..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 1 - 0
samples/interop/WindowsInteropTest/WindowsInteropTest.csproj

@@ -187,4 +187,5 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <Import Project="$(MSBuildThisFileDirectory)..\..\..\src\Shared\nuget.workaround.targets" />
 </Project>

+ 23 - 14
src/Android/Avalonia.Android/Avalonia.Android.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -41,18 +41,6 @@
     <Reference Include="System.Collections" />
     <Reference Include="System.Core" />
     <Reference Include="System.IO" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.3\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.3\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Reflection" />
     <Reference Include="System.ObjectModel" />
     <Reference Include="System.Threading.Tasks" />
@@ -86,7 +74,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
-    <None Include="packages.config" />
     <None Include="Resources\AboutResources.txt" />
   </ItemGroup>
   <ItemGroup>
@@ -152,4 +139,26 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="System.Collections" Version="4.3.0" />
+    <PackageReference Include="System.Collections.Concurrent" Version="4.3.0" />
+    <PackageReference Include="System.ComponentModel" Version="4.3.0" />
+    <PackageReference Include="System.Diagnostics.Debug" Version="4.3.0" />
+    <PackageReference Include="System.Diagnostics.Tools" Version="4.3.0" />
+    <PackageReference Include="System.Globalization" Version="4.3.0" />
+    <PackageReference Include="System.Linq" Version="4.3.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+    <PackageReference Include="System.Reflection" Version="4.3.0" />
+    <PackageReference Include="System.Resources.ResourceManager" Version="4.3.0" />
+    <PackageReference Include="System.Runtime" Version="4.3.0" />
+    <PackageReference Include="System.Runtime.Extensions" Version="4.3.0" />
+    <PackageReference Include="System.Threading" Version="4.3.0" />
+    <PackageReference Include="System.Threading.Tasks" Version="4.3.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\Shared\nuget.workaround.targets" />
+  <PropertyGroup Condition="'$(UseRoslynPathHack)' == ''">
+    <CscToolPath>$(MSBuildToolsPath)\Roslyn</CscToolPath>
+  </PropertyGroup>
 </Project>

+ 5 - 2
src/Android/Avalonia.Android/Resources/Resource.Designer.cs

@@ -40,11 +40,14 @@ namespace Avalonia.Android
 		public partial class String
 		{
 			
+			// aapt resource value: 0x7f020002
+			public static int ApplicationName = 2130837506;
+			
 			// aapt resource value: 0x7f020001
-			public static int ApplicationName = 2130837505;
+			public static int Hello = 2130837505;
 			
 			// aapt resource value: 0x7f020000
-			public static int Hello = 2130837504;
+			public static int library_name = 2130837504;
 			
 			static String()
 			{

+ 0 - 19
src/Android/Avalonia.Android/packages.config

@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Collections" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Collections.Concurrent" version="4.0.12" targetFramework="monoandroid44" />
-  <package id="System.ComponentModel" version="4.0.1" targetFramework="monoandroid44" />
-  <package id="System.Diagnostics.Debug" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Diagnostics.Tools" version="4.0.1" targetFramework="monoandroid44" />
-  <package id="System.Globalization" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Linq" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reflection" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Resources.ResourceManager" version="4.0.1" targetFramework="monoandroid44" />
-  <package id="System.Runtime" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Runtime.Extensions" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Threading" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Threading.Tasks" version="4.0.11" targetFramework="monoandroid44" />
-</packages>

+ 26 - 29
src/Android/Avalonia.AndroidTestApplication/Avalonia.AndroidTestApplication.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -64,35 +64,8 @@
   <ItemGroup>
     <Reference Include="Mono.Android" />
     <Reference Include="mscorlib" />
-    <Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\Serilog.1.5.14\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\Splat.1.6.2\lib\monoandroid\Splat.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="Sprache, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\Sprache.2.1.0\lib\netstandard1.0\Sprache.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.3\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.3\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.3\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Xml" />
   </ItemGroup>
@@ -103,7 +76,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
-    <None Include="packages.config" />
     <None Include="Resources\AboutResources.txt" />
     <None Include="Assets\AboutAssets.txt" />
   </ItemGroup>
@@ -188,4 +160,29 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="Serilog" Version="2.4.0" />
+    <PackageReference Include="Splat" Version="2.0.0" />
+    <PackageReference Include="Sprache" Version="2.1.0" />
+    <PackageReference Include="System.Collections" Version="4.3.0" />
+    <PackageReference Include="System.Collections.Concurrent" Version="4.3.0" />
+    <PackageReference Include="System.ComponentModel" Version="4.3.0" />
+    <PackageReference Include="System.Diagnostics.Debug" Version="4.3.0" />
+    <PackageReference Include="System.Diagnostics.Tools" Version="4.3.0" />
+    <PackageReference Include="System.Globalization" Version="4.3.0" />
+    <PackageReference Include="System.Linq" Version="4.3.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+    <PackageReference Include="System.Reflection" Version="4.3.0" />
+    <PackageReference Include="System.Resources.ResourceManager" Version="4.3.0" />
+    <PackageReference Include="System.Runtime" Version="4.3.0" />
+    <PackageReference Include="System.Runtime.Extensions" Version="4.3.0" />
+    <PackageReference Include="System.Text.RegularExpressions" Version="4.3.0" />
+    <PackageReference Include="System.Threading" Version="4.3.0" />
+    <PackageReference Include="System.Threading.Tasks" Version="4.3.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\Shared\nuget.workaround.targets" />
 </Project>

+ 1 - 0
src/Android/Avalonia.AndroidTestApplication/Resources/Resource.Designer.cs

@@ -28,6 +28,7 @@ namespace Avalonia.AndroidTestApplication
 		{
 			global::Avalonia.Android.Resource.String.ApplicationName = global::Avalonia.AndroidTestApplication.Resource.String.ApplicationName;
 			global::Avalonia.Android.Resource.String.Hello = global::Avalonia.AndroidTestApplication.Resource.String.Hello;
+			global::Avalonia.Android.Resource.String.library_name = global::Avalonia.AndroidTestApplication.Resource.String.library_name;
 			global::Splat.Resource.String.library_name = global::Avalonia.AndroidTestApplication.Resource.String.library_name;
 		}
 		

+ 0 - 25
src/Android/Avalonia.AndroidTestApplication/packages.config

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="monoandroid44" />
-  <package id="Splat" version="1.6.2" targetFramework="monoandroid51" />
-  <package id="Sprache" version="2.1.0" targetFramework="monoandroid44" />
-  <package id="System.Collections" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Collections.Concurrent" version="4.0.12" targetFramework="monoandroid44" />
-  <package id="System.ComponentModel" version="4.0.1" targetFramework="monoandroid44" />
-  <package id="System.Diagnostics.Debug" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Diagnostics.Tools" version="4.0.1" targetFramework="monoandroid44" />
-  <package id="System.Globalization" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Linq" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="monoandroid44" />
-  <package id="System.Reflection" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Resources.ResourceManager" version="4.0.1" targetFramework="monoandroid44" />
-  <package id="System.Runtime" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Runtime.Extensions" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="monoandroid44" />
-  <package id="System.Threading" version="4.0.11" targetFramework="monoandroid44" />
-  <package id="System.Threading.Tasks" version="4.0.11" targetFramework="monoandroid44" />
-</packages>

+ 9 - 60
src/Avalonia.Animation/Avalonia.Animation.csproj

@@ -1,20 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Animation</RootNamespace>
-    <AssemblyName>Avalonia.Animation</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -38,57 +25,19 @@
     <NoWarn>CS1591</NoWarn>
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
-  <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-  </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="Animation`1.cs" />
-    <Compile Include="Animation.cs" />
-    <Compile Include="Animate.cs" />
-    <Compile Include="Animatable.cs" />
-    <Compile Include="AnimationExtensions.cs" />
-    <Compile Include="IEasing`1.cs" />
-    <Compile Include="LinearEasing.cs" />
-    <Compile Include="LinearDoubleEasing.cs" />
-    <Compile Include="IEasing.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="PropertyTransitions.cs" />
-    <Compile Include="PropertyTransition.cs" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 8
src/Avalonia.Animation/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 9 - 129
src/Avalonia.Base/Avalonia.Base.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia</RootNamespace>
-    <AssemblyName>Avalonia.Base</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -44,118 +29,13 @@
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="Data\BindingChainException.cs" />
-    <Compile Include="Data\BindingNotification.cs" />
-    <Compile Include="Data\IndexerBinding.cs" />
-    <Compile Include="Diagnostics\INotifyCollectionChangedDebug.cs" />
-    <Compile Include="Data\AssignBindingAttribute.cs" />
-    <Compile Include="Data\BindingOperations.cs" />
-    <Compile Include="Data\InstancedBinding.cs" />
-    <Compile Include="Data\IBinding.cs" />
-    <Compile Include="Data\IndexerDescriptor.cs" />
-    <Compile Include="Collections\AvaloniaDictionary.cs" />
-    <Compile Include="Data\BindingMode.cs" />
-    <Compile Include="Diagnostics\IAvaloniaObjectDebug.cs" />
-    <Compile Include="Diagnostics\AvaloniaObjectExtensions.cs" />
-    <Compile Include="AttachedProperty.cs" />
-    <Compile Include="IPriorityValueOwner.cs" />
-    <Compile Include="IStyledPropertyAccessor.cs" />
-    <Compile Include="IDirectPropertyAccessor.cs" />
-    <Compile Include="DirectProperty.cs" />
-    <Compile Include="IAvaloniaObject.cs" />
-    <Compile Include="IDirectPropertyMetadata.cs" />
-    <Compile Include="IStyledPropertyMetadata.cs" />
-    <Compile Include="ISupportInitialize.cs" />
-    <Compile Include="Logging\ILogSink.cs" />
-    <Compile Include="Logging\LogArea.cs" />
-    <Compile Include="Logging\LogEventLevel.cs" />
-    <Compile Include="Logging\Logger.cs" />
-    <Compile Include="Metadata\DependsOnAttribute.cs" />
-    <Compile Include="Metadata\ContentAttribute.cs" />
-    <Compile Include="AvaloniaDisposable.cs" />
-    <Compile Include="AvaloniaInternalException.cs" />
-    <Compile Include="AvaloniaLocator.cs" />
-    <Compile Include="Metadata\XmlnsDefinitionAttribute.cs" />
-    <Compile Include="AvaloniaObjectExtensions.cs" />
-    <Compile Include="PropertyMetadata.cs" />
-    <Compile Include="Reactive\ObservableEx.cs" />
-    <Compile Include="Reactive\WeakPropertyChangedObservable.cs" />
-    <Compile Include="StyledProperty.cs" />
-    <Compile Include="StyledPropertyBase.cs" />
-    <Compile Include="AvaloniaPropertyRegistry.cs" />
-    <Compile Include="AvaloniaProperty`1.cs" />
-    <Compile Include="Platform\IAssetLoader.cs" />
-    <Compile Include="Platform\IRuntimePlatform.cs" />
-    <Compile Include="Data\BindingPriority.cs" />
-    <Compile Include="PriorityBindingEntry.cs" />
-    <Compile Include="Collections\IAvaloniaList.cs" />
-    <Compile Include="Collections\AvaloniaList.cs" />
-    <Compile Include="Contract.cs" />
-    <Compile Include="Diagnostics\AvaloniaPropertyValue.cs" />
-    <Compile Include="IDescription.cs" />
-    <Compile Include="Collections\AvaloniaListExtensions.cs" />
-    <Compile Include="Collections\IAvaloniaReadOnlyList.cs" />
-    <Compile Include="AvaloniaObject.cs" />
-    <Compile Include="AvaloniaProperty.cs" />
-    <Compile Include="AvaloniaPropertyChangedEventArgs.cs" />
-    <Compile Include="Platform\IPlatformHandle.cs" />
-    <Compile Include="Platform\IPlatformThreadingInterface.cs" />
-    <Compile Include="Platform\PlatformHandle.cs" />
-    <Compile Include="PriorityLevel.cs" />
-    <Compile Include="PriorityValue.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Reactive\AnonymousSubject`1.cs" />
-    <Compile Include="Reactive\AnonymousSubject`2.cs" />
-    <Compile Include="Reactive\AvaloniaObservable.cs" />
-    <Compile Include="DirectPropertyMetadata`1.cs" />
-    <Compile Include="StyledPropertyMetadata`1.cs" />
-    <Compile Include="Threading\Dispatcher.cs" />
-    <Compile Include="Threading\DispatcherPriority.cs" />
-    <Compile Include="Threading\DispatcherTimer.cs" />
-    <Compile Include="Threading\JobRunner.cs" />
-    <Compile Include="Threading\AvaloniaScheduler.cs" />
-    <Compile Include="Threading\AvaloniaSynchronizationContext.cs" />
-    <Compile Include="Threading\SingleThreadDispatcher.cs" />
-    <Compile Include="Utilities\ExceptionUtilities.cs" />
-    <Compile Include="Utilities\IWeakSubscriber.cs" />
-    <Compile Include="Utilities\MathUtilities.cs" />
-    <Compile Include="Utilities\SingleOrDictionary.cs" />
-    <Compile Include="Utilities\TypeUtilities.cs" />
-    <Compile Include="Utilities\WeakObservable.cs" />
-    <Compile Include="Utilities\WeakSubscriptionManager.cs" />
-    <Compile Include="Utilities\WeakTimer.cs" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="JetBrains.Annotations.PCL328, Version=10.0.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\JetBrains.Annotations.10.0.0\lib\portable-net4+sl5+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\JetBrains.Annotations.PCL328.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
+    <PackageReference Include="JetBrains.Annotations" Version="10.3.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 9
src/Avalonia.Base/packages.config

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="JetBrains.Annotations" version="10.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 16 - 246
src/Avalonia.Controls/Avalonia.Controls.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{D2221C82-4A25-4583-9B43-D791E3F6820C}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Controls</RootNamespace>
-    <AssemblyName>Avalonia.Controls</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -44,237 +29,22 @@
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="AppBuilderBase.cs" />
-    <Compile Include="Application.cs" />
-    <Compile Include="Classes.cs" />
-    <Compile Include="ContextMenu.cs" />
-    <Compile Include="Design.cs" />
-    <Compile Include="DockPanel.cs" />
-    <Compile Include="Expander.cs" />
-    <Compile Include="Generators\ItemContainerInfo.cs" />
-    <Compile Include="Generators\MenuItemContainerGenerator.cs" />
-    <Compile Include="Generators\TreeContainerIndex.cs" />
-    <Compile Include="HotkeyManager.cs" />
-    <Compile Include="IApplicationLifecycle.cs" />
-    <Compile Include="IScrollable.cs" />
-    <Compile Include="Platform\IWindowBaseImpl.cs" />
-    <Compile Include="Platform\Surfaces\IFramebufferPlatformSurface.cs" />
-    <Compile Include="PointEventArgs.cs" />
-    <Compile Include="Embedding\EmbeddableControlRoot.cs" />
-    <Compile Include="Platform\IEmbeddableWindowImpl.cs" />
-    <Compile Include="Platform\ExportAvaloniaModuleAttribute.cs" />
-    <Compile Include="Platform\ExportWindowingSubsystemAttribute.cs" />
-    <Compile Include="WindowBase.cs" />
-    <Compile Include="WindowIcon.cs" />
-    <Compile Include="IPseudoClasses.cs" />
-    <Compile Include="DropDownItem.cs" />
-    <Compile Include="ISetInheritanceParent.cs" />
-    <Compile Include="ItemVirtualizationMode.cs" />
-    <Compile Include="IVirtualizingController.cs" />
-    <Compile Include="IVirtualizingPanel.cs" />
-    <Compile Include="LayoutTransformControl.cs" />
-    <Compile Include="Mixins\ContentControlMixin.cs" />
-    <Compile Include="Platform\IWindowIconImpl.cs" />
-    <Compile Include="Platform\IPlatformIconLoader.cs" />
-    <Compile Include="Platform\IWindowingPlatform.cs" />
-    <Compile Include="Platform\PlatformManager.cs" />
-    <Compile Include="Presenters\IContentPresenterHost.cs" />
-    <Compile Include="Presenters\IItemsPresenterHost.cs" />
-    <Compile Include="Presenters\ItemsPresenterBase.cs" />
-    <Compile Include="Presenters\ItemVirtualizerNone.cs" />
-    <Compile Include="Presenters\ItemVirtualizerSimple.cs" />
-    <Compile Include="Presenters\ItemVirtualizer.cs" />
-    <Compile Include="Primitives\HeaderedSelectingControl.cs" />
-    <Compile Include="Primitives\ILogicalScrollable.cs" />
-    <Compile Include="Primitives\TabStripItem.cs" />
-    <Compile Include="Primitives\TemplateAppliedEventArgs.cs" />
-    <Compile Include="SelectionChangedEventArgs.cs" />
-    <Compile Include="SelectionMode.cs" />
-    <Compile Include="Separator.cs" />
-    <Compile Include="Shapes\Line.cs" />
-    <Compile Include="Shapes\Polygon.cs" />
-    <Compile Include="Shapes\Polyline.cs" />
-    <Compile Include="Slider.cs" />
-    <Compile Include="SystemDialog.cs" />
-    <Compile Include="Generators\ITreeItemContainerGenerator.cs" />
-    <Compile Include="Generators\ItemContainerEventArgs.cs" />
-    <Compile Include="IContentControl.cs" />
-    <Compile Include="IControl.cs" />
-    <Compile Include="IPanel.cs" />
-    <Compile Include="ISetLogicalParent.cs" />
-    <Compile Include="MenuItemAccessKeyHandler.cs" />
-    <Compile Include="Mixins\SelectableMixin.cs" />
-    <Compile Include="Platform\ISystemDialogImpl.cs" />
-    <Compile Include="Presenters\IContentPresenter.cs" />
-    <Compile Include="Primitives\AccessText.cs" />
-    <Compile Include="Border.cs" />
-    <Compile Include="MenuItem.cs" />
-    <Compile Include="Menu.cs" />
-    <Compile Include="Button.cs" />
-    <Compile Include="DropDown.cs" />
-    <Compile Include="Carousel.cs" />
-    <Compile Include="Platform\IPopupImpl.cs" />
-    <Compile Include="Platform\ITopLevelImpl.cs" />
-    <Compile Include="PlacementMode.cs" />
-    <Compile Include="Primitives\Popup.cs" />
-    <Compile Include="Canvas.cs" />
-    <Compile Include="Templates\FuncControlTemplate`2.cs" />
-    <Compile Include="Templates\FuncDataTemplate`1.cs" />
-    <Compile Include="Templates\FuncMemberSelector.cs" />
-    <Compile Include="Templates\IControlTemplate.cs" />
-    <Compile Include="Templates\FuncTemplate`2.cs" />
-    <Compile Include="Templates\FuncTemplate`1.cs" />
-    <Compile Include="Templates\IDataTemplate.cs" />
-    <Compile Include="Presenters\IItemsPresenter.cs" />
-    <Compile Include="Presenters\IPresenter.cs" />
-    <Compile Include="Presenters\CarouselPresenter.cs" />
-    <Compile Include="Primitives\AdornerDecorator.cs" />
-    <Compile Include="Primitives\AdornerLayer.cs" />
-    <Compile Include="Primitives\RangeBase.cs" />
-    <Compile Include="ProgressBar.cs" />
-    <Compile Include="RadioButton.cs" />
-    <Compile Include="CheckBox.cs" />
-    <Compile Include="ColumnDefinition.cs" />
-    <Compile Include="ColumnDefinitions.cs" />
-    <Compile Include="ContentControl.cs" />
-    <Compile Include="GridSplitter.cs" />
-    <Compile Include="ISelectable.cs" />
-    <Compile Include="ListBoxItem.cs" />
-    <Compile Include="ListBox.cs" />
-    <Compile Include="Platform\IWindowImpl.cs" />
-    <Compile Include="Presenters\ScrollContentPresenter.cs" />
-    <Compile Include="Presenters\ContentPresenter.cs" />
-    <Compile Include="Control.cs" />
-    <Compile Include="ControlExtensions.cs" />
-    <Compile Include="Controls.cs" />
-    <Compile Include="Templates\FuncControlTemplate.cs" />
-    <Compile Include="Templates\DataTemplateExtensions.cs" />
-    <Compile Include="Templates\FuncDataTemplate.cs" />
-    <Compile Include="Generators\TreeItemContainerGenerator.cs" />
-    <Compile Include="Generators\ItemContainerGenerator`1.cs" />
-    <Compile Include="Generators\ItemContainerGenerator.cs" />
-    <Compile Include="IGlobalDataTemplates.cs" />
-    <Compile Include="Templates\DataTemplates.cs" />
-    <Compile Include="Decorator.cs" />
-    <Compile Include="DefinitionBase.cs" />
-    <Compile Include="Grid.cs" />
-    <Compile Include="GridLength.cs" />
-    <Compile Include="Primitives\HeaderedContentControl.cs" />
-    <Compile Include="Primitives\HeaderedItemsControl.cs" />
-    <Compile Include="IHeadered.cs" />
-    <Compile Include="Image.cs" />
-    <Compile Include="Generators\IItemContainerGenerator.cs" />
-    <Compile Include="ItemsControl.cs" />
-    <Compile Include="Presenters\ItemsPresenter.cs" />
-    <Compile Include="Panel.cs" />
-    <Compile Include="Primitives\ScrollBarVisibility.cs" />
-    <Compile Include="Primitives\Track.cs" />
-    <Compile Include="Primitives\Thumb.cs" />
-    <Compile Include="RequestBringIntoViewEventArgs.cs" />
-    <Compile Include="Shapes\Ellipse.cs" />
-    <Compile Include="Templates\IMemberSelector.cs" />
-    <Compile Include="Templates\ITemplate`2.cs" />
-    <Compile Include="Templates\ITemplate`1.cs" />
-    <Compile Include="Templates\ITreeDataTemplate.cs" />
-    <Compile Include="Templates\FuncTreeDataTemplate.cs" />
-    <Compile Include="ToolTip.cs" />
-    <Compile Include="UserControl.cs" />
-    <Compile Include="Templates\TemplateExtensions.cs" />
-    <Compile Include="Utils\AncestorFinder.cs" />
-    <Compile Include="Utils\IEnumerableUtils.cs" />
-    <Compile Include="Utils\StringUtils.cs" />
-    <Compile Include="TopLevel.cs" />
-    <Compile Include="Primitives\PopupRoot.cs" />
-    <Compile Include="Utils\UndoRedoHelper.cs" />
-    <Compile Include="VirtualizingStackPanel.cs" />
-    <Compile Include="WindowState.cs" />
-    <Compile Include="Window.cs" />
-    <Compile Include="RowDefinition.cs" />
-    <Compile Include="RowDefinitions.cs" />
-    <Compile Include="Primitives\SelectingItemsControl.cs" />
-    <Compile Include="ScrollViewer.cs" />
-    <Compile Include="Shapes\Path.cs" />
-    <Compile Include="Shapes\Rectangle.cs" />
-    <Compile Include="Shapes\Shape.cs" />
-    <Compile Include="Primitives\ScrollBar.cs" />
-    <Compile Include="StackPanel.cs" />
-    <Compile Include="TabControl.cs" />
-    <Compile Include="TabItem.cs" />
-    <Compile Include="Primitives\TabStrip.cs" />
-    <Compile Include="Primitives\TemplatedControl.cs" />
-    <Compile Include="TextBlock.cs" />
-    <Compile Include="TextBox.cs" />
-    <Compile Include="Presenters\TextPresenter.cs" />
-    <Compile Include="Primitives\ToggleButton.cs" />
-    <Compile Include="Templates\FuncTreeDataTemplate`1.cs" />
-    <Compile Include="TreeView.cs" />
-    <Compile Include="TreeViewItem.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="WindowEdge.cs" />
-    <Compile Include="WrapPanel.cs" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="JetBrains.Annotations.PCL328, Version=10.0.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\JetBrains.Annotations.10.0.0\lib\portable-net4+sl5+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\JetBrains.Annotations.PCL328.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
+    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.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.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="JetBrains.Annotations" Version="10.3.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup />
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 1
src/Avalonia.Controls/Utils/UndoRedoHelper.cs

@@ -3,7 +3,6 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
-using JetBrains.Annotations;
 using Avalonia.Utilities;
 
 namespace Avalonia.Controls.Utils

+ 0 - 9
src/Avalonia.Controls/packages.config

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="JetBrains.Annotations" version="10.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 20 - 93
src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{799A7BB5-3C2C-48B6-85A7-406A12C420DA}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia</RootNamespace>
-    <AssemblyName>Avalonia.DesignerSupport</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -40,87 +25,29 @@
     <NoWarn>CS1591</NoWarn>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj">
-      <Project>{3e53a01a-b331-47f3-b828-4a5717e77a24}</Project>
-      <Name>Avalonia.Markup.Xaml</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Markup\Avalonia.Markup\Avalonia.Markup.csproj">
-      <Project>{6417e941-21bc-467b-a771-0de389353ce6}</Project>
-      <Name>Avalonia.Markup</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{d211e587-d8bc-45b9-95a4-f297c8fa5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj">
-      <Project>{3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}</Project>
-      <Name>Avalonia.Themes.Default</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
+    <ProjectReference Include="..\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
+    <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.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
+    <ProjectReference Include="..\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="DesignerAssist.cs" />
-    <Compile Include="DesignerApi.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 8
src/Avalonia.DesignerSupport/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 26 - 118
src/Avalonia.Diagnostics/Avalonia.Diagnostics.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{7062AE20-5DCC-4442-9645-8195BDECE63E}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Diagnostics</RootNamespace>
-    <AssemblyName>Avalonia.Diagnostics</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -41,117 +26,40 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj">
-      <Project>{3e53a01a-b331-47f3-b828-4a5717e77a24}</Project>
-      <Name>Avalonia.Markup.Xaml</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Markup\Avalonia.Markup\Avalonia.Markup.csproj">
-      <Project>{6417e941-21bc-467b-a771-0de389353ce6}</Project>
-      <Name>Avalonia.Markup</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj">
-      <Project>{6417B24E-49C2-4985-8DB2-3AB9D898EC91}</Project>
-      <Name>Avalonia.ReactiveUI</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj">
-      <Project>{3e10a5fa-e8da-48b1-ad44-6a5b6cb7750f}</Project>
-      <Name>Avalonia.Themes.Default</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
+    <ProjectReference Include="..\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
+    <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.ReactiveUI\Avalonia.ReactiveUI.csproj" />
+    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
+    <ProjectReference Include="..\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="LogManager.cs" />
-    <Compile Include="Debug.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ViewLocator.cs" />
-    <Compile Include="ViewModels\DevToolsViewModel.cs" />
-    <Compile Include="ViewModels\TreePageViewModel.cs" />
-    <Compile Include="ViewModels\PropertyDetails.cs" />
-    <Compile Include="ViewModels\ControlDetailsViewModel.cs" />
-    <Compile Include="ViewModels\LogicalTreeNode.cs" />
-    <Compile Include="ViewModels\TreeNode.cs" />
-    <Compile Include="ViewModels\VisualTreeNode.cs" />
-    <Compile Include="Views\SimpleGrid.cs" />
-    <Compile Include="Views\TreePage.xaml.cs">
-      <DependentUpon>TreePageView.xaml</DependentUpon>
+    <Compile Update="**\*.xaml.cs">
+      <DependentUpon>%(Filename)</DependentUpon>
     </Compile>
-    <Compile Include="DevTools.xaml.cs">
-      <DependentUpon>DevTools.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\ControlDetailsView.cs" />
-    <Compile Include="Views\GridRepeater.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="Splat">
-      <HintPath>..\..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-    <EmbeddedResource Include="DevTools.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Views\TreePageView.xaml">
+    <EmbeddedResource Include="**\*.xaml">
       <SubType>Designer</SubType>
     </EmbeddedResource>
   </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
   </Target>
   <Target Name="AfterBuild">
   </Target>
-  -->
+  <ItemGroup>
+    <PackageReference Include="Splat" Version="2.0.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+  </ItemGroup>
 </Project>

+ 0 - 9
src/Avalonia.Diagnostics/packages.config

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 11 - 58
src/Avalonia.DotNetCoreRuntime/Avalonia.DotNetCoreRuntime.csproj

@@ -1,21 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{7863EA94-F0FB-4386-BF8C-E5BFA761560A}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.DotNetCoreRuntime</RootNamespace>
-    <AssemblyName>Avalonia.DotNetCoreRuntime</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
-    <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
+    <TargetFramework>netcoreapp1.0</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -36,54 +22,21 @@
     <WarningLevel>4</WarningLevel>
     <DocumentationFile>bin\Release\Avalonia.DotNetCoreRuntime.XML</DocumentationFile>
   </PropertyGroup>
-  <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <None Include="project.json" />
-  </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
-      <Link>SharedAssemblyInfo.cs</Link>
+      <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="AppBuilder.cs" />
-    <Compile Include="NetCoreRuntimePlatform.cs" />
-    <Compile Include="RuntimeInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{eb582467-6abb-43a1-b052-e981ba910e3a}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Gtk\Avalonia.Gtk3\Avalonia.Gtk3.csproj">
-      <Project>{bb1f7bb5-6ad4-4776-94d9-c09d0a972658}</Project>
-      <Name>Avalonia.Gtk3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Skia\Avalonia.Skia.Desktop.NetStandard\Avalonia.Skia.Desktop.NetStandard.csproj">
-      <Project>{7d2d3083-71dd-4cc9-8907-39a0d86fb322}</Project>
-      <Name>Avalonia.Skia.Desktop.NetStandard</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Windows\Avalonia.Win32.NetStandard\Avalonia.Win32.NetStandard.csproj">
-      <Project>{40759a76-d0f2-464e-8000-6ff0f5c4bd7c}</Project>
-      <Name>Avalonia.Win32.NetStandard</Name>
-    </ProjectReference>
+    <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.Desktop.NetStandard\Avalonia.Skia.Desktop.NetStandard.csproj" />
+    <ProjectReference Include="..\Windows\Avalonia.Win32.NetStandard\Avalonia.Win32.NetStandard.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <Folder Include="Properties\" />
+    <PackageReference Include="System.Threading.ThreadPool" Version="4.3.0" />
   </ItemGroup>
   <Import Project="..\Shared\PlatformSupport\PlatformSupport.projitems" Label="Shared" />
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 6 - 0
src/Avalonia.DotNetCoreRuntime/Properties/AssemblyInfo.cs

@@ -0,0 +1,6 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+using System.Reflection;
+
+[assembly: AssemblyTitle("Avalonia.DotNetCoreRuntime")]

+ 0 - 11
src/Avalonia.DotNetCoreRuntime/project.json

@@ -1,11 +0,0 @@
-{
-  "supports": {},
-  "dependencies": {
-    "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
-    "NETStandard.Library": "1.6.0",
-    "System.Threading.ThreadPool": "4.3.0"
-  },
-  "frameworks": {
-    "netstandard1.5": {}
-  }
-}

+ 6 - 12
src/Avalonia.DotNetFrameworkRuntime/Avalonia.DotNetFrameworkRuntime.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -36,14 +36,6 @@
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -74,9 +66,6 @@
       <Name>Avalonia.Styling</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
   <Import Project="..\Shared\PlatformSupport\PlatformSupport.projitems" Label="Shared" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
@@ -86,4 +75,9 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 5
src/Avalonia.DotNetFrameworkRuntime/packages.config

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" />
-</packages>

+ 16 - 77
src/Avalonia.HtmlRenderer/Avalonia.HtmlRenderer.csproj

@@ -1,22 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{5FB2B005-0A7F-4DAD-ADD4-3ED01444E63D}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.HtmlRenderer</RootNamespace>
-    <AssemblyName>Avalonia.HtmlRenderer</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
+    <EnableDefaultItems>False</EnableDefaultItems>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -36,7 +23,6 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
     <Content Include="external\Source\HtmlRenderer\Core\Utils\ImageError.png" />
     <Content Include="external\Source\HtmlRenderer\Core\Utils\ImageLoad.png" />
   </ItemGroup>
@@ -51,6 +37,7 @@
     <Compile Include="Adapters\ImageAdapter.cs" />
     <Compile Include="Adapters\PenAdapter.cs" />
     <Compile Include="Adapters\AvaloniaAdapter.cs" />
+    <Compile Include="Compat\Api.cs" />
     <Compile Include="Compat\Attributes.cs" />
     <Compile Include="Compat\ThreadPool.cs" />
     <Compile Include="external\Source\HtmlRenderer.Pcl\PclCompat.cs" />
@@ -137,65 +124,17 @@
     <Compile Include="Utilities\Util.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
+    <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.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
-  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-    <PropertyGroup>
-      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
-    </PropertyGroup>
-    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
-  </Target>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 28 - 0
src/Avalonia.HtmlRenderer/Compat/Api.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace System.Net
+{
+    internal class AsyncCompletedEventArgs
+    {
+        public object UserState { get; set; }
+        public Exception Error { get; set; }
+        public bool Cancelled { get; set; }
+
+        public AsyncCompletedEventArgs(Exception error, bool cancelled, object userState)
+        {
+
+        }
+    }
+
+    class WebException : Exception
+    {
+        public object Response { get; set; }
+    }
+
+    class HttpWebResponse
+    {
+        public HttpStatusCode StatusCode { get; set; }
+    }
+}

+ 0 - 7
src/Avalonia.HtmlRenderer/packages.config

@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable45-net45+win8" />
-  <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 13 - 115
src/Avalonia.Input/Avalonia.Input.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{62024B2D-53EB-4638-B26B-85EEAA54866E}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Input</RootNamespace>
-    <AssemblyName>Avalonia.Input</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -41,109 +26,22 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
+    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj" />
+    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj" />
+    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="Cursors.cs" />
-    <Compile Include="AccessKeyHandler.cs" />
-    <Compile Include="Gestures.cs" />
-    <Compile Include="KeyBinding.cs" />
-    <Compile Include="KeyGesture.cs" />
-    <Compile Include="Platform\IClipboard.cs" />
-    <Compile Include="Platform\IStandardCursorFactory.cs" />
-    <Compile Include="Raw\RawTextInputEventArgs.cs" />
-    <Compile Include="NavigationMethod.cs" />
-    <Compile Include="IInputRoot.cs" />
-    <Compile Include="IMainMenu.cs" />
-    <Compile Include="IAccessKeyHandler.cs" />
-    <Compile Include="FocusManager.cs" />
-    <Compile Include="NavigationDirection.cs" />
-    <Compile Include="ICloseable.cs" />
-    <Compile Include="IFocusManager.cs" />
-    <Compile Include="IFocusScope.cs" />
-    <Compile Include="IInputDevice.cs" />
-    <Compile Include="IInputElement.cs" />
-    <Compile Include="IInputManager.cs" />
-    <Compile Include="IKeyboardDevice.cs" />
-    <Compile Include="IKeyboardNavigationHandler.cs" />
-    <Compile Include="IMouseDevice.cs" />
-    <Compile Include="INavigableContainer.cs" />
-    <Compile Include="InputElement.cs" />
-    <Compile Include="InputExtensions.cs" />
-    <Compile Include="InputManager.cs" />
-    <Compile Include="IPointerDevice.cs" />
-    <Compile Include="Key.cs" />
-    <Compile Include="KeyboardDevice.cs" />
-    <Compile Include="KeyboardNavigation.cs" />
-    <Compile Include="KeyboardNavigationHandler.cs" />
-    <Compile Include="GotFocusEventArgs.cs" />
-    <Compile Include="Navigation\FocusExtensions.cs" />
-    <Compile Include="Navigation\DirectionalNavigation.cs" />
-    <Compile Include="Navigation\TabNavigation.cs" />
-    <Compile Include="PointerWheelEventArgs.cs" />
-    <Compile Include="Raw\RawMouseWheelEventArgs.cs" />
-    <Compile Include="Raw\RawSizeEventArgs.cs" />
-    <Compile Include="KeyboardNavigationMode.cs" />
-    <Compile Include="TextInputEventArgs.cs" />
-    <Compile Include="VectorEventArgs.cs" />
-    <Compile Include="KeyEventArgs.cs" />
-    <Compile Include="MouseDevice.cs" />
-    <Compile Include="PointerEventArgs.cs" />
-    <Compile Include="Raw\RawInputEventArgs.cs" />
-    <Compile Include="Raw\RawKeyEventArgs.cs" />
-    <Compile Include="Raw\RawMouseEventArgs.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 2
src/Avalonia.Input/IInputElement.cs

@@ -1,7 +1,5 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
-
-using System.Diagnostics.Contracts;
 using System;
 using System.Collections.Generic;
 using Avalonia.Interactivity;

+ 0 - 8
src/Avalonia.Input/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 12 - 69
src/Avalonia.Interactivity/Avalonia.Interactivity.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Interactivity</RootNamespace>
-    <AssemblyName>Avalonia.Interactivity</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -41,63 +26,21 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
+    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj" />
+    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="IInteractive.cs" />
-    <Compile Include="InteractiveExtensions.cs" />
-    <Compile Include="Interactive.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="RoutedEvent.cs" />
-    <Compile Include="RoutedEventArgs.cs" />
-    <Compile Include="EventSubscription.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 8
src/Avalonia.Interactivity/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 11 - 65
src/Avalonia.Layout/Avalonia.Layout.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{42472427-4774-4C81-8AFF-9F27B8E31721}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia</RootNamespace>
-    <AssemblyName>Avalonia.Layout</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -41,59 +26,20 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
+    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="ILayoutable.cs" />
-    <Compile Include="ILayoutManager.cs" />
-    <Compile Include="ILayoutRoot.cs" />
-    <Compile Include="Layoutable.cs" />
-    <Compile Include="LayoutHelper.cs" />
-    <Compile Include="LayoutManager.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 8
src/Avalonia.Layout/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 5 - 39
src/Avalonia.Logging.Serilog/Avalonia.Logging.Serilog.csproj

@@ -1,20 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{B61B66A3-B82D-4875-8001-89D3394FE0C9}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Logging.Serilog</RootNamespace>
-    <AssemblyName>Avalonia.Logging.Serilog</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -37,30 +24,9 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <Compile Include="SerilogLogger.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Serilog.1.5.14\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+MonoTouch10\Serilog.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
+    <PackageReference Include="Serilog" Version="2.4.0" />
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 4
src/Avalonia.Logging.Serilog/packages.config

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Serilog" version="1.5.14" targetFramework="portable45-net45+win8" />
-</packages>

+ 29 - 49
src/Avalonia.ReactiveUI/Avalonia.ReactiveUI.csproj

@@ -1,27 +1,15 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{6417B24E-49C2-4985-8DB2-3AB9D898EC91}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.ReactiveUI</RootNamespace>
-    <AssemblyName>Avalonia.ReactiveUI</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;MONO PORTABLE</DefineConstants>
+    <DefineConstants>TRACE;DEBUG;MONO PORTABLE;NETSTANDARD1_1</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
@@ -29,15 +17,19 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
     <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE;MONO PORTABLE</DefineConstants>
+    <DefineConstants>TRACE;MONO PORTABLE;RELEASE;NETSTANDARD1_1</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <ItemGroup>
+    <None Remove="Shims.cs" />
+  </ItemGroup>
   <ItemGroup>
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Registrations.cs" />
+    <Compile Include="Shims.cs" />
     <Compile Include="src\ReactiveUI\ExpressionMixins.cs" />
     <Compile Include="src\ReactiveUI\ExpressionRewriter.cs" />
     <Compile Include="src\ReactiveUI\Activation.cs" />
@@ -65,9 +57,7 @@
     <Compile Include="src\ReactiveUI\PropertyBinding.cs" />
     <Compile Include="src\ReactiveUI\ReactiveList.cs" />
     <Compile Include="src\ReactiveUI\ReactiveCollectionMixins.cs" />
-    <Compile Include="src\ReactiveUI\ReactiveCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
+    <Compile Include="src\ReactiveUI\ReactiveCommand.cs" />
     <Compile Include="src\ReactiveUI\ReactiveNotifyPropertyChangedMixin.cs" />
     <Compile Include="src\ReactiveUI\ReactiveObject.cs" />
     <Compile Include="src\ReactiveUI\RefcountDisposeWrapper.cs" />
@@ -86,36 +76,26 @@
     <Compile Include="src\ReactiveUI\WeakEventManager.cs" />
     <Compile Include="src\ReactiveUI\Legacy\ReactiveCommand.cs" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="Splat, Version=1.6.2.0, Culture=neutral, PublicKeyToken=null">
-      <HintPath>..\..\packages\Splat.1.6.2\lib\Portable-net45+win+wpa81+wp80\Splat.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.0\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.0\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
   </Target>
   <Target Name="AfterBuild">
   </Target>
-  -->
+  <ItemGroup>
+    <PackageReference Include="Splat" Version="2.0.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+  </ItemGroup>
+  <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" />
+  </ItemGroup>
 </Project>

+ 34 - 0
src/Avalonia.ReactiveUI/Shims.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace System.Runtime.Serialization
+{
+    class IgnoreDataMemberAttribute : Attribute
+    {
+    }
+
+    class DataMemberAttribute : Attribute
+    {
+    }
+    class OnDeserializedAttribute : Attribute
+    {
+    }
+
+    class DataContractAttribute : Attribute
+    {
+    }
+
+    class StreamingContext { }
+}
+
+namespace System.Diagnostics.Contracts
+{
+    static class Contract
+    {
+        public static void Requires(bool condition)
+        {
+
+        }
+    }
+}

+ 0 - 9
src/Avalonia.ReactiveUI/packages.config

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Splat" version="1.6.2" targetFramework="portable45-net45+win8+wp8+wpa81" userInstalled="true" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
-</packages>

+ 11 - 93
src/Avalonia.Styling/Avalonia.Styling.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia</RootNamespace>
-    <AssemblyName>Avalonia.Styling</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -44,84 +29,17 @@
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="Controls\NameScopeEventArgs.cs" />
-    <Compile Include="Controls\NameScopeExtensions.cs" />
-    <Compile Include="LogicalTree\ILogical.cs" />
-    <Compile Include="LogicalTree\LogicalExtensions.cs" />
-    <Compile Include="LogicalTree\LogicalTreeAttachmentEventArgs.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Styling\ActivatedSubject.cs" />
-    <Compile Include="Styling\ActivatedValue.cs" />
-    <Compile Include="Controls\INameScope.cs" />
-    <Compile Include="Styling\ITemplate.cs" />
-    <Compile Include="Controls\NameScope.cs" />
-    <Compile Include="Styling\TemplateSelector.cs" />
-    <Compile Include="Styling\DescendentSelector.cs" />
-    <Compile Include="Styling\ChildSelector.cs" />
-    <Compile Include="Styling\IGlobalStyles.cs" />
-    <Compile Include="Styling\ISetter.cs" />
-    <Compile Include="Styling\IStyle.cs" />
-    <Compile Include="Styling\IStyleable.cs" />
-    <Compile Include="Styling\IStyleRoot.cs" />
-    <Compile Include="Styling\IStyleHost.cs" />
-    <Compile Include="Styling\IStyler.cs" />
-    <Compile Include="Styling\ITemplatedControl.cs" />
-    <Compile Include="Styling\SelectorMatch.cs" />
-    <Compile Include="Styling\Selector.cs" />
-    <Compile Include="Styling\Selectors.cs" />
-    <Compile Include="Styling\Setter.cs" />
-    <Compile Include="Styling\Style.cs" />
-    <Compile Include="Styling\StyleActivator.cs" />
-    <Compile Include="Styling\ActivatedObservable.cs" />
-    <Compile Include="Styling\StyleExtensions.cs" />
-    <Compile Include="Styling\Styler.cs" />
-    <Compile Include="Styling\Styles.cs" />
-    <Compile Include="Styling\PropertyEqualsSelector.cs" />
-    <Compile Include="Styling\TypeNameAndClassSelector.cs" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
+    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
+    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="app.config" />
-    <None Include="packages.config" />
-    <None Include="Styling\packages.config" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{d211e587-d8bc-45b9-95a4-f297c8fa5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 8
src/Avalonia.Styling/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 0 - 1
src/Avalonia.Themes.Default/Accents/BaseLight.xaml

@@ -1,6 +1,5 @@
 <Style xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-       xmlns:mut="https://github.com/avaloniaui/mutable"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
   <Style.Resources>
     <SolidColorBrush x:Key="ThemeBackgroundBrush">#FFFFFFFF</SolidColorBrush>

+ 20 - 190
src/Avalonia.Themes.Default/Avalonia.Themes.Default.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{3E10A5FA-E8DA-48B1-AD44-6A5B6CB7750F}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Themes.Default</RootNamespace>
-    <AssemblyName>Avalonia.Themes.Default</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -39,187 +24,32 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj">
-      <Project>{3e53a01a-b331-47f3-b828-4a5717e77a24}</Project>
-      <Name>Avalonia.Markup.Xaml</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
+    <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.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\Avalonia.Styling\Avalonia.Styling.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="DefaultTheme.xaml.cs">
-      <DependentUpon>DefaultTheme.xaml</DependentUpon>
+    <Compile Update="**\*.xaml.cs">
+      <DependentUpon>%(Filename)</DependentUpon>
     </Compile>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Accents\BaseLight.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Button.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Carousel.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="CheckBox.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ContentControl.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="DropDown.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="FocusAdorner.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="GridSplitter.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ItemsControl.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ListBox.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ListBoxItem.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Menu.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="MenuItem.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ProgressBar.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ToolTip.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Expander.xaml" />
-    <EmbeddedResource Include="DropDownItem.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ContextMenu.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="PopupRoot.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="RadioButton.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ScrollBar.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ScrollViewer.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="TabControl.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="TabStripItem.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="TabStrip.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="TextBox.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ToggleButton.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="TreeView.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="TreeViewItem.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Window.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="DefaultTheme.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Separator.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Slider.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="LayoutTransformControl.xaml">
+    <EmbeddedResource Include="**\*.xaml">
       <SubType>Designer</SubType>
     </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="EmbeddableControlRoot.xaml">
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 8
src/Avalonia.Themes.Default/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 10 - 166
src/Avalonia.Visuals/Avalonia.Visuals.csproj

@@ -1,22 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{EB582467-6ABB-43A1-B052-E981BA910E3A}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia</RootNamespace>
-    <AssemblyName>Avalonia.Visuals</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -41,160 +26,19 @@
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
   </PropertyGroup>
   <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
+    <ProjectReference Include="..\Avalonia.Animation\Avalonia.Animation.csproj" />
+    <ProjectReference Include="..\Avalonia.Base\Avalonia.Base.csproj" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="Animation\PageSlide.cs" />
-    <Compile Include="Animation\CrossFade.cs" />
-    <Compile Include="Animation\IPageTransition.cs" />
-    <Compile Include="INamed.cs" />
-    <Compile Include="Matrix.cs" />
-    <Compile Include="Media\AlignmentY.cs" />
-    <Compile Include="Media\AlignmentX.cs" />
-    <Compile Include="Media\ArcSegment.cs" />
-    <Compile Include="Media\BezierSegment .cs" />
-    <Compile Include="Media\Brush.cs" />
-    <Compile Include="Media\Brushes.cs" />
-    <Compile Include="Media\BrushMappingMode.cs" />
-    <Compile Include="Media\Color.cs" />
-    <Compile Include="Media\Colors.cs" />
-    <Compile Include="Media\IGradientBrush.cs" />
-    <Compile Include="Media\ILinearGradientBrush.cs" />
-    <Compile Include="Media\Imaging\IImageBrush.cs" />
-    <Compile Include="Media\Imaging\WritableBitmap.cs" />
-    <Compile Include="Media\IRadialGradientBrush.cs" />
-    <Compile Include="Media\ITileBrush.cs" />
-    <Compile Include="Media\IVisualBrush.cs" />
-    <Compile Include="Media\TextWrapping.cs" />
-    <Compile Include="Media\TransformGroup.cs" />
-    <Compile Include="Media\DashStyle.cs" />
-    <Compile Include="Media\DrawingContext.cs" />
-    <Compile Include="Media\FillRule.cs" />
-    <Compile Include="Media\GradientBrush.cs" />
-    <Compile Include="Media\GradientSpreadMethod.cs" />
-    <Compile Include="Media\GradientStop.cs" />
-    <Compile Include="Media\IBrush.cs" />
-    <Compile Include="Media\ISolidColorBrush.cs" />
-    <Compile Include="Media\LineGeometry.cs" />
-    <Compile Include="Media\LineSegment.cs" />
-    <Compile Include="Media\Mutable\SolidColorBrush.cs" />
-    <Compile Include="Media\PathGeometryCollections.cs" />
-    <Compile Include="Media\PathFigure.cs" />
-    <Compile Include="Media\PathGeometry.cs" />
-    <Compile Include="Media\PathSegment.cs" />
-    <Compile Include="Media\PenLineJoin.cs" />
-    <Compile Include="Media\PolylineGeometry.cs" />
-    <Compile Include="Media\QuadraticBezierSegment .cs" />
-    <Compile Include="Media\RadialGradientBrush.cs" />
-    <Compile Include="Media\LinearGradientBrush.cs" />
-    <Compile Include="Media\MediaExtensions.cs" />
-    <Compile Include="Media\PenLineCap.cs" />
-    <Compile Include="Media\ScaleTransform.cs" />
-    <Compile Include="Media\TextAlignment.cs" />
-    <Compile Include="Media\FontWeight.cs" />
-    <Compile Include="Media\FontStyle.cs" />
-    <Compile Include="Media\FormattedTextLine.cs" />
-    <Compile Include="Media\FormattedText.cs" />
-    <Compile Include="Media\Geometry.cs" />
-    <Compile Include="Media\IDrawingContextImpl.cs" />
-    <Compile Include="Platform\ExportRenderingSubsystemAttribute.cs" />
-    <Compile Include="Platform\ILockedFramebuffer.cs" />
-    <Compile Include="Platform\IModuleEnvironmentChecker.cs" />
-    <Compile Include="Platform\IWritableBitmapImpl.cs" />
-    <Compile Include="Platform\PixelFormat.cs" />
-    <Compile Include="Rendering\IRenderer.cs" />
-    <Compile Include="Rendering\IRendererFactory.cs" />
-    <Compile Include="Rendering\IRenderLoop.cs" />
-    <Compile Include="Rendering\Renderer.cs" />
-    <Compile Include="Rendering\RendererMixin.cs" />
-    <Compile Include="Rendering\DefaultRenderLoop.cs" />
-    <Compile Include="RenderTargetCorruptedException.cs" />
-    <Compile Include="VisualTree\IVisual.cs" />
-    <Compile Include="Media\Imaging\Bitmap.cs" />
-    <Compile Include="Media\Imaging\IBitmap.cs" />
-    <Compile Include="Media\Imaging\RenderTargetBitmap.cs" />
-    <Compile Include="Media\TranslateTransform.cs" />
-    <Compile Include="Media\PathMarkupParser.cs" />
-    <Compile Include="Media\Pen.cs" />
-    <Compile Include="Media\EllipseGeometry.cs" />
-    <Compile Include="Media\RectangleGeometry.cs" />
-    <Compile Include="Media\MatrixTransform.cs" />
-    <Compile Include="Media\RotateTransform.cs" />
-    <Compile Include="Media\SolidColorBrush.cs" />
-    <Compile Include="Media\StreamGeometry.cs" />
-    <Compile Include="Media\StreamGeometryContext.cs" />
-    <Compile Include="Media\Stretch.cs" />
-    <Compile Include="Media\SweepDirection.cs" />
-    <Compile Include="Media\TextHitTestResult.cs" />
-    <Compile Include="Media\Transform.cs" />
-    <Compile Include="Media\TileBrush.cs" />
-    <Compile Include="Media\ImageBrush.cs" />
-    <Compile Include="Media\VisualBrush.cs" />
-    <Compile Include="Platform\IPlatformSettings.cs" />
-    <Compile Include="RelativePoint.cs" />
-    <Compile Include="Platform\IFormattedTextImpl.cs" />
-    <Compile Include="Platform\IBitmapImpl.cs" />
-    <Compile Include="Platform\IGeometryImpl.cs" />
-    <Compile Include="Platform\IPlatformRenderInterface.cs" />
-    <Compile Include="Platform\IRenderTarget.cs" />
-    <Compile Include="Platform\IRenderTargetBitmapImpl.cs" />
-    <Compile Include="Platform\IStreamGeometryContextImpl.cs" />
-    <Compile Include="Platform\IStreamGeometryImpl.cs" />
-    <Compile Include="Point.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="RelativeRect.cs" />
-    <Compile Include="Rect.cs" />
-    <Compile Include="Rendering\IRenderRoot.cs" />
-    <Compile Include="Size.cs" />
-    <Compile Include="Thickness.cs" />
-    <Compile Include="Vector.cs" />
-    <Compile Include="VisualExtensions.cs" />
-    <Compile Include="Visual.cs" />
-    <Compile Include="VisualTreeAttachmentEventArgs.cs" />
-    <Compile Include="VisualTree\IHostedVisualTreeRoot.cs" />
-    <Compile Include="VisualTree\IVisualTreeHost.cs" />
-    <Compile Include="VisualTree\TransformedBounds.cs" />
-    <Compile Include="VisualTree\BoundsTracker.cs" />
-    <Compile Include="VisualTree\VisualExtensions.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 2 - 1
src/Avalonia.Visuals/Media/Brush.cs

@@ -46,7 +46,8 @@ namespace Avalonia.Media
 
                 if (member != null)
                 {
-                    return (IBrush)member.GetValue(null);
+                    var brush = (ISolidColorBrush)member.GetValue(null);
+                    return new SolidColorBrush(brush.Color, brush.Opacity);
                 }
                 else
                 {

+ 284 - 282
src/Avalonia.Visuals/Media/Brushes.cs

@@ -1,6 +1,8 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
+using Avalonia.Media.Immutable;
+
 namespace Avalonia.Media
 {
     /// <summary>
@@ -13,852 +15,852 @@ namespace Avalonia.Media
         /// </summary>
         static Brushes()
         {
-            AliceBlue = new SolidColorBrush(Colors.AliceBlue);
-            AntiqueWhite = new SolidColorBrush(Colors.AntiqueWhite);
-            Aqua = new SolidColorBrush(Colors.Aqua);
-            Aquamarine = new SolidColorBrush(Colors.Aquamarine);
-            Azure = new SolidColorBrush(Colors.Azure);
-            Beige = new SolidColorBrush(Colors.Beige);
-            Bisque = new SolidColorBrush(Colors.Bisque);
-            Black = new SolidColorBrush(Colors.Black);
-            BlanchedAlmond = new SolidColorBrush(Colors.BlanchedAlmond);
-            Blue = new SolidColorBrush(Colors.Blue);
-            BlueViolet = new SolidColorBrush(Colors.BlueViolet);
-            Brown = new SolidColorBrush(Colors.Brown);
-            BurlyWood = new SolidColorBrush(Colors.BurlyWood);
-            CadetBlue = new SolidColorBrush(Colors.CadetBlue);
-            Chartreuse = new SolidColorBrush(Colors.Chartreuse);
-            Chocolate = new SolidColorBrush(Colors.Chocolate);
-            Coral = new SolidColorBrush(Colors.Coral);
-            CornflowerBlue = new SolidColorBrush(Colors.CornflowerBlue);
-            Cornsilk = new SolidColorBrush(Colors.Cornsilk);
-            Crimson = new SolidColorBrush(Colors.Crimson);
-            Cyan = new SolidColorBrush(Colors.Cyan);
-            DarkBlue = new SolidColorBrush(Colors.DarkBlue);
-            DarkCyan = new SolidColorBrush(Colors.DarkCyan);
-            DarkGoldenrod = new SolidColorBrush(Colors.DarkGoldenrod);
-            DarkGray = new SolidColorBrush(Colors.DarkGray);
-            DarkGreen = new SolidColorBrush(Colors.DarkGreen);
-            DarkKhaki = new SolidColorBrush(Colors.DarkKhaki);
-            DarkMagenta = new SolidColorBrush(Colors.DarkMagenta);
-            DarkOliveGreen = new SolidColorBrush(Colors.DarkOliveGreen);
-            DarkOrange = new SolidColorBrush(Colors.DarkOrange);
-            DarkOrchid = new SolidColorBrush(Colors.DarkOrchid);
-            DarkRed = new SolidColorBrush(Colors.DarkRed);
-            DarkSalmon = new SolidColorBrush(Colors.DarkSalmon);
-            DarkSeaGreen = new SolidColorBrush(Colors.DarkSeaGreen);
-            DarkSlateBlue = new SolidColorBrush(Colors.DarkSlateBlue);
-            DarkSlateGray = new SolidColorBrush(Colors.DarkSlateGray);
-            DarkTurquoise = new SolidColorBrush(Colors.DarkTurquoise);
-            DarkViolet = new SolidColorBrush(Colors.DarkViolet);
-            DeepPink = new SolidColorBrush(Colors.DeepPink);
-            DeepSkyBlue = new SolidColorBrush(Colors.DeepSkyBlue);
-            DimGray = new SolidColorBrush(Colors.DimGray);
-            DodgerBlue = new SolidColorBrush(Colors.DodgerBlue);
-            Firebrick = new SolidColorBrush(Colors.Firebrick);
-            FloralWhite = new SolidColorBrush(Colors.FloralWhite);
-            ForestGreen = new SolidColorBrush(Colors.ForestGreen);
-            Fuchsia = new SolidColorBrush(Colors.Fuchsia);
-            Gainsboro = new SolidColorBrush(Colors.Gainsboro);
-            GhostWhite = new SolidColorBrush(Colors.GhostWhite);
-            Gold = new SolidColorBrush(Colors.Gold);
-            Goldenrod = new SolidColorBrush(Colors.Goldenrod);
-            Gray = new SolidColorBrush(Colors.Gray);
-            Green = new SolidColorBrush(Colors.Green);
-            GreenYellow = new SolidColorBrush(Colors.GreenYellow);
-            Honeydew = new SolidColorBrush(Colors.Honeydew);
-            HotPink = new SolidColorBrush(Colors.HotPink);
-            IndianRed = new SolidColorBrush(Colors.IndianRed);
-            Indigo = new SolidColorBrush(Colors.Indigo);
-            Ivory = new SolidColorBrush(Colors.Ivory);
-            Khaki = new SolidColorBrush(Colors.Khaki);
-            Lavender = new SolidColorBrush(Colors.Lavender);
-            LavenderBlush = new SolidColorBrush(Colors.LavenderBlush);
-            LawnGreen = new SolidColorBrush(Colors.LawnGreen);
-            LemonChiffon = new SolidColorBrush(Colors.LemonChiffon);
-            LightBlue = new SolidColorBrush(Colors.LightBlue);
-            LightCoral = new SolidColorBrush(Colors.LightCoral);
-            LightCyan = new SolidColorBrush(Colors.LightCyan);
-            LightGoldenrodYellow = new SolidColorBrush(Colors.LightGoldenrodYellow);
-            LightGray = new SolidColorBrush(Colors.LightGray);
-            LightGreen = new SolidColorBrush(Colors.LightGreen);
-            LightPink = new SolidColorBrush(Colors.LightPink);
-            LightSalmon = new SolidColorBrush(Colors.LightSalmon);
-            LightSeaGreen = new SolidColorBrush(Colors.LightSeaGreen);
-            LightSkyBlue = new SolidColorBrush(Colors.LightSkyBlue);
-            LightSlateGray = new SolidColorBrush(Colors.LightSlateGray);
-            LightSteelBlue = new SolidColorBrush(Colors.LightSteelBlue);
-            LightYellow = new SolidColorBrush(Colors.LightYellow);
-            Lime = new SolidColorBrush(Colors.Lime);
-            LimeGreen = new SolidColorBrush(Colors.LimeGreen);
-            Linen = new SolidColorBrush(Colors.Linen);
-            Magenta = new SolidColorBrush(Colors.Magenta);
-            Maroon = new SolidColorBrush(Colors.Maroon);
-            MediumAquamarine = new SolidColorBrush(Colors.MediumAquamarine);
-            MediumBlue = new SolidColorBrush(Colors.MediumBlue);
-            MediumOrchid = new SolidColorBrush(Colors.MediumOrchid);
-            MediumPurple = new SolidColorBrush(Colors.MediumPurple);
-            MediumSeaGreen = new SolidColorBrush(Colors.MediumSeaGreen);
-            MediumSlateBlue = new SolidColorBrush(Colors.MediumSlateBlue);
-            MediumSpringGreen = new SolidColorBrush(Colors.MediumSpringGreen);
-            MediumTurquoise = new SolidColorBrush(Colors.MediumTurquoise);
-            MediumVioletRed = new SolidColorBrush(Colors.MediumVioletRed);
-            MidnightBlue = new SolidColorBrush(Colors.MidnightBlue);
-            MintCream = new SolidColorBrush(Colors.MintCream);
-            MistyRose = new SolidColorBrush(Colors.MistyRose);
-            Moccasin = new SolidColorBrush(Colors.Moccasin);
-            NavajoWhite = new SolidColorBrush(Colors.NavajoWhite);
-            Navy = new SolidColorBrush(Colors.Navy);
-            OldLace = new SolidColorBrush(Colors.OldLace);
-            Olive = new SolidColorBrush(Colors.Olive);
-            OliveDrab = new SolidColorBrush(Colors.OliveDrab);
-            Orange = new SolidColorBrush(Colors.Orange);
-            OrangeRed = new SolidColorBrush(Colors.OrangeRed);
-            Orchid = new SolidColorBrush(Colors.Orchid);
-            PaleGoldenrod = new SolidColorBrush(Colors.PaleGoldenrod);
-            PaleGreen = new SolidColorBrush(Colors.PaleGreen);
-            PaleTurquoise = new SolidColorBrush(Colors.PaleTurquoise);
-            PaleVioletRed = new SolidColorBrush(Colors.PaleVioletRed);
-            PapayaWhip = new SolidColorBrush(Colors.PapayaWhip);
-            PeachPuff = new SolidColorBrush(Colors.PeachPuff);
-            Peru = new SolidColorBrush(Colors.Peru);
-            Pink = new SolidColorBrush(Colors.Pink);
-            Plum = new SolidColorBrush(Colors.Plum);
-            PowderBlue = new SolidColorBrush(Colors.PowderBlue);
-            Purple = new SolidColorBrush(Colors.Purple);
-            Red = new SolidColorBrush(Colors.Red);
-            RosyBrown = new SolidColorBrush(Colors.RosyBrown);
-            RoyalBlue = new SolidColorBrush(Colors.RoyalBlue);
-            SaddleBrown = new SolidColorBrush(Colors.SaddleBrown);
-            Salmon = new SolidColorBrush(Colors.Salmon);
-            SandyBrown = new SolidColorBrush(Colors.SandyBrown);
-            SeaGreen = new SolidColorBrush(Colors.SeaGreen);
-            SeaShell = new SolidColorBrush(Colors.SeaShell);
-            Sienna = new SolidColorBrush(Colors.Sienna);
-            Silver = new SolidColorBrush(Colors.Silver);
-            SkyBlue = new SolidColorBrush(Colors.SkyBlue);
-            SlateBlue = new SolidColorBrush(Colors.SlateBlue);
-            SlateGray = new SolidColorBrush(Colors.SlateGray);
-            Snow = new SolidColorBrush(Colors.Snow);
-            SpringGreen = new SolidColorBrush(Colors.SpringGreen);
-            SteelBlue = new SolidColorBrush(Colors.SteelBlue);
-            Tan = new SolidColorBrush(Colors.Tan);
-            Teal = new SolidColorBrush(Colors.Teal);
-            Thistle = new SolidColorBrush(Colors.Thistle);
-            Tomato = new SolidColorBrush(Colors.Tomato);
-            Transparent = new SolidColorBrush(Colors.Transparent);
-            Turquoise = new SolidColorBrush(Colors.Turquoise);
-            Violet = new SolidColorBrush(Colors.Violet);
-            Wheat = new SolidColorBrush(Colors.Wheat);
-            White = new SolidColorBrush(Colors.White);
-            WhiteSmoke = new SolidColorBrush(Colors.WhiteSmoke);
-            Yellow = new SolidColorBrush(Colors.Yellow);
-            YellowGreen = new SolidColorBrush(Colors.YellowGreen);
+            AliceBlue = new ImmutableSolidColorBrush(Colors.AliceBlue);
+            AntiqueWhite = new ImmutableSolidColorBrush(Colors.AntiqueWhite);
+            Aqua = new ImmutableSolidColorBrush(Colors.Aqua);
+            Aquamarine = new ImmutableSolidColorBrush(Colors.Aquamarine);
+            Azure = new ImmutableSolidColorBrush(Colors.Azure);
+            Beige = new ImmutableSolidColorBrush(Colors.Beige);
+            Bisque = new ImmutableSolidColorBrush(Colors.Bisque);
+            Black = new ImmutableSolidColorBrush(Colors.Black);
+            BlanchedAlmond = new ImmutableSolidColorBrush(Colors.BlanchedAlmond);
+            Blue = new ImmutableSolidColorBrush(Colors.Blue);
+            BlueViolet = new ImmutableSolidColorBrush(Colors.BlueViolet);
+            Brown = new ImmutableSolidColorBrush(Colors.Brown);
+            BurlyWood = new ImmutableSolidColorBrush(Colors.BurlyWood);
+            CadetBlue = new ImmutableSolidColorBrush(Colors.CadetBlue);
+            Chartreuse = new ImmutableSolidColorBrush(Colors.Chartreuse);
+            Chocolate = new ImmutableSolidColorBrush(Colors.Chocolate);
+            Coral = new ImmutableSolidColorBrush(Colors.Coral);
+            CornflowerBlue = new ImmutableSolidColorBrush(Colors.CornflowerBlue);
+            Cornsilk = new ImmutableSolidColorBrush(Colors.Cornsilk);
+            Crimson = new ImmutableSolidColorBrush(Colors.Crimson);
+            Cyan = new ImmutableSolidColorBrush(Colors.Cyan);
+            DarkBlue = new ImmutableSolidColorBrush(Colors.DarkBlue);
+            DarkCyan = new ImmutableSolidColorBrush(Colors.DarkCyan);
+            DarkGoldenrod = new ImmutableSolidColorBrush(Colors.DarkGoldenrod);
+            DarkGray = new ImmutableSolidColorBrush(Colors.DarkGray);
+            DarkGreen = new ImmutableSolidColorBrush(Colors.DarkGreen);
+            DarkKhaki = new ImmutableSolidColorBrush(Colors.DarkKhaki);
+            DarkMagenta = new ImmutableSolidColorBrush(Colors.DarkMagenta);
+            DarkOliveGreen = new ImmutableSolidColorBrush(Colors.DarkOliveGreen);
+            DarkOrange = new ImmutableSolidColorBrush(Colors.DarkOrange);
+            DarkOrchid = new ImmutableSolidColorBrush(Colors.DarkOrchid);
+            DarkRed = new ImmutableSolidColorBrush(Colors.DarkRed);
+            DarkSalmon = new ImmutableSolidColorBrush(Colors.DarkSalmon);
+            DarkSeaGreen = new ImmutableSolidColorBrush(Colors.DarkSeaGreen);
+            DarkSlateBlue = new ImmutableSolidColorBrush(Colors.DarkSlateBlue);
+            DarkSlateGray = new ImmutableSolidColorBrush(Colors.DarkSlateGray);
+            DarkTurquoise = new ImmutableSolidColorBrush(Colors.DarkTurquoise);
+            DarkViolet = new ImmutableSolidColorBrush(Colors.DarkViolet);
+            DeepPink = new ImmutableSolidColorBrush(Colors.DeepPink);
+            DeepSkyBlue = new ImmutableSolidColorBrush(Colors.DeepSkyBlue);
+            DimGray = new ImmutableSolidColorBrush(Colors.DimGray);
+            DodgerBlue = new ImmutableSolidColorBrush(Colors.DodgerBlue);
+            Firebrick = new ImmutableSolidColorBrush(Colors.Firebrick);
+            FloralWhite = new ImmutableSolidColorBrush(Colors.FloralWhite);
+            ForestGreen = new ImmutableSolidColorBrush(Colors.ForestGreen);
+            Fuchsia = new ImmutableSolidColorBrush(Colors.Fuchsia);
+            Gainsboro = new ImmutableSolidColorBrush(Colors.Gainsboro);
+            GhostWhite = new ImmutableSolidColorBrush(Colors.GhostWhite);
+            Gold = new ImmutableSolidColorBrush(Colors.Gold);
+            Goldenrod = new ImmutableSolidColorBrush(Colors.Goldenrod);
+            Gray = new ImmutableSolidColorBrush(Colors.Gray);
+            Green = new ImmutableSolidColorBrush(Colors.Green);
+            GreenYellow = new ImmutableSolidColorBrush(Colors.GreenYellow);
+            Honeydew = new ImmutableSolidColorBrush(Colors.Honeydew);
+            HotPink = new ImmutableSolidColorBrush(Colors.HotPink);
+            IndianRed = new ImmutableSolidColorBrush(Colors.IndianRed);
+            Indigo = new ImmutableSolidColorBrush(Colors.Indigo);
+            Ivory = new ImmutableSolidColorBrush(Colors.Ivory);
+            Khaki = new ImmutableSolidColorBrush(Colors.Khaki);
+            Lavender = new ImmutableSolidColorBrush(Colors.Lavender);
+            LavenderBlush = new ImmutableSolidColorBrush(Colors.LavenderBlush);
+            LawnGreen = new ImmutableSolidColorBrush(Colors.LawnGreen);
+            LemonChiffon = new ImmutableSolidColorBrush(Colors.LemonChiffon);
+            LightBlue = new ImmutableSolidColorBrush(Colors.LightBlue);
+            LightCoral = new ImmutableSolidColorBrush(Colors.LightCoral);
+            LightCyan = new ImmutableSolidColorBrush(Colors.LightCyan);
+            LightGoldenrodYellow = new ImmutableSolidColorBrush(Colors.LightGoldenrodYellow);
+            LightGray = new ImmutableSolidColorBrush(Colors.LightGray);
+            LightGreen = new ImmutableSolidColorBrush(Colors.LightGreen);
+            LightPink = new ImmutableSolidColorBrush(Colors.LightPink);
+            LightSalmon = new ImmutableSolidColorBrush(Colors.LightSalmon);
+            LightSeaGreen = new ImmutableSolidColorBrush(Colors.LightSeaGreen);
+            LightSkyBlue = new ImmutableSolidColorBrush(Colors.LightSkyBlue);
+            LightSlateGray = new ImmutableSolidColorBrush(Colors.LightSlateGray);
+            LightSteelBlue = new ImmutableSolidColorBrush(Colors.LightSteelBlue);
+            LightYellow = new ImmutableSolidColorBrush(Colors.LightYellow);
+            Lime = new ImmutableSolidColorBrush(Colors.Lime);
+            LimeGreen = new ImmutableSolidColorBrush(Colors.LimeGreen);
+            Linen = new ImmutableSolidColorBrush(Colors.Linen);
+            Magenta = new ImmutableSolidColorBrush(Colors.Magenta);
+            Maroon = new ImmutableSolidColorBrush(Colors.Maroon);
+            MediumAquamarine = new ImmutableSolidColorBrush(Colors.MediumAquamarine);
+            MediumBlue = new ImmutableSolidColorBrush(Colors.MediumBlue);
+            MediumOrchid = new ImmutableSolidColorBrush(Colors.MediumOrchid);
+            MediumPurple = new ImmutableSolidColorBrush(Colors.MediumPurple);
+            MediumSeaGreen = new ImmutableSolidColorBrush(Colors.MediumSeaGreen);
+            MediumSlateBlue = new ImmutableSolidColorBrush(Colors.MediumSlateBlue);
+            MediumSpringGreen = new ImmutableSolidColorBrush(Colors.MediumSpringGreen);
+            MediumTurquoise = new ImmutableSolidColorBrush(Colors.MediumTurquoise);
+            MediumVioletRed = new ImmutableSolidColorBrush(Colors.MediumVioletRed);
+            MidnightBlue = new ImmutableSolidColorBrush(Colors.MidnightBlue);
+            MintCream = new ImmutableSolidColorBrush(Colors.MintCream);
+            MistyRose = new ImmutableSolidColorBrush(Colors.MistyRose);
+            Moccasin = new ImmutableSolidColorBrush(Colors.Moccasin);
+            NavajoWhite = new ImmutableSolidColorBrush(Colors.NavajoWhite);
+            Navy = new ImmutableSolidColorBrush(Colors.Navy);
+            OldLace = new ImmutableSolidColorBrush(Colors.OldLace);
+            Olive = new ImmutableSolidColorBrush(Colors.Olive);
+            OliveDrab = new ImmutableSolidColorBrush(Colors.OliveDrab);
+            Orange = new ImmutableSolidColorBrush(Colors.Orange);
+            OrangeRed = new ImmutableSolidColorBrush(Colors.OrangeRed);
+            Orchid = new ImmutableSolidColorBrush(Colors.Orchid);
+            PaleGoldenrod = new ImmutableSolidColorBrush(Colors.PaleGoldenrod);
+            PaleGreen = new ImmutableSolidColorBrush(Colors.PaleGreen);
+            PaleTurquoise = new ImmutableSolidColorBrush(Colors.PaleTurquoise);
+            PaleVioletRed = new ImmutableSolidColorBrush(Colors.PaleVioletRed);
+            PapayaWhip = new ImmutableSolidColorBrush(Colors.PapayaWhip);
+            PeachPuff = new ImmutableSolidColorBrush(Colors.PeachPuff);
+            Peru = new ImmutableSolidColorBrush(Colors.Peru);
+            Pink = new ImmutableSolidColorBrush(Colors.Pink);
+            Plum = new ImmutableSolidColorBrush(Colors.Plum);
+            PowderBlue = new ImmutableSolidColorBrush(Colors.PowderBlue);
+            Purple = new ImmutableSolidColorBrush(Colors.Purple);
+            Red = new ImmutableSolidColorBrush(Colors.Red);
+            RosyBrown = new ImmutableSolidColorBrush(Colors.RosyBrown);
+            RoyalBlue = new ImmutableSolidColorBrush(Colors.RoyalBlue);
+            SaddleBrown = new ImmutableSolidColorBrush(Colors.SaddleBrown);
+            Salmon = new ImmutableSolidColorBrush(Colors.Salmon);
+            SandyBrown = new ImmutableSolidColorBrush(Colors.SandyBrown);
+            SeaGreen = new ImmutableSolidColorBrush(Colors.SeaGreen);
+            SeaShell = new ImmutableSolidColorBrush(Colors.SeaShell);
+            Sienna = new ImmutableSolidColorBrush(Colors.Sienna);
+            Silver = new ImmutableSolidColorBrush(Colors.Silver);
+            SkyBlue = new ImmutableSolidColorBrush(Colors.SkyBlue);
+            SlateBlue = new ImmutableSolidColorBrush(Colors.SlateBlue);
+            SlateGray = new ImmutableSolidColorBrush(Colors.SlateGray);
+            Snow = new ImmutableSolidColorBrush(Colors.Snow);
+            SpringGreen = new ImmutableSolidColorBrush(Colors.SpringGreen);
+            SteelBlue = new ImmutableSolidColorBrush(Colors.SteelBlue);
+            Tan = new ImmutableSolidColorBrush(Colors.Tan);
+            Teal = new ImmutableSolidColorBrush(Colors.Teal);
+            Thistle = new ImmutableSolidColorBrush(Colors.Thistle);
+            Tomato = new ImmutableSolidColorBrush(Colors.Tomato);
+            Transparent = new ImmutableSolidColorBrush(Colors.Transparent);
+            Turquoise = new ImmutableSolidColorBrush(Colors.Turquoise);
+            Violet = new ImmutableSolidColorBrush(Colors.Violet);
+            Wheat = new ImmutableSolidColorBrush(Colors.Wheat);
+            White = new ImmutableSolidColorBrush(Colors.White);
+            WhiteSmoke = new ImmutableSolidColorBrush(Colors.WhiteSmoke);
+            Yellow = new ImmutableSolidColorBrush(Colors.Yellow);
+            YellowGreen = new ImmutableSolidColorBrush(Colors.YellowGreen);
         }
 
         /// <summary>
         /// Gets an <see cref="Colors.AliceBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush AliceBlue { get; private set; }
+        public static ISolidColorBrush AliceBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.AntiqueWhite"/> colored brush.
         /// </summary>
-        public static SolidColorBrush AntiqueWhite { get; private set; }
+        public static ISolidColorBrush AntiqueWhite { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.AliceBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Aqua { get; private set; }
+        public static ISolidColorBrush Aqua { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Aquamarine"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Aquamarine { get; private set; }
+        public static ISolidColorBrush Aquamarine { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Azure"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Azure { get; private set; }
+        public static ISolidColorBrush Azure { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Beige"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Beige { get; private set; }
+        public static ISolidColorBrush Beige { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Bisque"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Bisque { get; private set; }
+        public static ISolidColorBrush Bisque { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Black"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Black { get; private set; }
+        public static ISolidColorBrush Black { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.BlanchedAlmond"/> colored brush.
         /// </summary>
-        public static SolidColorBrush BlanchedAlmond { get; private set; }
+        public static ISolidColorBrush BlanchedAlmond { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Blue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Blue { get; private set; }
+        public static ISolidColorBrush Blue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.BlueViolet"/> colored brush.
         /// </summary>
-        public static SolidColorBrush BlueViolet { get; private set; }
+        public static ISolidColorBrush BlueViolet { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Brown"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Brown { get; private set; }
+        public static ISolidColorBrush Brown { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.BurlyWood"/> colored brush.
         /// </summary>
-        public static SolidColorBrush BurlyWood { get; private set; }
+        public static ISolidColorBrush BurlyWood { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.CadetBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush CadetBlue { get; private set; }
+        public static ISolidColorBrush CadetBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Chartreuse"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Chartreuse { get; private set; }
+        public static ISolidColorBrush Chartreuse { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Chocolate"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Chocolate { get; private set; }
+        public static ISolidColorBrush Chocolate { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Coral"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Coral { get; private set; }
+        public static ISolidColorBrush Coral { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.CornflowerBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush CornflowerBlue { get; private set; }
+        public static ISolidColorBrush CornflowerBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Cornsilk"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Cornsilk { get; private set; }
+        public static ISolidColorBrush Cornsilk { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Crimson"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Crimson { get; private set; }
+        public static ISolidColorBrush Crimson { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Cyan"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Cyan { get; private set; }
+        public static ISolidColorBrush Cyan { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkBlue { get; private set; }
+        public static ISolidColorBrush DarkBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkCyan"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkCyan { get; private set; }
+        public static ISolidColorBrush DarkCyan { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkGoldenrod"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkGoldenrod { get; private set; }
+        public static ISolidColorBrush DarkGoldenrod { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkGray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkGray { get; private set; }
+        public static ISolidColorBrush DarkGray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkGreen { get; private set; }
+        public static ISolidColorBrush DarkGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkKhaki"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkKhaki { get; private set; }
+        public static ISolidColorBrush DarkKhaki { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkMagenta"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkMagenta { get; private set; }
+        public static ISolidColorBrush DarkMagenta { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkOliveGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkOliveGreen { get; private set; }
+        public static ISolidColorBrush DarkOliveGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkOrange"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkOrange { get; private set; }
+        public static ISolidColorBrush DarkOrange { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkOrchid"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkOrchid { get; private set; }
+        public static ISolidColorBrush DarkOrchid { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkRed"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkRed { get; private set; }
+        public static ISolidColorBrush DarkRed { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkSalmon"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkSalmon { get; private set; }
+        public static ISolidColorBrush DarkSalmon { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkSeaGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkSeaGreen { get; private set; }
+        public static ISolidColorBrush DarkSeaGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkSlateBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkSlateBlue { get; private set; }
+        public static ISolidColorBrush DarkSlateBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkSlateGray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkSlateGray { get; private set; }
+        public static ISolidColorBrush DarkSlateGray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkTurquoise"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkTurquoise { get; private set; }
+        public static ISolidColorBrush DarkTurquoise { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DarkViolet"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DarkViolet { get; private set; }
+        public static ISolidColorBrush DarkViolet { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DeepPink"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DeepPink { get; private set; }
+        public static ISolidColorBrush DeepPink { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DeepSkyBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DeepSkyBlue { get; private set; }
+        public static ISolidColorBrush DeepSkyBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DimGray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DimGray { get; private set; }
+        public static ISolidColorBrush DimGray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.DodgerBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush DodgerBlue { get; private set; }
+        public static ISolidColorBrush DodgerBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Firebrick"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Firebrick { get; private set; }
+        public static ISolidColorBrush Firebrick { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.FloralWhite"/> colored brush.
         /// </summary>
-        public static SolidColorBrush FloralWhite { get; private set; }
+        public static ISolidColorBrush FloralWhite { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.ForestGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush ForestGreen { get; private set; }
+        public static ISolidColorBrush ForestGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Fuchsia"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Fuchsia { get; private set; }
+        public static ISolidColorBrush Fuchsia { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Gainsboro"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Gainsboro { get; private set; }
+        public static ISolidColorBrush Gainsboro { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.GhostWhite"/> colored brush.
         /// </summary>
-        public static SolidColorBrush GhostWhite { get; private set; }
+        public static ISolidColorBrush GhostWhite { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Gold"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Gold { get; private set; }
+        public static ISolidColorBrush Gold { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Goldenrod"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Goldenrod { get; private set; }
+        public static ISolidColorBrush Goldenrod { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Gray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Gray { get; private set; }
+        public static ISolidColorBrush Gray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Green"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Green { get; private set; }
+        public static ISolidColorBrush Green { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.GreenYellow"/> colored brush.
         /// </summary>
-        public static SolidColorBrush GreenYellow { get; private set; }
+        public static ISolidColorBrush GreenYellow { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Honeydew"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Honeydew { get; private set; }
+        public static ISolidColorBrush Honeydew { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.HotPink"/> colored brush.
         /// </summary>
-        public static SolidColorBrush HotPink { get; private set; }
+        public static ISolidColorBrush HotPink { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.IndianRed"/> colored brush.
         /// </summary>
-        public static SolidColorBrush IndianRed { get; private set; }
+        public static ISolidColorBrush IndianRed { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Indigo"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Indigo { get; private set; }
+        public static ISolidColorBrush Indigo { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Ivory"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Ivory { get; private set; }
+        public static ISolidColorBrush Ivory { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Khaki"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Khaki { get; private set; }
+        public static ISolidColorBrush Khaki { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Lavender"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Lavender { get; private set; }
+        public static ISolidColorBrush Lavender { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LavenderBlush"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LavenderBlush { get; private set; }
+        public static ISolidColorBrush LavenderBlush { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LawnGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LawnGreen { get; private set; }
+        public static ISolidColorBrush LawnGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LemonChiffon"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LemonChiffon { get; private set; }
+        public static ISolidColorBrush LemonChiffon { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightBlue { get; private set; }
+        public static ISolidColorBrush LightBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightCoral"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightCoral { get; private set; }
+        public static ISolidColorBrush LightCoral { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightCyan"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightCyan { get; private set; }
+        public static ISolidColorBrush LightCyan { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightGoldenrodYellow"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightGoldenrodYellow { get; private set; }
+        public static ISolidColorBrush LightGoldenrodYellow { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightGray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightGray { get; private set; }
+        public static ISolidColorBrush LightGray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightGreen { get; private set; }
+        public static ISolidColorBrush LightGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightPink"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightPink { get; private set; }
+        public static ISolidColorBrush LightPink { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightSalmon"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightSalmon { get; private set; }
+        public static ISolidColorBrush LightSalmon { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightSeaGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightSeaGreen { get; private set; }
+        public static ISolidColorBrush LightSeaGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightSkyBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightSkyBlue { get; private set; }
+        public static ISolidColorBrush LightSkyBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightSlateGray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightSlateGray { get; private set; }
+        public static ISolidColorBrush LightSlateGray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightSteelBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightSteelBlue { get; private set; }
+        public static ISolidColorBrush LightSteelBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LightYellow"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LightYellow { get; private set; }
+        public static ISolidColorBrush LightYellow { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Lime"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Lime { get; private set; }
+        public static ISolidColorBrush Lime { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.LimeGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush LimeGreen { get; private set; }
+        public static ISolidColorBrush LimeGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Linen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Linen { get; private set; }
+        public static ISolidColorBrush Linen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Magenta"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Magenta { get; private set; }
+        public static ISolidColorBrush Magenta { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Maroon"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Maroon { get; private set; }
+        public static ISolidColorBrush Maroon { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumAquamarine"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumAquamarine { get; private set; }
+        public static ISolidColorBrush MediumAquamarine { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumBlue { get; private set; }
+        public static ISolidColorBrush MediumBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumOrchid"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumOrchid { get; private set; }
+        public static ISolidColorBrush MediumOrchid { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumPurple"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumPurple { get; private set; }
+        public static ISolidColorBrush MediumPurple { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumSeaGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumSeaGreen { get; private set; }
+        public static ISolidColorBrush MediumSeaGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumSlateBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumSlateBlue { get; private set; }
+        public static ISolidColorBrush MediumSlateBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumSpringGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumSpringGreen { get; private set; }
+        public static ISolidColorBrush MediumSpringGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumTurquoise"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumTurquoise { get; private set; }
+        public static ISolidColorBrush MediumTurquoise { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MediumVioletRed"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MediumVioletRed { get; private set; }
+        public static ISolidColorBrush MediumVioletRed { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MidnightBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MidnightBlue { get; private set; }
+        public static ISolidColorBrush MidnightBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MintCream"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MintCream { get; private set; }
+        public static ISolidColorBrush MintCream { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.MistyRose"/> colored brush.
         /// </summary>
-        public static SolidColorBrush MistyRose { get; private set; }
+        public static ISolidColorBrush MistyRose { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Moccasin"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Moccasin { get; private set; }
+        public static ISolidColorBrush Moccasin { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.NavajoWhite"/> colored brush.
         /// </summary>
-        public static SolidColorBrush NavajoWhite { get; private set; }
+        public static ISolidColorBrush NavajoWhite { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Navy"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Navy { get; private set; }
+        public static ISolidColorBrush Navy { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.OldLace"/> colored brush.
         /// </summary>
-        public static SolidColorBrush OldLace { get; private set; }
+        public static ISolidColorBrush OldLace { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Olive"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Olive { get; private set; }
+        public static ISolidColorBrush Olive { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.OliveDrab"/> colored brush.
         /// </summary>
-        public static SolidColorBrush OliveDrab { get; private set; }
+        public static ISolidColorBrush OliveDrab { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Orange"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Orange { get; private set; }
+        public static ISolidColorBrush Orange { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.OrangeRed"/> colored brush.
         /// </summary>
-        public static SolidColorBrush OrangeRed { get; private set; }
+        public static ISolidColorBrush OrangeRed { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Orchid"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Orchid { get; private set; }
+        public static ISolidColorBrush Orchid { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PaleGoldenrod"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PaleGoldenrod { get; private set; }
+        public static ISolidColorBrush PaleGoldenrod { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PaleGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PaleGreen { get; private set; }
+        public static ISolidColorBrush PaleGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PaleTurquoise"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PaleTurquoise { get; private set; }
+        public static ISolidColorBrush PaleTurquoise { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PaleVioletRed"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PaleVioletRed { get; private set; }
+        public static ISolidColorBrush PaleVioletRed { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PapayaWhip"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PapayaWhip { get; private set; }
+        public static ISolidColorBrush PapayaWhip { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PeachPuff"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PeachPuff { get; private set; }
+        public static ISolidColorBrush PeachPuff { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Peru"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Peru { get; private set; }
+        public static ISolidColorBrush Peru { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Pink"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Pink { get; private set; }
+        public static ISolidColorBrush Pink { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Plum"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Plum { get; private set; }
+        public static ISolidColorBrush Plum { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.PowderBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush PowderBlue { get; private set; }
+        public static ISolidColorBrush PowderBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Purple"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Purple { get; private set; }
+        public static ISolidColorBrush Purple { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Red"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Red { get; private set; }
+        public static ISolidColorBrush Red { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.RosyBrown"/> colored brush.
         /// </summary>
-        public static SolidColorBrush RosyBrown { get; private set; }
+        public static ISolidColorBrush RosyBrown { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.RoyalBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush RoyalBlue { get; private set; }
+        public static ISolidColorBrush RoyalBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SaddleBrown"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SaddleBrown { get; private set; }
+        public static ISolidColorBrush SaddleBrown { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Salmon"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Salmon { get; private set; }
+        public static ISolidColorBrush Salmon { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SandyBrown"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SandyBrown { get; private set; }
+        public static ISolidColorBrush SandyBrown { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SeaGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SeaGreen { get; private set; }
+        public static ISolidColorBrush SeaGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SeaShell"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SeaShell { get; private set; }
+        public static ISolidColorBrush SeaShell { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Sienna"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Sienna { get; private set; }
+        public static ISolidColorBrush Sienna { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Silver"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Silver { get; private set; }
+        public static ISolidColorBrush Silver { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SkyBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SkyBlue { get; private set; }
+        public static ISolidColorBrush SkyBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SlateBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SlateBlue { get; private set; }
+        public static ISolidColorBrush SlateBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SlateGray"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SlateGray { get; private set; }
+        public static ISolidColorBrush SlateGray { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Snow"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Snow { get; private set; }
+        public static ISolidColorBrush Snow { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SpringGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SpringGreen { get; private set; }
+        public static ISolidColorBrush SpringGreen { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.SteelBlue"/> colored brush.
         /// </summary>
-        public static SolidColorBrush SteelBlue { get; private set; }
+        public static ISolidColorBrush SteelBlue { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Tan"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Tan { get; private set; }
+        public static ISolidColorBrush Tan { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Teal"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Teal { get; private set; }
+        public static ISolidColorBrush Teal { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Thistle"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Thistle { get; private set; }
+        public static ISolidColorBrush Thistle { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Tomato"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Tomato { get; private set; }
+        public static ISolidColorBrush Tomato { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Transparent"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Transparent { get; private set; }
+        public static ISolidColorBrush Transparent { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Turquoise"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Turquoise { get; private set; }
+        public static ISolidColorBrush Turquoise { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Violet"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Violet { get; private set; }
+        public static ISolidColorBrush Violet { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Wheat"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Wheat { get; private set; }
+        public static ISolidColorBrush Wheat { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.White"/> colored brush.
         /// </summary>
-        public static SolidColorBrush White { get; private set; }
+        public static ISolidColorBrush White { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.WhiteSmoke"/> colored brush.
         /// </summary>
-        public static SolidColorBrush WhiteSmoke { get; private set; }
+        public static ISolidColorBrush WhiteSmoke { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.Yellow"/> colored brush.
         /// </summary>
-        public static SolidColorBrush Yellow { get; private set; }
+        public static ISolidColorBrush Yellow { get; private set; }
 
         /// <summary>
         /// Gets an <see cref="Colors.YellowGreen"/> colored brush.
         /// </summary>
-        public static SolidColorBrush YellowGreen { get; private set; }
+        public static ISolidColorBrush YellowGreen { get; private set; }
     }
 }

+ 1 - 0
src/Avalonia.Visuals/Media/DrawingContext.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using Avalonia.Media.Imaging;
+using Avalonia.Platform;
 
 namespace Avalonia.Media
 {

+ 16 - 0
src/Avalonia.Visuals/Media/IMutableBrush.cs

@@ -0,0 +1,16 @@
+using System;
+
+namespace Avalonia.Media
+{
+    /// <summary>
+    /// Represents a mutable brush which can return an immutable clone of itself.
+    /// </summary>
+    public interface IMutableBrush : IBrush
+    {
+        /// <summary>
+        /// Creates an immutable clone of the brush.
+        /// </summary>
+        /// <returns>The immutable clone.</returns>
+        IBrush ToImmutable();
+    }
+}

+ 47 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableGradientBrush.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// A brush that draws with a gradient.
+    /// </summary>
+    public abstract class ImmutableGradientBrush : IGradientBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableGradientBrush"/> class.
+        /// </summary>
+        /// <param name="gradientStops">The gradient stops.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        /// <param name="spreadMethod">The spread method.</param>
+        protected ImmutableGradientBrush(
+            IReadOnlyList<GradientStop> gradientStops,
+            double opacity,
+            GradientSpreadMethod spreadMethod)
+        {
+            GradientStops = gradientStops;
+            Opacity = opacity;
+            SpreadMethod = spreadMethod;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableGradientBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        protected ImmutableGradientBrush(IGradientBrush source)
+            : this(source.GradientStops.ToList(), source.Opacity, source.SpreadMethod)
+        {
+
+        }
+
+        /// <inheritdoc/>
+        public IReadOnlyList<GradientStop> GradientStops { get; }
+
+        /// <inheritdoc/>
+        public double Opacity { get; }
+
+        /// <inheritdoc/>
+        public GradientSpreadMethod SpreadMethod { get; }
+    }
+}

+ 58 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableImageBrush.cs

@@ -0,0 +1,58 @@
+using System;
+using Avalonia.Media.Imaging;
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// Paints an area with an <see cref="IBitmap"/>.
+    /// </summary>
+    internal class ImmutableImageBrush : ImmutableTileBrush, IImageBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableImageBrush"/> class.
+        /// </summary>
+        /// <param name="source">The image to draw.</param>
+        /// <param name="alignmentX">The horizontal alignment of a tile in the destination.</param>
+        /// <param name="alignmentY">The vertical alignment of a tile in the destination.</param>
+        /// <param name="destinationRect">The rectangle on the destination in which to paint a tile.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        /// <param name="sourceRect">The rectangle of the source image that will be displayed.</param>
+        /// <param name="stretch">
+        /// How the source rectangle will be stretched to fill the destination rect.
+        /// </param>
+        /// <param name="tileMode">The tile mode.</param>
+        public ImmutableImageBrush(
+            IBitmap source,
+            AlignmentX alignmentX = AlignmentX.Center,
+            AlignmentY alignmentY = AlignmentY.Center,
+            RelativeRect? destinationRect = null,
+            double opacity = 1,
+            RelativeRect? sourceRect = null,
+            Stretch stretch = Stretch.Uniform,
+            TileMode tileMode = TileMode.None)
+            : base(
+                  alignmentX,
+                  alignmentY,
+                  destinationRect ?? RelativeRect.Fill,
+                  opacity,
+                  sourceRect ?? RelativeRect.Fill,
+                  stretch,
+                  tileMode)
+        {
+            Source = source;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableImageBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        public ImmutableImageBrush(IImageBrush source)
+            : base(source)
+        {
+            Source = source.Source;
+        }
+
+        /// <inheritdoc/>
+        public IBitmap Source { get; }
+    }
+}

+ 51 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableLinearGradientBrush.cs

@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// A brush that draws with a linear gradient.
+    /// </summary>
+    public class ImmutableLinearGradientBrush : ImmutableGradientBrush, ILinearGradientBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableLinearGradientBrush"/> class.
+        /// </summary>
+        /// <param name="gradientStops">The gradient stops.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        /// <param name="spreadMethod">The spread method.</param>
+        /// <param name="startPoint">The start point for the gradient.</param>
+        /// <param name="endPoint">The end point for the gradient.</param>
+        public ImmutableLinearGradientBrush(
+            IReadOnlyList<GradientStop> gradientStops,
+            double opacity = 1,
+            GradientSpreadMethod spreadMethod = GradientSpreadMethod.Pad,
+            RelativePoint? startPoint = null,
+            RelativePoint? endPoint = null)
+            : base(gradientStops, opacity, spreadMethod)
+        {
+            StartPoint = startPoint ?? RelativePoint.TopLeft;
+            EndPoint = endPoint ?? RelativePoint.BottomRight;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableLinearGradientBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        public ImmutableLinearGradientBrush(ILinearGradientBrush source)
+            : base(source)
+        {
+            StartPoint = source.StartPoint;
+            EndPoint = source.EndPoint;
+        }
+
+        /// <inheritdoc/>
+        public RelativePoint StartPoint { get; }
+
+        /// <inheritdoc/>
+        public RelativePoint EndPoint { get; }
+    }
+}

+ 59 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableRadialGradientBrush.cs

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// A brush that draws with a radial gradient.
+    /// </summary>
+    public class ImmutableRadialGradientBrush : ImmutableGradientBrush, IRadialGradientBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableRadialGradientBrush"/> class.
+        /// </summary>
+        /// <param name="gradientStops">The gradient stops.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        /// <param name="spreadMethod">The spread method.</param>
+        /// <param name="center">The start point for the gradient.</param>
+        /// <param name="gradientOrigin">
+        /// The location of the two-dimensional focal point that defines the beginning of the gradient.
+        /// </param>
+        /// <param name="radius">
+        /// The horizontal and vertical radius of the outermost circle of the radial gradient.
+        /// </param>
+        public ImmutableRadialGradientBrush(
+            IReadOnlyList<GradientStop> gradientStops,
+            double opacity = 1,
+            GradientSpreadMethod spreadMethod = GradientSpreadMethod.Pad,
+            RelativePoint? center = null,
+            RelativePoint? gradientOrigin = null,
+            double radius = 0.5)
+            : base(gradientStops, opacity, spreadMethod)
+        {
+            Center = center ?? RelativePoint.Center;
+            GradientOrigin = gradientOrigin ?? RelativePoint.Center;
+            Radius = radius;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableRadialGradientBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        public ImmutableRadialGradientBrush(IRadialGradientBrush source)
+            : base(source)
+        {
+            Center = source.Center;
+            GradientOrigin = source.GradientOrigin;
+            Radius = source.Radius;
+        }
+
+        /// <inheritdoc/>
+        public RelativePoint Center { get; }
+
+        /// <inheritdoc/>
+        public RelativePoint GradientOrigin { get; }
+
+        /// <inheritdoc/>
+        public double Radius { get; }
+    }
+}

+ 59 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableSolidColorBrush.cs

@@ -0,0 +1,59 @@
+// Copyright (c) The Avalonia Project. All rights reserved.
+// Licensed under the MIT license. See licence.md file in the project root for full license information.
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// Fills an area with a solid color.
+    /// </summary>
+    public struct ImmutableSolidColorBrush : ISolidColorBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableSolidColorBrush"/> class.
+        /// </summary>
+        /// <param name="color">The color to use.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        public ImmutableSolidColorBrush(Color color, double opacity = 1)
+        {
+            Color = color;
+            Opacity = opacity;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableSolidColorBrush"/> class.
+        /// </summary>
+        /// <param name="color">The color to use.</param>
+        public ImmutableSolidColorBrush(uint color)
+            : this(Color.FromUInt32(color))
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableSolidColorBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        public ImmutableSolidColorBrush(ISolidColorBrush source)
+            : this(source.Color, source.Opacity)
+        {
+        }
+
+        /// <summary>
+        /// Gets the color of the brush.
+        /// </summary>
+        public Color Color { get; }
+
+        /// <summary>
+        /// Gets the opacity of the brush.
+        /// </summary>
+        public double Opacity { get; }
+
+        /// <summary>
+        /// Returns a string representation of the brush.
+        /// </summary>
+        /// <returns>A string representation of the brush.</returns>
+        public override string ToString()
+        {
+            return Color.ToString();
+        }
+    }
+}

+ 77 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableTileBrush.cs

@@ -0,0 +1,77 @@
+using System;
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// A brush which displays a repeating image.
+    /// </summary>
+    public abstract class ImmutableTileBrush : ITileBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImageBrush"/> class.
+        /// </summary>
+        /// <param name="alignmentX">The horizontal alignment of a tile in the destination.</param>
+        /// <param name="alignmentY">The vertical alignment of a tile in the destination.</param>
+        /// <param name="destinationRect">The rectangle on the destination in which to paint a tile.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        /// <param name="sourceRect">The rectangle of the source image that will be displayed.</param>
+        /// <param name="stretch">
+        /// How the source rectangle will be stretched to fill the destination rect.
+        /// </param>
+        /// <param name="tileMode">The tile mode.</param>
+        protected ImmutableTileBrush(
+            AlignmentX alignmentX,
+            AlignmentY alignmentY,
+            RelativeRect destinationRect,
+            double opacity,
+            RelativeRect sourceRect,
+            Stretch stretch,
+            TileMode tileMode)
+        {
+            AlignmentX = alignmentX;
+            AlignmentY = alignmentY;
+            DestinationRect = destinationRect;
+            Opacity = opacity;
+            SourceRect = sourceRect;
+            Stretch = stretch;
+            TileMode = tileMode;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImageBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        protected ImmutableTileBrush(ITileBrush source)
+            : this(
+                  source.AlignmentX,
+                  source.AlignmentY,
+                  source.DestinationRect,
+                  source.Opacity,
+                  source.SourceRect,
+                  source.Stretch,
+                  source.TileMode)
+        {
+        }
+
+        /// <inheritdoc/>
+        public AlignmentX AlignmentX { get; }
+
+        /// <inheritdoc/>
+        public AlignmentY AlignmentY { get; }
+
+        /// <inheritdoc/>
+        public RelativeRect DestinationRect { get; }
+
+        /// <inheritdoc/>
+        public double Opacity { get; }
+
+        /// <inheritdoc/>
+        public RelativeRect SourceRect { get; }
+
+        /// <inheritdoc/>
+        public Stretch Stretch { get; }
+
+        /// <inheritdoc/>
+        public TileMode TileMode { get; }
+    }
+}

+ 58 - 0
src/Avalonia.Visuals/Media/Immutable/ImmutableVisualBrush.cs

@@ -0,0 +1,58 @@
+using System;
+using Avalonia.VisualTree;
+
+namespace Avalonia.Media.Immutable
+{
+    /// <summary>
+    /// Paints an area with an <see cref="IVisual"/>.
+    /// </summary>
+    internal class ImmutableVisualBrush : ImmutableTileBrush, IVisualBrush
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableImageBrush"/> class.
+        /// </summary>
+        /// <param name="visual">The visual to draw.</param>
+        /// <param name="alignmentX">The horizontal alignment of a tile in the destination.</param>
+        /// <param name="alignmentY">The vertical alignment of a tile in the destination.</param>
+        /// <param name="destinationRect">The rectangle on the destination in which to paint a tile.</param>
+        /// <param name="opacity">The opacity of the brush.</param>
+        /// <param name="sourceRect">The rectangle of the source image that will be displayed.</param>
+        /// <param name="stretch">
+        /// How the source rectangle will be stretched to fill the destination rect.
+        /// </param>
+        /// <param name="tileMode">The tile mode.</param>
+        public ImmutableVisualBrush(
+            IVisual visual,
+            AlignmentX alignmentX = AlignmentX.Center,
+            AlignmentY alignmentY = AlignmentY.Center,
+            RelativeRect? destinationRect = null,
+            double opacity = 1,
+            RelativeRect? sourceRect = null,
+            Stretch stretch = Stretch.Uniform,
+            TileMode tileMode = TileMode.None)
+            : base(
+                  alignmentX,
+                  alignmentY,
+                  destinationRect ?? RelativeRect.Fill,
+                  opacity,
+                  sourceRect ?? RelativeRect.Fill,
+                  stretch,
+                  tileMode)
+        {
+            Visual = visual;
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="ImmutableVisualBrush"/> class.
+        /// </summary>
+        /// <param name="source">The brush from which this brush's properties should be copied.</param>
+        public ImmutableVisualBrush(IVisualBrush source)
+            : base(source)
+        {
+            Visual = source.Visual;
+        }
+
+        /// <inheritdoc/>
+        public IVisual Visual { get; }
+    }
+}

+ 0 - 35
src/Avalonia.Visuals/Media/Mutable/SolidColorBrush.cs

@@ -1,35 +0,0 @@
-// Copyright (c) The Avalonia Project. All rights reserved.
-// Licensed under the MIT license. See licence.md file in the project root for full license information.
-
-namespace Avalonia.Media.Mutable
-{
-    /// <summary>
-    /// Fills an area with a solid color.
-    /// </summary>
-    /// <remarks>
-    /// This is a mutable version of the normal immutable <see cref="Avalonia.Media.SolidColorBrush"/>
-    /// for use in XAML. XAML really needs support for immutable data...
-    /// </remarks>
-    public class SolidColorBrush : Brush, ISolidColorBrush
-    {
-        public static readonly DirectProperty<SolidColorBrush, Color> ColorProperty =
-            AvaloniaProperty.RegisterDirect<SolidColorBrush, Color>(
-                "Color",
-                o => o.Color,
-                (o, v) => o.Color = v);
-
-        /// <summary>
-        /// Gets the color of the brush.
-        /// </summary>
-        public Color Color { get; set; }
-
-        /// <summary>
-        /// Returns a string representation of the brush.
-        /// </summary>
-        /// <returns>A string representation of the brush.</returns>
-        public override string ToString()
-        {
-            return Color.ToString();
-        }
-    }
-}

+ 28 - 8
src/Avalonia.Visuals/Media/SolidColorBrush.cs

@@ -1,13 +1,28 @@
 // Copyright (c) The Avalonia Project. All rights reserved.
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
+using System;
+
 namespace Avalonia.Media
 {
     /// <summary>
     /// Fills an area with a solid color.
     /// </summary>
-    public class SolidColorBrush : ISolidColorBrush
+    public class SolidColorBrush : Brush, ISolidColorBrush, IMutableBrush
     {
+        /// <summary>
+        /// Defines the <see cref="Color"/> property.
+        /// </summary>
+        public static readonly StyledProperty<Color> ColorProperty =
+            AvaloniaProperty.Register<SolidColorBrush, Color>(nameof(Color));
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SolidColorBrush"/> class.
+        /// </summary>
+        public SolidColorBrush()
+        {
+        }
+
         /// <summary>
         /// Initializes a new instance of the <see cref="SolidColorBrush"/> class.
         /// </summary>
@@ -29,14 +44,13 @@ namespace Avalonia.Media
         }
 
         /// <summary>
-        /// Gets the color of the brush.
+        /// Gets or sets the color of the brush.
         /// </summary>
-        public Color Color { get; }
-
-        /// <summary>
-        /// Gets the opacity of the brush.
-        /// </summary>
-        public double Opacity { get; }
+        public Color Color
+        {
+            get { return GetValue(ColorProperty); }
+            set { SetValue(ColorProperty, value); }
+        }
 
         /// <summary>
         /// Returns a string representation of the brush.
@@ -46,5 +60,11 @@ namespace Avalonia.Media
         {
             return Color.ToString();
         }
+
+        /// <inheritdoc/>
+        IBrush IMutableBrush.ToImmutable()
+        {
+            return new Immutable.ImmutableSolidColorBrush(this);
+        }
     }
 }

+ 2 - 1
src/Avalonia.Visuals/Media/IDrawingContextImpl.cs → src/Avalonia.Visuals/Platform/IDrawingContextImpl.cs

@@ -2,9 +2,10 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using System;
+using Avalonia.Media;
 using Avalonia.Platform;
 
-namespace Avalonia.Media
+namespace Avalonia.Platform
 {
     /// <summary>
     /// Defines the interface through which drawing occurs.

+ 1 - 2
src/Avalonia.Visuals/Properties/AssemblyInfo.cs

@@ -6,5 +6,4 @@ using Avalonia.Metadata;
 
 [assembly: AssemblyTitle("Avalonia.Visuals")]
 [assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Animation")]
-[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media")]
-[assembly: XmlnsDefinition("https://github.com/avaloniaui/mutable", "Avalonia.Media.Mutable")]
+[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Avalonia.Media")]

+ 0 - 8
src/Avalonia.Visuals/packages.config

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 6 - 10
src/Gtk/Avalonia.Cairo/Avalonia.Cairo.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -38,14 +38,6 @@
     <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -109,7 +101,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
-    <None Include="packages.config" />
   </ItemGroup>
   <Import Project="..\..\Shared\RenderHelpers\RenderHelpers.projitems" Label="Shared" />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
@@ -120,4 +111,9 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\Shared\nuget.workaround.targets" />
 </Project>

+ 1 - 1
src/Gtk/Avalonia.Cairo/Media/DrawingContext.cs

@@ -294,7 +294,7 @@ namespace Avalonia.Cairo.Media
 
         private BrushImpl CreateBrushImpl(IBrush brush, Size destinationSize)
         {
-            var solid = brush as SolidColorBrush;
+            var solid = brush as ISolidColorBrush;
             var linearGradientBrush = brush as ILinearGradientBrush;
             var radialGradientBrush = brush as IRadialGradientBrush;
             var imageBrush = brush as IImageBrush;

+ 1 - 1
src/Gtk/Avalonia.Cairo/Media/SolidColorBrushImpl.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Cairo
 {
 	public class SolidColorBrushImpl : BrushImpl
 	{
-		public SolidColorBrushImpl(Avalonia.Media.SolidColorBrush brush, double opacityOverride = 1.0f)
+		public SolidColorBrushImpl(Avalonia.Media.ISolidColorBrush brush, double opacityOverride = 1.0f)
 		{
 			var color = brush?.Color.ToCairo() ?? new Color();
 

+ 0 - 5
src/Gtk/Avalonia.Cairo/packages.config

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" />
-</packages>

+ 4 - 10
src/Gtk/Avalonia.Gtk/Avalonia.Gtk.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -37,14 +37,6 @@
     <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Core.3.0.0\lib\net45\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="ClipboardImpl.cs" />
@@ -106,6 +98,8 @@
     </ProjectReference>
   </ItemGroup>
   <ItemGroup>
-    <None Include="packages.config" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
   </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 5
src/Gtk/Avalonia.Gtk/packages.config

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" />
-</packages>

+ 0 - 1
src/Gtk/Avalonia.Gtk3/.gitignore

@@ -1 +0,0 @@
-project.lock.json

+ 9 - 49
src/Gtk/Avalonia.Gtk3/Avalonia.Gtk3.csproj

@@ -1,21 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{BB1F7BB5-6AD4-4776-94D9-C09D0A972658}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Gtk3</RootNamespace>
-    <AssemblyName>Avalonia.Gtk3</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
-    <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
     <DebugSymbols>true</DebugSymbols>
@@ -36,10 +23,6 @@
     <WarningLevel>4</WarningLevel>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
   </PropertyGroup>
-  <ItemGroup>
-    <!-- A reference to the entire .NET Framework is automatically included -->
-    <None Include="project.json" />
-  </ItemGroup>
   <ItemGroup>
     <Compile Include="..\Avalonia.Gtk\KeyTransform.cs">
       <Link>KeyTransform.cs</Link>
@@ -71,33 +54,10 @@
     <Compile Include="WindowImpl.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.SceneGraph</Name>
-    </ProjectReference>
+    <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" />
   </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 10
src/Gtk/Avalonia.Gtk3/project.json

@@ -1,10 +0,0 @@
-{
-  "supports": {},
-  "dependencies": {
-    "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
-    "NETStandard.Library": "1.6.0"
-  },
-  "frameworks": {
-    "netstandard1.1": {}
-  }
-}

+ 26 - 79
src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj

@@ -1,20 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{3E53A01A-B331-47F3-B828-4A5717E77A24}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Markup.Xaml</RootNamespace>
-    <AssemblyName>Avalonia.Markup.Xaml</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <EnableDefaultCompileItems>False</EnableDefaultCompileItems>
+    <EnableDefaultItems>false</EnableDefaultItems>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -280,77 +269,35 @@
     <Compile Include="Templates\TreeDataTemplate.cs" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="glass\Glass.Core\Glass.Core.nuspec" />
-    <None Include="packages.config" />
+    <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.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" />
+    <ProjectReference Include="..\Avalonia.Markup\Avalonia.Markup.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Avalonia.Animation\Avalonia.Animation.csproj">
-      <Project>{D211E587-D8BC-45B9-95A4-F297C8FA5200}</Project>
-      <Name>Avalonia.Animation</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{B09B78D8-9B26-48B0-9149-D64A2F120F3F}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{D2221C82-4A25-4583-9B43-D791E3F6820C}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024B2D-53EB-4638-B26B-85EEAA54866E}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6B0ED19D-A08B-461C-A9D9-A9EE40B0C06B}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4C81-8AFF-9F27B8E31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{EB582467-6ABB-43A1-B052-E981BA910E3A}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{F1BAA01A-F176-4C6A-B39D-5B40BB1B148F}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\Avalonia.Markup\Avalonia.Markup.csproj">
-      <Project>{6417e941-21bc-467b-a771-0de389353ce6}</Project>
-      <Name>Avalonia.Markup</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <Reference Include="Sprache, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\Sprache.2.1.0\lib\netstandard1.0\Sprache.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Content Include="glass\Glass.Core\Glass.Core.csproj" />
   </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
   </Target>
   <Target Name="AfterBuild">
   </Target>
-  -->
+  <ItemGroup>
+    <PackageReference Include="Sprache" Version="2.1.0" />
+    <PackageReference Include="System.Globalization" Version="4.3.0" />
+    <PackageReference Include="System.Linq" Version="4.3.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
+    <PackageReference Include="System.Runtime" Version="4.3.0" />
+    <PackageReference Include="System.Text.RegularExpressions" Version="4.3.0" />
+  </ItemGroup>
 </Project>

+ 0 - 13
src/Markup/Avalonia.Markup.Xaml/packages.config

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="Sprache" version="2.1.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Globalization" version="4.0.11" targetFramework="portable45-net45+win8" />
-  <package id="System.Linq" version="4.1.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Runtime" version="4.1.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="portable45-net45+win8" />
-</packages>

+ 16 - 111
src/Markup/Avalonia.Markup/Avalonia.Markup.csproj

@@ -1,20 +1,7 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{6417E941-21BC-467B-A771-0DE389353CE6}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Avalonia.Markup</RootNamespace>
-    <AssemblyName>Avalonia.Markup</AssemblyName>
-    <DefaultLanguage>en-US</DefaultLanguage>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFramework>netstandard1.1</TargetFramework>
+    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -42,104 +29,22 @@
     <Compile Include="..\..\Shared\SharedAssemblyInfo.cs">
       <Link>Properties\SharedAssemblyInfo.cs</Link>
     </Compile>
-    <Compile Include="Data\ISettableNode.cs" />
-    <Compile Include="Data\StreamNode.cs" />
-    <Compile Include="Data\MarkupBindingChainException.cs" />
-    <Compile Include="Data\CommonPropertyNames.cs" />
-    <Compile Include="Data\EmptyExpressionNode.cs" />
-    <Compile Include="Data\ExpressionNodeBuilder.cs" />
-    <Compile Include="Data\ExpressionParseException.cs" />
-    <Compile Include="Data\BindingExpression.cs" />
-    <Compile Include="ControlLocator.cs" />
-    <Compile Include="Data\Plugins\DataAnnotationsValidationPlugin.cs" />
-    <Compile Include="Data\Plugins\ExceptionValidationPlugin.cs" />
-    <Compile Include="Data\Plugins\IndeiValidationPlugin.cs" />
-    <Compile Include="Data\Plugins\IDataValidationPlugin.cs" />
-    <Compile Include="Data\Plugins\AvaloniaPropertyAccessorPlugin.cs" />
-    <Compile Include="Data\Plugins\InpcPropertyAccessorPlugin.cs" />
-    <Compile Include="Data\Plugins\IPropertyAccessor.cs" />
-    <Compile Include="Data\Plugins\IPropertyAccessorPlugin.cs" />
-    <Compile Include="Data\LogicalNotNode.cs" />
-    <Compile Include="Data\IndexerNode.cs" />
-    <Compile Include="Data\Parsers\ArgumentListParser.cs" />
-    <Compile Include="Data\Parsers\IdentifierParser.cs" />
-    <Compile Include="Data\Parsers\ExpressionParser.cs" />
-    <Compile Include="Data\Parsers\Reader.cs" />
-    <Compile Include="Data\Plugins\ObservableStreamPlugin.cs" />
-    <Compile Include="Data\Plugins\TaskStreamPlugin.cs" />
-    <Compile Include="Data\Plugins\IStreamPlugin.cs" />
-    <Compile Include="Data\Plugins\PropertyAccessorBase.cs" />
-    <Compile Include="Data\Plugins\PropertyError.cs" />
-    <Compile Include="Data\Plugins\DataValidatiorBase.cs" />
-    <Compile Include="Data\PropertyAccessorNode.cs" />
-    <Compile Include="Data\ExpressionNode.cs" />
-    <Compile Include="Data\ExpressionObserver.cs" />
-    <Compile Include="FuncMultiValueConverter.cs" />
-    <Compile Include="FuncValueConverter.cs" />
-    <Compile Include="IMultiValueConverter.cs" />
-    <Compile Include="BoolConverters.cs" />
-    <Compile Include="StringConverters.cs" />
-    <Compile Include="DefaultValueConverter.cs" />
-    <Compile Include="IValueConverter.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Avalonia.Base\Avalonia.Base.csproj">
-      <Project>{b09b78d8-9b26-48b0-9149-d64a2f120f3f}</Project>
-      <Name>Avalonia.Base</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Controls\Avalonia.Controls.csproj">
-      <Project>{d2221c82-4a25-4583-9b43-d791e3f6820c}</Project>
-      <Name>Avalonia.Controls</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Input\Avalonia.Input.csproj">
-      <Project>{62024b2d-53eb-4638-b26b-85eeaa54866e}</Project>
-      <Name>Avalonia.Input</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Interactivity\Avalonia.Interactivity.csproj">
-      <Project>{6b0ed19d-a08b-461c-a9d9-a9ee40b0c06b}</Project>
-      <Name>Avalonia.Interactivity</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Layout\Avalonia.Layout.csproj">
-      <Project>{42472427-4774-4c81-8aff-9f27b8e31721}</Project>
-      <Name>Avalonia.Layout</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj">
-      <Project>{eb582467-6abb-43a1-b052-e981ba910e3a}</Project>
-      <Name>Avalonia.Visuals</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj">
-      <Project>{f1baa01a-f176-4c6a-b39d-5b40bb1b148f}</Project>
-      <Name>Avalonia.Styling</Name>
-    </ProjectReference>
+    <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.Visuals\Avalonia.Visuals.csproj" />
+    <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" />
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="System.Reactive.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Core.3.0.0\lib\netstandard1.1\System.Reactive.Core.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Interfaces, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Interfaces.3.0.0\lib\netstandard1.0\System.Reactive.Interfaces.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.Linq.3.0.0\lib\netstandard1.1\System.Reactive.Linq.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
-    <Reference Include="System.Reactive.PlatformServices, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\System.Reactive.PlatformServices.3.0.0\lib\netstandard1.0\System.Reactive.PlatformServices.dll</HintPath>
-      <Private>True</Private>
-    </Reference>
+    <PackageReference Include="System.ComponentModel.Annotations" Version="4.3.0" />
+    <PackageReference Include="System.Reactive" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Core" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Interfaces" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.Linq" Version="3.0.0" />
+    <PackageReference Include="System.Reactive.PlatformServices" Version="3.0.0" />
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
 </Project>

+ 0 - 9
src/Markup/Avalonia.Markup/packages.config

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="System.ComponentModel.Annotations" version="4.1.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Core" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.Linq" version="3.0.0" targetFramework="portable45-net45+win8" />
-  <package id="System.Reactive.PlatformServices" version="3.0.0" targetFramework="portable45-net45+win8" />
-</packages>

BIN
src/Shared/Microsoft.NuGet.Build.Tasks.Patched.dll


+ 1 - 1
src/Shared/PlatformSupport/StandardRuntimePlatform.cs

@@ -13,7 +13,7 @@ namespace Avalonia.Shared.PlatformSupport
     {
 
 #if NETSTANDARD
-        public void PostThreadPoolItem(Action cb) => ThreadPool.QueueUserWorkItem(_ => cb(), null);
+        public void PostThreadPoolItem(Action cb) =>  ThreadPool.QueueUserWorkItem(_ => cb(), null);
 #else
         public Assembly[] GetLoadedAssemblies() => AppDomain.CurrentDomain.GetAssemblies();
         public void PostThreadPoolItem(Action cb) => ThreadPool.UnsafeQueueUserWorkItem(_ => cb(), null);

+ 67 - 0
src/Shared/nuget.workaround.targets

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 
+  This file is for a workaround for this NuGet issue https://github.com/NuGet/Home/issues/4532
+  It is built from the master branch of NuGet.BuildTasks with a different class name as not to conflict with the original.
+  It can most likely be removed when the next version of NuGet.BuildTasks is released: https://github.com/NuGet/NuGet.BuildTasks/pull/29
+-->
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+   <UsingTask TaskName="Microsoft.NuGet.Build.Tasks.ResolveNuGetPackageAssetsPatched" AssemblyFile="Microsoft.NuGet.Build.Tasks.Patched.dll" />
+
+  <Target Name="ResolveNuGetPackageAssets"
+          DependsOnTargets="$(ResolveNuGetPackageAssetsDependsOn)"
+          Condition="'$(ResolveNuGetPackages)' == 'true' and exists('$(ProjectLockFile)')">
+
+    <ResolveNuGetPackageAssetsPatched AllowFallbackOnTargetSelection="$(DesignTimeBuild)"
+                               ContinueOnError="$(ContinueOnError)"
+                               IncludeFrameworkReferences="$(IncludeFrameworkReferencesFromNuGet)"
+                               NuGetPackagesDirectory="$(NuGetPackagesDirectory)"
+                               RuntimeIdentifier="$(NuGetRuntimeIdentifier)"
+                               ProjectLanguage="$(Language)"
+                               ProjectLockFile="$(ProjectLockFile)"
+                               ContentPreprocessorValues="@(NuGetPreprocessorValue)"
+                               ContentPreprocessorOutputDirectory="$(IntermediateOutputPath)\NuGet"
+                               TargetMonikers="$(NuGetTargetMoniker);$(_NuGetTargetFallbackMoniker)">
+
+      <Output TaskParameter="ResolvedAnalyzers" ItemName="Analyzer" />
+      <Output TaskParameter="ResolvedCopyLocalItems" ItemName="ReferenceCopyLocalPaths" />
+      <Output TaskParameter="ResolvedReferences" ItemName="_ReferencesFromNuGetPackages" />
+      <Output TaskParameter="ReferencedPackages" ItemName="ReferencedNuGetPackages" />
+      <Output TaskParameter="ContentItems" ItemName="_NuGetContentItems" />
+      <Output TaskParameter="FileWrites" ItemName="FileWrites" />
+    </ResolveNuGetPackageAssetsPatched>
+
+    <ItemGroup>
+      <!-- Remove exact references, such as if a package had a framework reference to 'System' that we already have -->
+      <Reference Remove="@(_ReferencesFromNuGetPackages)" />
+      
+      <!-- Remove simple name references that are already implicitly added -->
+      <_ReferencesFromNuGetPackages Remove="%(ReferencePath.FileName)" Condition="'%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandTargetFramework'" />
+
+      <!-- Include NuGet references in the proper groups. Project-to-project references must go in the
+           _ResolvedProjectReferencePaths group which matches the behavior of the ResolveProjectReferences
+           target. This ensures that even if the assembly is missing on disk, it still makes it to the compiler. -->
+      <Reference Include="@(_ReferencesFromNuGetPackages)" Condition="'%(_ReferencesFromNuGetPackages.NuGetSourceType)' != 'Project'" />
+      <_ResolvedProjectReferencePaths Include="@(_ReferencesFromNuGetPackages)" Condition="'%(_ReferencesFromNuGetPackages.NuGetSourceType)' == 'Project'" />
+
+    <Reference Include="@(_ReferencesFromNuGetPackages)" />
+      <!-- Remove simple name references if we're directly providing a reference assembly to the compiler. For example,
+           consider a project with an Reference Include="System", and some NuGet package is providing System.dll -->
+      <Reference Remove="%(_ReferencesFromNuGetPackages.FileName)" Condition="'%(_ReferencesFromNuGetPackages.NuGetIsFrameworkReference)' == 'false'"/>
+    </ItemGroup>
+
+    <PropertyGroup Condition=" '$(AutoUnifyAssemblyReferences)' == 'true' ">
+      <!-- Normally Design Time Assembly Resolution (DTAR) won't consider these references.
+           Put DTAR in a mode where it will prefer the output of RAR and unify. -->
+      <DTARUseReferencesFromProject>true</DTARUseReferencesFromProject>
+    </PropertyGroup>
+
+    <!-- The items in _NuGetContentItems need to go into the appropriately-named item group, but the names depend upon the items
+         themselves. Split it apart. -->
+    <CreateItem Include="@(_NuGetContentItems)" Condition="'@(_NuGetContentItems)' != ''">
+      <Output TaskParameter="Include" ItemName="%(_NuGetContentItems.NuGetItemType)" />
+    </CreateItem>
+  </Target>
+  <PropertyGroup Condition="'$(UseRoslynPathHack)' == 'true'">
+    <CscToolPath>$(MSBuildToolsPath)\..\Roslyn</CscToolPath>
+  </PropertyGroup>
+</Project>

+ 5 - 7
src/Skia/Avalonia.Skia.Android/Avalonia.Skia.Android.csproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -40,9 +40,6 @@
   <ItemGroup>
     <Reference Include="Mono.Android" />
     <Reference Include="mscorlib" />
-    <Reference Include="SkiaSharp, Version=1.56.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
-      <HintPath>..\..\..\packages\SkiaSharp.1.56.1-beta\lib\MonoAndroid\SkiaSharp.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />
@@ -85,9 +82,6 @@
       <Name>Avalonia.Styling</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
   <Import Project="..\Avalonia.Skia\Avalonia.Skia.projitems" Label="Shared" />
   <Import Project="..\..\Shared\RenderHelpers\RenderHelpers.projitems" Label="Shared" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
@@ -98,4 +92,8 @@
   <Target Name="AfterBuild">
   </Target>
   -->
+  <ItemGroup>
+    <PackageReference Include="SkiaSharp" Version="1.56.1-beta" />
+  </ItemGroup>
+  <Import Project="$(MSBuildThisFileDirectory)..\..\Shared\nuget.workaround.targets" />
 </Project>

+ 0 - 4
src/Skia/Avalonia.Skia.Android/packages.config

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="SkiaSharp" version="1.56.1-beta" targetFramework="monoandroid44" />
-</packages>

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