diff --git a/entity-framework/core/get-started/uwp/getting-started.md b/entity-framework/core/get-started/uwp/getting-started.md index 7eb7ea2d97..bf2ec37a06 100644 --- a/entity-framework/core/get-started/uwp/getting-started.md +++ b/entity-framework/core/get-started/uwp/getting-started.md @@ -1,4 +1,4 @@ ---- +--- title: Getting Started on UWP - New Database - EF Core author: rowanmiller ms.author: divega @@ -13,49 +13,42 @@ uid: core/get-started/uwp/getting-started # Getting Started with EF Core on Universal Windows Platform (UWP) with a New Database -> [!NOTE] -> Temporarily this tutorial uses EF Core 1.1. UWP has not been updated yet to support .NET Standard 2.0 which is required for compatibility with EF Core 2.0. Once it is, we will update the tutorial to use the new version. +-> [!NOTE] +-> This tutorial uses EF Core 2.0.1. EF Core 2.0.0 lacks some crucial bugfixes required for a good UWP experience. In this walkthrough, you will build a Universal Windows Platform (UWP) application that performs basic data access against a local SQLite database using Entity Framework. -> [!WARNING] -> **Avoid using anonymous types in LINQ queries on UWP**. Deploying a UWP application to the app store requires your application to be compiled with .NET Native. Queries with anonymous types have poor performance on .NET Native or may crash the application. +> [!IMPORTANT] +> **Consider avoiding anonymous types in LINQ queries on UWP**. Deploying a UWP application to the app store requires your application to be compiled with .NET Native. Queries with anonymous types have worse performance on .NET Native. -> [!TIP] +> [!TIP] > You can view this article's [sample](https://github.com/aspnet/EntityFramework.Docs/tree/master/samples/core/GetStarted/UWP/UWP.SQLite) on GitHub. ## Prerequisites The following items are required to complete this walkthrough: -* Windows 10 -* [Visual Studio 2017](https://www.visualstudio.com/downloads/) +* [Windows 10 Fall Creators Update](https://support.microsoft.com/en-us/help/4027667/windows-update-windows-10) (10.0.16299.0) + +* [.NET Core 2.0.0 SDK](https://www.microsoft.com/net/core) or later. + +* [Visual Studio 2017](https://www.visualstudio.com/downloads/) version 15.4 or later with the **Universal Windows Platform Development** workload. -* The latest version of [Windows 10 Developer Tools](https://dev.windows.com/downloads) +## Create a new model project -## Create a new project +> [!WARNING] +> Due to limitations in the way .NET Core tools interact with UWP projects the model needs to be placed in a non-UWP project to be able to run migrations commands in the Package Manager Console * Open Visual Studio * File > New > Project... -* From the left menu select Templates > Visual C# > Windows Universal +* From the left menu select Templates > Visual C# -* Select the **Blank App (Universal Windows)** project template +* Select the **Class Library (.NET Standard)** project template * Give the project a name and click **OK** -## Upgrade Microsoft.NETCore.UniversalWindowsPlatform - -Depending on your version of Visual Studio, the template may have generated your project with an old version of .NET Core for UWP. EF Core requires `Microsoft.NETCore.UniversalWindowsPlatform` version **5.2.2** or greater. - -* Tools > NuGet Package Manager > Package Manager Console - -* Run `Update-Package Microsoft.NETCore.UniversalWindowsPlatform –Version 5.2.2` - -> [!TIP] -> If you are using Visual Studio 2017, you can upgrade to the latest version of `Microsoft.NETCore.UniversalWindowsPlatform` and do not need to explicitly target `5.2.2`. - ## Install Entity Framework To use EF Core, install the package for the database provider(s) you want to target. This walkthrough uses SQLite. For a list of available providers see [Database Providers](../../providers/index.md). @@ -68,6 +61,8 @@ Later in this walkthrough we will also be using some Entity Framework Tools to m * Run `Install-Package Microsoft.EntityFrameworkCore.Tools` +* Edit the .csproj file and replace `netstandard2.0` with `netcoreapp2.0;netstandard2.0` + ## Create your model Now it's time to define a context and entity classes that make up your model. @@ -78,43 +73,21 @@ Now it's time to define a context and entity classes that make up your model. * Replace the contents of the file with the following code - -``` csharp -using Microsoft.EntityFrameworkCore; -using System.Collections.Generic; - -namespace EFGetStarted.UWP -{ - public class BloggingContext : DbContext - { - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - optionsBuilder.UseSqlite("Data Source=blogging.db"); - } - } - - public class Blog - { - public int BlogId { get; set; } - public string Url { get; set; } - - public List Posts { get; set; } - } - - public class Post - { - public int PostId { get; set; } - public string Title { get; set; } - public string Content { get; set; } - - public int BlogId { get; set; } - public Blog Blog { get; set; } - } -} -``` +[!code-csharp[Main](../../../../samples/core/GetStarted/UWP/UWP.Model/Model.cs)] + +## Create a new UWP project + +* Open Visual Studio + +* File > New > Project... + +* From the left menu select Templates > Visual C# > Windows Universal + +* Select the **Blank App (Universal Windows)** project template + +* Give the project a name and click **OK** + +* Set the target and minimum versions to at least `Windows 10 Fall Creators Update (10.0; build 16299.0)` ## Create your database @@ -122,6 +95,8 @@ Now that you have a model, you can use migrations to create a database for you. * Tools –> NuGet Package Manager –> Package Manager Console +* Select the model project as the Default project and set it as the startup project + * Run `Add-Migration MyFirstMigration` to scaffold a migration to create the initial set of tables for your model. Since we want the database to be created on the device that the app runs on, we will add some code to apply any pending migrations to the local database on application startup. The first time that the app runs, this will take care of creating the local database for us. @@ -130,31 +105,9 @@ Since we want the database to be created on the device that the app runs on, we * Add the highlighted using to the start of the file - -``` csharp -using Microsoft.EntityFrameworkCore; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -``` - * Add the highlighted code to apply any pending migrations - -``` csharp -public App() -{ - this.InitializeComponent(); - this.Suspending += OnSuspending; - - using (var db = new BloggingContext()) - { - db.Database.Migrate(); - } -} -``` +[!code-csharp[Main](../../../../samples/core/GetStarted/UWP/UWP.SQLite/App.xaml.cs?highlight=1,25-28)] > [!TIP] > If you make future changes to your model, you can use the `Add-Migration` command to scaffold a new migration to apply the corresponding changes to the database. Any pending migrations will be applied to the local database on each device when the application starts. @@ -169,33 +122,7 @@ You can now use your model to perform data access. * Add the page load handler and UI content highlighted below - -``` xaml - - - - - - - - - - - - - - - - -``` +[!code-xml[Main](../../../../samples/core/GetStarted/UWP/UWP.SQLite/MainPage.xaml?highlight=9,11-23)] Now we'll add code to wire up the UI with the database @@ -203,36 +130,7 @@ Now we'll add code to wire up the UI with the database * Add the highlighted code from the following listing - -``` csharp -public sealed partial class MainPage : Page -{ - public MainPage() - { - this.InitializeComponent(); - } - - private void Page_Loaded(object sender, RoutedEventArgs e) - { - using (var db = new BloggingContext()) - { - Blogs.ItemsSource = db.Blogs.ToList(); - } - } - - private void Add_Click(object sender, RoutedEventArgs e) - { - using (var db = new BloggingContext()) - { - var blog = new Blog { Url = NewBlogUrl.Text }; - db.Blogs.Add(blog); - db.SaveChanges(); - - Blogs.ItemsSource = db.Blogs.ToList(); - } - } -} -``` +[!code-csharp[Main](../../../../samples/core/GetStarted/UWP/UWP.SQLite/MainPage.xaml.cs?highlight=30-48)] You can now run the application to see it in action. @@ -248,6 +146,9 @@ You can now run the application to see it in action. ## Next steps +> [!TIP] +> `SaveChanges()` performance can be improved by implementing [`INotifyPropertyChanged`](https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx), [`INotifyPropertyChanging`](https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanging.aspx), [`INotifyCollectionChanged`](https://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged.aspx) in your entity types and using `ChangeTrackingStrategy.ChangingAndChangedNotifications`. + Tada! You now have a simple UWP app running Entity Framework. -Check out the numerous articles in this documentation to learn more about Entity Framework's features. +Check out other articles in this documentation to learn more about Entity Framework's features. diff --git a/entity-framework/core/get-started/uwp/index.md b/entity-framework/core/get-started/uwp/index.md index ab14dbe12e..4e40fe7f08 100644 --- a/entity-framework/core/get-started/uwp/index.md +++ b/entity-framework/core/get-started/uwp/index.md @@ -16,6 +16,3 @@ uid: core/get-started/uwp/index These 101 tutorials require no previous knowledge of Entity Framework Core or Visual Studio. They will take you step-by-step through creating a simple Universal Window Platform (UWP) application that queries and saves data from a database. You can find the UWP documentation at [developer.microsoft.com/windows/apps/develop](https://developer.microsoft.com/windows/apps/develop). - -> [!NOTE] -> These tutorials and the accompanying samples have been updated to use EF Core 2.0 (with the exception of the UWP tutorial, that still uses EF Core 1.1). However, in the majority of cases it should be possible to create applications that use previous releases, with minimal modification to the instructions. diff --git a/samples/core/DynamicModel/DynamicContext.cs b/samples/core/DynamicModel/DynamicContext.cs index 13294f93cb..1dff3743ec 100644 --- a/samples/core/DynamicModel/DynamicContext.cs +++ b/samples/core/DynamicModel/DynamicContext.cs @@ -5,7 +5,6 @@ namespace EFModeling.Samples.DynamicModel { #region Class - public class DynamicContext : DbContext { public bool? IgnoreIntProperty { get; set; } @@ -32,6 +31,5 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) } } } - #endregion } diff --git a/samples/core/DynamicModel/DynamicModelCacheKeyFactory.cs b/samples/core/DynamicModel/DynamicModelCacheKeyFactory.cs index 0ed5321036..657bdc3ab1 100644 --- a/samples/core/DynamicModel/DynamicModelCacheKeyFactory.cs +++ b/samples/core/DynamicModel/DynamicModelCacheKeyFactory.cs @@ -5,7 +5,6 @@ namespace EFModeling.Samples.DynamicModel { #region Class - public class DynamicModelCacheKeyFactory : IModelCacheKeyFactory { public object Create(DbContext context) @@ -17,6 +16,5 @@ public object Create(DbContext context) return context.GetType(); } } - #endregion } diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/Migrations/20160623234325_MyFirstMigration.Designer.cs b/samples/core/GetStarted/UWP/UWP.Model/Migrations/20171017204043_MyFirstMigration.Designer.cs similarity index 85% rename from samples/core/GetStarted/UWP/UWP.SQLite/Migrations/20160623234325_MyFirstMigration.Designer.cs rename to samples/core/GetStarted/UWP/UWP.Model/Migrations/20171017204043_MyFirstMigration.Designer.cs index 31b8c13456..122aaeeeec 100644 --- a/samples/core/GetStarted/UWP/UWP.SQLite/Migrations/20160623234325_MyFirstMigration.Designer.cs +++ b/samples/core/GetStarted/UWP/UWP.Model/Migrations/20171017204043_MyFirstMigration.Designer.cs @@ -1,20 +1,22 @@ -using System; +// using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; -using EFGetStarted.UWP; +using Microsoft.EntityFrameworkCore.Storage; +using System; namespace EFGetStarted.UWP.Migrations { [DbContext(typeof(BloggingContext))] - [Migration("20160623234325_MyFirstMigration")] + [Migration("20171017204043_MyFirstMigration")] partial class MyFirstMigration { protected override void BuildTargetModel(ModelBuilder modelBuilder) { +#pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "1.0.0-rtm-21431"); + .HasAnnotation("ProductVersion", "2.0.1"); modelBuilder.Entity("EFGetStarted.UWP.Blog", b => { @@ -53,6 +55,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasForeignKey("BlogId") .OnDelete(DeleteBehavior.Cascade); }); +#pragma warning restore 612, 618 } } } diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/Migrations/20160623234325_MyFirstMigration.cs b/samples/core/GetStarted/UWP/UWP.Model/Migrations/20171017204043_MyFirstMigration.cs similarity index 90% rename from samples/core/GetStarted/UWP/UWP.SQLite/Migrations/20160623234325_MyFirstMigration.cs rename to samples/core/GetStarted/UWP/UWP.Model/Migrations/20171017204043_MyFirstMigration.cs index 3f91b4ddcf..5678be2151 100644 --- a/samples/core/GetStarted/UWP/UWP.SQLite/Migrations/20160623234325_MyFirstMigration.cs +++ b/samples/core/GetStarted/UWP/UWP.Model/Migrations/20171017204043_MyFirstMigration.cs @@ -1,6 +1,6 @@ -using System; +using Microsoft.EntityFrameworkCore.Migrations; +using System; using System.Collections.Generic; -using Microsoft.EntityFrameworkCore.Migrations; namespace EFGetStarted.UWP.Migrations { @@ -13,7 +13,7 @@ protected override void Up(MigrationBuilder migrationBuilder) columns: table => new { BlogId = table.Column(nullable: false) - .Annotation("Autoincrement", true), + .Annotation("Sqlite:Autoincrement", true), Url = table.Column(nullable: true) }, constraints: table => @@ -26,7 +26,7 @@ protected override void Up(MigrationBuilder migrationBuilder) columns: table => new { PostId = table.Column(nullable: false) - .Annotation("Autoincrement", true), + .Annotation("Sqlite:Autoincrement", true), BlogId = table.Column(nullable: false), Content = table.Column(nullable: true), Title = table.Column(nullable: true) diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/Migrations/BloggingContextModelSnapshot.cs b/samples/core/GetStarted/UWP/UWP.Model/Migrations/BloggingContextModelSnapshot.cs similarity index 88% rename from samples/core/GetStarted/UWP/UWP.SQLite/Migrations/BloggingContextModelSnapshot.cs rename to samples/core/GetStarted/UWP/UWP.Model/Migrations/BloggingContextModelSnapshot.cs index 41a609d87c..8e32b31fb6 100644 --- a/samples/core/GetStarted/UWP/UWP.SQLite/Migrations/BloggingContextModelSnapshot.cs +++ b/samples/core/GetStarted/UWP/UWP.Model/Migrations/BloggingContextModelSnapshot.cs @@ -1,9 +1,10 @@ -using System; +// using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; -using EFGetStarted.UWP; +using Microsoft.EntityFrameworkCore.Storage; +using System; namespace EFGetStarted.UWP.Migrations { @@ -12,8 +13,9 @@ partial class BloggingContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { +#pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "1.0.0-rtm-21431"); + .HasAnnotation("ProductVersion", "2.0.1"); modelBuilder.Entity("EFGetStarted.UWP.Blog", b => { @@ -52,6 +54,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasForeignKey("BlogId") .OnDelete(DeleteBehavior.Cascade); }); +#pragma warning restore 612, 618 } } } diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/Model.cs b/samples/core/GetStarted/UWP/UWP.Model/Model.cs similarity index 95% rename from samples/core/GetStarted/UWP/UWP.SQLite/Model.cs rename to samples/core/GetStarted/UWP/UWP.Model/Model.cs index 59948b1707..e813630116 100644 --- a/samples/core/GetStarted/UWP/UWP.SQLite/Model.cs +++ b/samples/core/GetStarted/UWP/UWP.Model/Model.cs @@ -1,4 +1,4 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace EFGetStarted.UWP diff --git a/samples/core/GetStarted/UWP/UWP.Model/UWP.Model.csproj b/samples/core/GetStarted/UWP/UWP.Model/UWP.Model.csproj new file mode 100644 index 0000000000..3702749e0c --- /dev/null +++ b/samples/core/GetStarted/UWP/UWP.Model/UWP.Model.csproj @@ -0,0 +1,14 @@ + + + + netcoreapp2.0;netstandard2.0 + EFGetStarted.UWP + EFGetStarted.UWP.Model + + + + + + + + diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/App.xaml.cs b/samples/core/GetStarted/UWP/UWP.SQLite/App.xaml.cs index e56b33f36b..c0d04c6fc0 100644 --- a/samples/core/GetStarted/UWP/UWP.SQLite/App.xaml.cs +++ b/samples/core/GetStarted/UWP/UWP.SQLite/App.xaml.cs @@ -1,19 +1,9 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; -using Windows.Foundation; -using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; namespace EFGetStarted.UWP diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/UWP.SQLite.csproj b/samples/core/GetStarted/UWP/UWP.SQLite/UWP.SQLite.csproj index c6c93d043f..f4d0d84ffa 100644 --- a/samples/core/GetStarted/UWP/UWP.SQLite/UWP.SQLite.csproj +++ b/samples/core/GetStarted/UWP/UWP.SQLite/UWP.SQLite.csproj @@ -11,8 +11,8 @@ EFGetStarted.UWP en-US UAP - 10.0.14393.0 - 10.0.14393.0 + 10.0.16299.0 + 10.0.16299.0 14 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} @@ -88,10 +88,9 @@ true true - - - - + + PackageReference + App.xaml @@ -99,12 +98,6 @@ MainPage.xaml - - - 20160623234325_MyFirstMigration.cs - - - @@ -133,6 +126,17 @@ Designer + + + 6.0.1 + + + + + {f8b7fc64-1294-4a2b-b9d9-dc8419f2f489} + UWP.Model + + 14.0 diff --git a/samples/core/GetStarted/UWP/UWP.SQLite/project.json b/samples/core/GetStarted/UWP/UWP.SQLite/project.json deleted file mode 100644 index 6a5fd08fcc..0000000000 --- a/samples/core/GetStarted/UWP/UWP.SQLite/project.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "dependencies": { - "microsoft.entityframeworkcore.sqlite": "1.1.2", - "Microsoft.NETCore.UniversalWindowsPlatform": "5.4.0" - }, - "frameworks": { - "uap10.0.14393": {} - }, - "runtimes": { - "win10-arm": {}, - "win10-arm-aot": {}, - "win10-x86": {}, - "win10-x86-aot": {}, - "win10-x64": {}, - "win10-x64-aot": {} - } -} \ No newline at end of file diff --git a/samples/core/Samples.sln b/samples/core/Samples.sln index 753f42a4d2..d5532c6524 100644 --- a/samples/core/Samples.sln +++ b/samples/core/Samples.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 +VisualStudioVersion = 15.0.27004.2002 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UWP", "UWP", "{2D7D0958-8722-40E5-9BCB-A96B096E7534}" EndProject @@ -35,6 +35,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Conventions", "Modeling\Con EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UWP.SQLite", "GetStarted\UWP\UWP.SQLite\UWP.SQLite.csproj", "{1B8324AB-133F-4610-9C8C-ABAF080F8818}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UWP.Model", "GetStarted\UWP\UWP.Model\UWP.Model.csproj", "{F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject", "Miscellaneous\Testing\TestProject\TestProject.csproj", "{F4468750-9480-48E0-AA7A-DE84780AE1C2}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessLogic", "Miscellaneous\Testing\BusinessLogic\BusinessLogic.csproj", "{60B2C7AF-655F-4709-9E7F-7403E61F3A08}" @@ -57,7 +59,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EFGetStarted.AspNetCore.Exi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp.SQLite", "GetStarted\NetCore\ConsoleApp.SQLite\ConsoleApp.SQLite.csproj", "{A45E289C-136C-4B0D-A1F7-BA62504AA67E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamicModel", "DynamicModel\DynamicModel.csproj", "{70D00673-084C-40B7-B0F1-67498593F8EE}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamicModel", "DynamicModel\DynamicModel.csproj", "{70D00673-084C-40B7-B0F1-67498593F8EE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -136,6 +138,8 @@ Global {73E054DC-BF55-4717-A729-7FA53382E0EA}.Release|x86.ActiveCfg = Release|Any CPU {73E054DC-BF55-4717-A729-7FA53382E0EA}.Release|x86.Build.0 = Release|Any CPU {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|Any CPU.ActiveCfg = Debug|x86 + {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|Any CPU.Build.0 = Debug|x86 + {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|Any CPU.Deploy.0 = Debug|x86 {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|ARM.ActiveCfg = Debug|ARM {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|ARM.Build.0 = Debug|ARM {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|ARM.Deploy.0 = Debug|ARM @@ -146,6 +150,8 @@ Global {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|x86.Build.0 = Debug|x86 {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Debug|x86.Deploy.0 = Debug|x86 {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|Any CPU.ActiveCfg = Release|x86 + {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|Any CPU.Build.0 = Release|x86 + {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|Any CPU.Deploy.0 = Release|x86 {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|ARM.ActiveCfg = Release|ARM {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|ARM.Build.0 = Release|ARM {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|ARM.Deploy.0 = Release|ARM @@ -155,6 +161,22 @@ Global {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|x86.ActiveCfg = Release|x86 {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|x86.Build.0 = Release|x86 {1B8324AB-133F-4610-9C8C-ABAF080F8818}.Release|x86.Deploy.0 = Release|x86 + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|ARM.Build.0 = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|x64.ActiveCfg = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|x64.Build.0 = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|x86.ActiveCfg = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Debug|x86.Build.0 = Debug|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|Any CPU.Build.0 = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|ARM.ActiveCfg = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|ARM.Build.0 = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|x64.ActiveCfg = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|x64.Build.0 = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|x86.ActiveCfg = Release|Any CPU + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489}.Release|x86.Build.0 = Release|Any CPU {F4468750-9480-48E0-AA7A-DE84780AE1C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F4468750-9480-48E0-AA7A-DE84780AE1C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {F4468750-9480-48E0-AA7A-DE84780AE1C2}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -363,6 +385,7 @@ Global {20E1786B-FA14-4470-8B90-62A0C197E54D} = {CA5046EC-C894-4535-8190-A31F75FDEB96} {73E054DC-BF55-4717-A729-7FA53382E0EA} = {CA5046EC-C894-4535-8190-A31F75FDEB96} {1B8324AB-133F-4610-9C8C-ABAF080F8818} = {2D7D0958-8722-40E5-9BCB-A96B096E7534} + {F8B7FC64-1294-4A2B-B9D9-DC8419F2F489} = {2D7D0958-8722-40E5-9BCB-A96B096E7534} {F4468750-9480-48E0-AA7A-DE84780AE1C2} = {4E2B02EE-0C76-42D6-BA0A-337D7680A5D6} {60B2C7AF-655F-4709-9E7F-7403E61F3A08} = {4E2B02EE-0C76-42D6-BA0A-337D7680A5D6} {D3A5391D-9351-44D6-8122-2821C6E4BD62} = {851986F2-F49D-423A-8E60-1106EB6916F0}