浏览代码

Merge pull request #6 from xamarin/app-service-helpers

Add Azure Service Helpers
James Montemagno 9 年之前
父节点
当前提交
a86b75ba4c
共有 32 个文件被更改,包括 954 次插入681 次删除
  1. 1 0
      .gitignore
  2. 12 0
      HandsOnLab/Finish/DevDaysSpeakers.userprefs
  3. 6 2
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj
  4. 672 558
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/Resources/Resource.Designer.cs
  5. 9 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/app.config
  6. 2 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/packages.config
  7. 1 0
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.UWP/project.json
  8. 27 26
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.UWP/project.lock.json
  9. 6 2
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.iOS/DevDaysSpeakers.iOS.csproj
  10. 9 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.iOS/app.config
  11. 2 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.iOS/packages.config
  12. 9 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/App.cs
  13. 6 3
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/DevDaysSpeakers.csproj
  14. 1 2
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/Model/Speaker.cs
  15. 2 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml.cs
  16. 0 65
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/ViewModel/AzureStore.cs
  17. 8 8
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs
  18. 9 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/app.config
  19. 2 1
      HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/packages.config
  20. 120 1
      HandsOnLab/README.md
  21. 4 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj
  22. 5 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/app.config
  23. 1 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/packages.config
  24. 4 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/DevDaysSpeakers.iOS.csproj
  25. 5 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/app.config
  26. 1 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/packages.config
  27. 6 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/App.cs
  28. 2 2
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/DevDaysSpeakers.csproj
  29. 2 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml.cs
  30. 10 0
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs
  31. 9 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/app.config
  32. 1 1
      HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/packages.config

+ 1 - 0
.gitignore

@@ -12,6 +12,7 @@ TestResults
 *.suo
 *.user
 *.sln.docstates
+.vs/
 
 # Build results
 [Dd]ebug/

+ 12 - 0
HandsOnLab/Finish/DevDaysSpeakers.userprefs

@@ -0,0 +1,12 @@
+<Properties StartupItem="DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj" NuGet.AddPackagesDialog.IncludePrerelease="True">
+  <MonoDevelop.Ide.Workbench ActiveDocument="DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs">
+    <Files>
+      <File FileName="DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs" Line="50" Column="53" />
+    </Files>
+  </MonoDevelop.Ide.Workbench>
+  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhoneSimulator" />
+  <MonoDevelop.Ide.ItemProperties.DevDaysSpeakers.Droid PreferredExecutionTarget="Android.Nexus_6P_API_23" />
+  <MonoDevelop.Ide.DebuggingService.Breakpoints />
+  <MonoDevelop.Ide.DebuggingService.PinnedWatches />
+  <MonoDevelop.Ide.ItemProperties.DevDaysSpeakers.iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget.AED3FEC4-E2E0-4F48-8D76-3A7F4FBC4BB1" />
+</Properties>

+ 6 - 2
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj

@@ -48,6 +48,10 @@
     <AndroidLinkMode>SdkOnly</AndroidLinkMode>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Azure.Mobile, Version=1.0.6036.40637, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.1.0.4\lib\Azure.Mobile.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="FormsViewGroup, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Xamarin.Forms.2.3.0.107\lib\MonoAndroid10\FormsViewGroup.dll</HintPath>
       <Private>True</Private>
@@ -66,8 +70,8 @@
     </Reference>
     <Reference Include="Mono.Android" />
     <Reference Include="mscorlib" />
-    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Plugin.TextToSpeech, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">

文件差异内容过多而无法显示
+ 672 - 558
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/Resources/Resource.Designer.cs


+ 9 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/app.config

@@ -8,12 +8,20 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.WindowsAzure.Mobile" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.WindowsAzure.Mobile.SQLiteStore" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 2 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.Droid/packages.config

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AppService.Helpers" version="1.0.4" targetFramework="monoandroid60" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="monoandroid60" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="monoandroid60" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid60" />
   <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid60" />
   <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="monoandroid60" />
-  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="monoandroid60" />
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="monoandroid60" />
   <package id="SQLitePCL" version="3.8.7.2" targetFramework="monoandroid60" />
   <package id="Xam.Plugins.TextToSpeech" version="2.0.0" targetFramework="monoandroid60" />
   <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />

+ 1 - 0
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.UWP/project.json

@@ -6,6 +6,7 @@
     "Microsoft.Bcl.Build": "1.0.21",
     "Microsoft.Net.Http": "2.2.29",
     "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
+    "Newtonsoft.Json": "9.0.1",
     "SQLitePCL": "3.8.7.2",
     "Xam.Plugins.TextToSpeech": "2.0.0",
     "Xamarin.Forms": "2.3.0.107"

+ 27 - 26
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.UWP/project.lock.json

@@ -313,12 +313,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -2191,12 +2191,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -3915,12 +3915,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -5637,12 +5637,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -7361,12 +7361,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -9083,12 +9083,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -10807,12 +10807,12 @@
           "lib/dotnet/Microsoft.Win32.Primitives.dll": {}
         }
       },
-      "Newtonsoft.Json/6.0.4": {
+      "Newtonsoft.Json/9.0.1": {
         "compile": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         },
         "runtime": {
-          "lib/netcore45/Newtonsoft.Json.dll": {}
+          "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll": {}
         }
       },
       "SQLitePCL/3.8.7.2": {
@@ -13058,11 +13058,11 @@
         "ref/xamarinmac20/_._"
       ]
     },
-    "Newtonsoft.Json/6.0.4": {
-      "sha512": "FyQLmEpjsCrEP+znauLDGAi+h6i9YnaMkITlfIoiM4RYyX3nki306bTHsr/0okiIvIc7BJhQTbOAIZVocccFUw==",
+    "Newtonsoft.Json/9.0.1": {
+      "sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==",
       "type": "package",
       "files": [
-        "Newtonsoft.Json.6.0.4.nupkg.sha512",
+        "Newtonsoft.Json.9.0.1.nupkg.sha512",
         "Newtonsoft.Json.nuspec",
         "lib/net20/Newtonsoft.Json.dll",
         "lib/net20/Newtonsoft.Json.xml",
@@ -13072,8 +13072,8 @@
         "lib/net40/Newtonsoft.Json.xml",
         "lib/net45/Newtonsoft.Json.dll",
         "lib/net45/Newtonsoft.Json.xml",
-        "lib/netcore45/Newtonsoft.Json.dll",
-        "lib/netcore45/Newtonsoft.Json.xml",
+        "lib/netstandard1.0/Newtonsoft.Json.dll",
+        "lib/netstandard1.0/Newtonsoft.Json.xml",
         "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll",
         "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml",
         "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll",
@@ -15928,6 +15928,7 @@
       "Microsoft.Bcl.Build >= 1.0.21",
       "Microsoft.NETCore.UniversalWindowsPlatform >= 5.0.0",
       "Microsoft.Net.Http >= 2.2.29",
+      "Newtonsoft.Json >= 9.0.1",
       "SQLitePCL >= 3.8.7.2",
       "Xam.Plugins.TextToSpeech >= 2.0.0",
       "Xamarin.Forms >= 2.3.0.107"

+ 6 - 2
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.iOS/DevDaysSpeakers.iOS.csproj

@@ -117,6 +117,10 @@
     <InterfaceDefinition Include="Resources\LaunchScreen.storyboard" />
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="Azure.Mobile, Version=1.0.6036.40637, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.1.0.4\lib\Azure.Mobile.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Microsoft.WindowsAzure.Mobile, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.2.1.0\lib\Xamarin.iOS10\Microsoft.WindowsAzure.Mobile.dll</HintPath>
       <Private>True</Private>
@@ -129,8 +133,8 @@
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.SQLiteStore.2.1.0\lib\portable-win+net45+wp8+wpa81+monotouch+monoandroid\Microsoft.WindowsAzure.Mobile.SQLiteStore.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Plugin.TextToSpeech, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">

+ 9 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.iOS/app.config

@@ -8,12 +8,20 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.WindowsAzure.Mobile" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.WindowsAzure.Mobile.SQLiteStore" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 2 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers.iOS/packages.config

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AppService.Helpers" version="1.0.4" targetFramework="xamarinios10" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="xamarinios10" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="xamarinios10" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="xamarinios10" />
   <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="xamarinios10" />
   <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="xamarinios10" />
-  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="xamarinios10" />
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="xamarinios10" />
   <package id="SQLitePCL" version="3.8.7.2" targetFramework="xamarinios10" />
   <package id="Xam.Plugins.TextToSpeech" version="2.0.0" targetFramework="xamarinios10" />
   <package id="Xamarin.Forms" version="2.3.0.107" targetFramework="xamarinios10" />

+ 9 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/App.cs

@@ -1,23 +1,31 @@
 using DevDaysSpeakers.View;
+using AppServiceHelpers;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 
 using Xamarin.Forms;
+using AppServiceHelpers.Abstractions;
 
 namespace DevDaysSpeakers
 {
     public class App : Application
     {
+        public static IEasyMobileServiceClient AzureClient { get; set; }
         public App()
         {
+            AzureClient = EasyMobileServiceClient.Create();
+            AzureClient.Initialize("https://montemagnospeakers.azurewebsites.net");
+            AzureClient.RegisterTable<Model.Speaker>();
+            AzureClient.FinalizeSchema();
+
             // The root page of your application
             var content = new SpeakersPage();
 
             MainPage = new NavigationPage(content);
         }
-
+      
         protected override void OnStart()
         {
             // Handle when your app starts

+ 6 - 3
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/DevDaysSpeakers.csproj

@@ -38,7 +38,6 @@
     <Compile Include="App.cs" />
     <Compile Include="Model\Speaker.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ViewModel\AzureStore.cs" />
     <Compile Include="ViewModel\SpeakersViewModel.cs" />
     <Compile Include="View\DetailsPage.xaml.cs">
       <DependentUpon>DetailsPage.xaml</DependentUpon>
@@ -48,6 +47,10 @@
     </Compile>
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="Azure.Mobile, Version=1.0.6036.40637, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.1.0.4\lib\Azure.Mobile.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Microsoft.WindowsAzure.Mobile, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.2.1.0\lib\portable-win+net45+wp8+wpa81+monotouch+monoandroid\Microsoft.WindowsAzure.Mobile.dll</HintPath>
       <Private>True</Private>
@@ -56,8 +59,8 @@
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.SQLiteStore.2.1.0\lib\portable-win+net45+wp8+wpa81+monotouch+monoandroid\Microsoft.WindowsAzure.Mobile.SQLiteStore.dll</HintPath>
       <Private>True</Private>
     </Reference>
-    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Plugin.TextToSpeech, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">

+ 1 - 2
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/Model/Speaker.cs

@@ -6,9 +6,8 @@ using System.Threading.Tasks;
 
 namespace DevDaysSpeakers.Model
 {
-    public class Speaker
+    public class Speaker : AppServiceHelpers.Models.EntityData
     {
-        public string Id { get; set; }
         public string Name { get; set; }
         public string Description { get; set; }
         public string Website { get; set; }

+ 2 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml.cs

@@ -8,7 +8,8 @@ using Xamarin.Forms;
 
 using DevDaysSpeakers.Model;
 using DevDaysSpeakers.ViewModel;
-
+using AppServiceHelpers;
+using AppServiceHelpers.Abstractions;
 
 namespace DevDaysSpeakers.View
 {

+ 0 - 65
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/ViewModel/AzureStore.cs

@@ -1,65 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Microsoft.WindowsAzure.MobileServices;
-using Microsoft.WindowsAzure.MobileServices.Sync;
-using Microsoft.WindowsAzure.MobileServices.SQLiteStore;
-using DevDaysSpeakers.Model;
-using System.Diagnostics;
-
-namespace DevDaysSpeakers.ViewModel
-{
-    public class AzureStore
-    {
-        static AzureStore current;
-        public static AzureStore Current
-        {
-            get
-            {
-                if (current == null)
-                    current = new AzureStore();
-
-                return current;
-            }
-        }
-
-        MobileServiceClient MobileService { get; set; }
-        IMobileServiceSyncTable<Speaker> speakerTable;
-
-        public async Task Initialize()
-        {
-            if (MobileService != null)
-                return;
-
-            MobileService = new MobileServiceClient("https://montemagnospeakers.azurewebsites.net");
-
-            var store = new MobileServiceSQLiteStore("speakers.db");
-
-            store.DefineTable<Speaker>();
-
-            await MobileService.SyncContext.InitializeAsync(store);
-
-            speakerTable = MobileService.GetSyncTable<Speaker>();
-        }
-
-        public async Task<List<Speaker>> GetSpeakers()
-        {
-            await Initialize();
-
-            try
-            {
-                await speakerTable.PullAsync("allSpeakers", speakerTable.CreateQuery());
-            }
-            catch (Exception ex)
-            {
-                Debug.WriteLine(ex);
-            }
-
-            return await speakerTable.ToListAsync();
-        }
-
-    }
-}

+ 8 - 8
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs

@@ -11,22 +11,26 @@ using DevDaysSpeakers.Model;
 using System.Net.Http;
 using Newtonsoft.Json;
 using System.Collections.ObjectModel;
+using AppServiceHelpers.Abstractions;
 using System.Runtime.CompilerServices;
 
 namespace DevDaysSpeakers.ViewModel
 {
     public class SpeakersViewModel : INotifyPropertyChanged
     {
-
         public ObservableCollection<Speaker> Speakers { get; set; }
         public Command GetSpeakersCommand { get; set; }
 
+        ITableDataStore<Speaker> table;
         public SpeakersViewModel()
         {
+            table = App.AzureClient.Table<Speaker>();
+
             Speakers = new ObservableCollection<Speaker>();
             GetSpeakersCommand = new Command(
                 async () => await GetSpeakers(),
                 () => !IsBusy);
+
         }
 
         bool busy;
@@ -54,13 +58,12 @@ namespace DevDaysSpeakers.ViewModel
             try
             {
                 IsBusy = true;
-
-                var items = await AzureStore.Current.GetSpeakers();
+             
+                var items = await table.GetItemsAsync();
 
                 Speakers.Clear();
                 foreach (var item in items)
                     Speakers.Add(item);
-
             }
             catch (Exception ex)
             {
@@ -76,9 +79,6 @@ namespace DevDaysSpeakers.ViewModel
                 await Application.Current.MainPage.DisplayAlert("Error!", error.Message, "OK");
         }
 
-
-
-
         public event PropertyChangedEventHandler PropertyChanged;
 
         void OnPropertyChanged([CallerMemberName] string name = null)
@@ -91,4 +91,4 @@ namespace DevDaysSpeakers.ViewModel
             changed.Invoke(this, new PropertyChangedEventArgs(name));
         }
     }
-}
+}

+ 9 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/app.config

@@ -4,7 +4,15 @@
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.WindowsAzure.Mobile" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.WindowsAzure.Mobile.SQLiteStore" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
       </dependentAssembly>
     </assemblyBinding>
   </runtime>

+ 2 - 1
HandsOnLab/Finish/DevDaysSpeakers/DevDaysSpeakers/packages.config

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AppService.Helpers" version="1.0.4" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="portable45-net45+win8+wp8+wpa81" />
-  <package id="Newtonsoft.Json" version="6.0.4" targetFramework="portable45-net45+win8+wp8+wpa81" />
+  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="SQLitePCL" version="3.8.7.2" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Xam.Plugins.TextToSpeech" version="2.0.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Xamarin.Forms" version="2.3.0.107" targetFramework="portable45-net45+win8+wp8+wpa81" />

+ 120 - 1
HandsOnLab/README.md

@@ -370,8 +370,17 @@ Simply set the DevDaysSpeakers.Droid as the startup project and select a simulat
 
 #### Windows 10
 
+Ensure that you have the SQLite extension installed for UWP apps:
+
+Go to **Tools->Extensions & Updates**
+
+Under Online search for *SQLite* and ensure that you have SQlite for Univeral Windows Platform installed (current version 3.13.0)
+
+![Sqlite](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/ace42b1e-edd8-4e65-92e7-f638b83ad533/2016-07-11_1605.png)
+
 Simply set the DevDaysSpeakers.UWP as the startup project and select debug to **Local Machine**.
 
+
 ## Details
 
 Now, let's do some navigation and display some Details. Let's upen up the code behind for **SpeakersPage.xaml** called **SpeakersPage.xaml.cs**.
@@ -473,7 +482,117 @@ Now, we should be all set to compile, and run just like before!
 
 ## Connect to Azure Mobile Apps
 
-//Coming soon
+Of course being able grab data from a RESTful end point is great, but what about a full backed, this is where Azure Mobile Apps comes in. Let's upgrade our application to use Azure Mobile Apps backend.
+
+Head to http://portal.azure.com and register for an account.
+
+Once you are in the portal select the **+ New** button and search for **mobile apps** and you will see the results as follows, and we want to select **Mobile Apps Quickstart**
+
+![Quickstart](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/c2894f06-c688-43ad-b812-6384b34c5cb0/2016-07-11_1546.png)
+
+The Quickstart blade will open, select **Create**
+
+![Create quickstart](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/344d6fc2-1771-4cb7-a49a-6bd9e9579ba6/2016-07-11_1548.png)
+
+This will open a settings blade with 4 settings:
+
+**App name**
+
+This is a unique name for the app that you will need when you configure the backend in your app. You may want to do somethign like *yourlastnamespeakers* or somethign like this.
+
+**Subscription**
+Select a subscription or creat a pay as you go (this service will not cost you anything)
+
+**Resource Group**
+Select *Create new* and call it **DevDaysSpeakers**
+
+A resource group is a group of related services that can be easily deleted later.
+
+**App Service plan/Location**
+Click this field and select **Create New**, give it a unique name, select a location (I am West US for intstance) and then select the F1 Free tier:
+
+![service plan](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/7559d3f1-7ee6-490f-ac5e-d1028feba88f/2016-07-11_1553.png)
+
+Finally check **Pin to dashboard** and click create:
+
+![](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/a844c283-550c-4647-82d3-32d8bda4282f/2016-07-11_1554.png)
+
+This will take about 3-5 minutes to setup, so let's head back to the code!
+
+
+### Update App.cs
+We will be using the Azure Helpers Library that we saw earlier in the presentations to simplify the development with just a few lines of code.
+
+In the DevDaysSpeakers/App.cs file let's add a static property above the constructor for the Azure Client:
+
+```csharp
+public static IEasyMobileServiceClient AzureClient { get; set; }
+```
+
+In the constructor simply add the following lines of code to create the client and register the table:
+
+```csharp
+AzureClient = EasyMobileServiceClient.Create();
+AzureClient.Initialize("https://YOUR-APP-NAME-HERE.azurewebsites.net");
+AzureClient.RegisterTable<Model.Speaker>();
+AzureClient.FinalizeSchema();
+```
+
+Be sure to udpate YOUR-APP-NAME-HERE with the app name you just specified.
+
+
+### Update SpeakersViewModel.cs
+
+Back in the ViewModel, we can add another private property to get a reference for the table. Above the constructor add:
+
+```csharp
+ITableDataStore<Speaker> table;
+```
+
+Inside of the constructor use the statis AzureClient to get the table:
+
+```csharp
+table = App.AzureClient.Table<Speaker>();
+```
+
+#### Update async Task GetSpeakers()
+Now, instead of calling the HttpClient to get a string, let's query the Table:
+
+Change the *try* block of code to:
+
+```csharp
+ try
+{
+    IsBusy = true;
+    
+    var items = await table.GetItemsAsync();
+
+    Speakers.Clear();
+    foreach (var item in items)
+        Speakers.Add(item);
+}
+```
+
+Now, we have implemented all of the code we need in our app! Amazing isn't it! Just 7 lines of code!
+
+Let's head back to the azure portal and populate the database.
+
+When the Quickstart finished you should see the following screen, or can go to it from tapping the pin on the dashboard:
+
+![Quickstart](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/71ad3e06-dcc5-4c8b-8ebd-93b2df9ea2b2/2016-07-11_1601.png)
+
+Under **Features** select **Easy Tables**
+
+It will have created a todoitem, which you should see, but we can create a new table and upload a default set of data by selecting **Add from CSV** from the menu.
+
+Ensure that you have downloaded this repo and have the **Speaker.csv** file that is in this folder.
+
+Select the file and it will add a new table name and find the fields that we have listed. Then Hit Start Upload.
+
+![upload data](http://content.screencast.com/users/JamesMontemagno/folders/Jing/media/eea2bca6-2dd0-45b3-99af-699d14a0113c/2016-07-11_1603.png)
+
+Now you can re-run your application and get data from Azure!
+
 
 ## Bonus
 

+ 4 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/DevDaysSpeakers.Droid.csproj

@@ -48,6 +48,10 @@
     <AndroidLinkMode>SdkOnly</AndroidLinkMode>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Azure.Mobile, Version=1.0.6036.40637, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.1.0.4\lib\Azure.Mobile.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="FormsViewGroup, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Xamarin.Forms.2.3.0.107\lib\MonoAndroid10\FormsViewGroup.dll</HintPath>
       <Private>True</Private>

+ 5 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/app.config

@@ -8,7 +8,7 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.WindowsAzure.Mobile" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -18,6 +18,10 @@
         <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.WindowsAzure.Mobile.SQLiteStore" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 1 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.Droid/packages.config

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AppService.Helpers" version="1.0.4" targetFramework="monoandroid60" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="monoandroid60" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="monoandroid60" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid60" />

+ 4 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/DevDaysSpeakers.iOS.csproj

@@ -117,6 +117,10 @@
     <InterfaceDefinition Include="Resources\LaunchScreen.storyboard" />
   </ItemGroup>
   <ItemGroup>
+    <Reference Include="Azure.Mobile, Version=1.0.6036.40637, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.1.0.4\lib\Azure.Mobile.dll</HintPath>
+      <Private>True</Private>
+    </Reference>
     <Reference Include="Microsoft.WindowsAzure.Mobile, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Microsoft.Azure.Mobile.Client.2.1.0\lib\Xamarin.iOS10\Microsoft.WindowsAzure.Mobile.dll</HintPath>
       <Private>True</Private>

+ 5 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/app.config

@@ -8,7 +8,7 @@
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.WindowsAzure.Mobile" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -18,6 +18,10 @@
         <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
       </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.WindowsAzure.Mobile.SQLiteStore" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
     </assemblyBinding>
   </runtime>
 </configuration>

+ 1 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers.iOS/packages.config

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
+  <package id="AppService.Helpers" version="1.0.4" targetFramework="xamarinios10" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="xamarinios10" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="xamarinios10" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="xamarinios10" />

+ 6 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/App.cs

@@ -1,6 +1,12 @@
 using DevDaysSpeakers.View;
+using AppServiceHelpers;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
 
 using Xamarin.Forms;
+using AppServiceHelpers.Abstractions;
 
 namespace DevDaysSpeakers
 {

+ 2 - 2
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/DevDaysSpeakers.csproj

@@ -47,8 +47,8 @@
     </Compile>
   </ItemGroup>
   <ItemGroup>
-    <Reference Include="Azure.Mobile.Forms, Version=1.0.6025.25770, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\..\packages\AppService.Helpers.Forms.1.0.1\lib\Azure.Mobile.Forms.dll</HintPath>
+    <Reference Include="Azure.Mobile, Version=1.0.6036.40637, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\AppService.Helpers.1.0.4\lib\Azure.Mobile.dll</HintPath>
       <Private>True</Private>
     </Reference>
     <Reference Include="Microsoft.WindowsAzure.Mobile, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+ 2 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/View/SpeakersPage.xaml.cs

@@ -8,6 +8,8 @@ using Xamarin.Forms;
 
 using DevDaysSpeakers.Model;
 using DevDaysSpeakers.ViewModel;
+using AppServiceHelpers;
+using AppServiceHelpers.Abstractions;
 
 
 namespace DevDaysSpeakers.View

+ 10 - 0
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/ViewModel/SpeakersViewModel.cs

@@ -1,9 +1,19 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
+using Xamarin.Forms;
+using DevDaysSpeakers.Model;
+using System.Net.Http;
+using Newtonsoft.Json;
+using System.Collections.ObjectModel;
+using AppServiceHelpers.Abstractions;
+using System.Runtime.CompilerServices;
+
 namespace DevDaysSpeakers.ViewModel
 {
     public class SpeakersViewModel

+ 9 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/app.config

@@ -4,7 +4,15 @@
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="Microsoft.WindowsAzure.Mobile" publicKeyToken="31bf3856ad364e35" culture="neutral" />
-        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="Microsoft.WindowsAzure.Mobile.SQLiteStore" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
       </dependentAssembly>
     </assemblyBinding>
   </runtime>

+ 1 - 1
HandsOnLab/Start/DevDaysSpeakers/DevDaysSpeakers/packages.config

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="AppService.Helpers.Forms" version="1.0.1" targetFramework="portable45-net45+win8+wp8+wpa81" />
+  <package id="AppService.Helpers" version="1.0.4" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Azure.Mobile.Client" version="2.1.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Azure.Mobile.Client.SQLiteStore" version="2.1.0" targetFramework="portable45-net45+win8+wp8+wpa81" />
   <package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable45-net45+win8+wp8+wpa81" />

部分文件因为文件数量过多而无法显示