[mapguide-commits] r8848 - in sandbox/jng/aspnet50: . UnitTest/WebTier UnitTest/WebTier/Dnx UnitTest/WebTier/Dnx/src UnitTest/WebTier/Dnx/src/TestCommon UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests UnitTest/WebTier/Dnx/src/TestCommon/FeatureService UnitTest/WebTier/Dnx/src/TestCommon/MapLayer UnitTest/WebTier/Dnx/src/TestCommon/Properties UnitTest/WebTier/Dnx/src/TestCommon/ResourceService UnitTest/WebTier/Dnx/src/TestMapGuide UnitTest/WebTier/Dnx/src/TestMapGuide/Properties UnitTest/WebTier/Dnx/src/TestMapGuideApi UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests UnitTest/WebTier/Dnx/src/TestMapGuideApi/MappingService UnitTest/WebTier/Dnx/src/TestMapGuideApi/Properties UnitTest/WebTier/Dnx/src/TestMapGuideApi/RenderingService UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout UnitTest/WebTier/Dnx/src/TestRunner UnitTest/Web Tier/Dnx/src/TestRunner/Properties UnitTest/WebTier/DotNet Web/src/MapGuideDotNetCoreApi Web/src/MapGuideDotNetCoreApi/Custom Web/src/MapGuideDotNetCoreApi/wrapper Web/src/MapGuideDotNetCoreApi/wrapper/custom

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Dec 3 07:13:52 PST 2015


Author: jng
Date: 2015-12-03 07:13:52 -0800 (Thu, 03 Dec 2015)
New Revision: 8848

Added:
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/Dnx.sln
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/global.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ApiTypes.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Assert.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonUtility.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ByteReaderTest.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/CollectionTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ConvenienceTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/PropertiesTest.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/FeatureServiceOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutorCollection.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestLogger.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/MapLayerOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/PlatformApiTestExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Properties/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Properties/AssemblyInfo.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/ResourceServiceOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.Designer.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.resx
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Sqlite.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestCommon.xproj
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestDataRoot.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutionRun.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutorBase.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestResult.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/UnitTestException.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.lock.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Program.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Properties/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Properties/AssemblyInfo.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/TestMapGuide.xproj
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.lock.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/DrawingServiceOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/CollectionTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/MapTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/RenderingServiceTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/ResourceServiceTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTestExecutorCollection.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTests.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MappingService/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MappingService/MappingServiceOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Properties/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Properties/AssemblyInfo.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/RenderingService/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/RenderingService/RenderingServiceOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.Designer.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.resx
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/ServerAdminOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/SiteServiceOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/TestMapGuideApi.xproj
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/Operations.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/WebLayoutOperationExecutor.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.lock.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Program.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/AssemblyInfo.cs
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/launchSettings.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/TestRunner.xproj
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.json
   sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.lock.json
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgMapPlotCollection
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgPropertyCollection
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgStringCollection
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/DnxCoreShims.cs
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/EntryPoint.cs
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/ManagedException.cs
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/project.json
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/runtimes/
Removed:
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/DnxCoreShims.cs
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/EntryPoint.cs
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/ManagedException.cs
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgColor
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/project.json
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/runtimes/
Modified:
   sandbox/jng/aspnet50/UnitTest/WebTier/DotNet/
   sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/DotNetCoreApi.vcxproj
   sandbox/jng/aspnet50/build.bat
Log:
- Move .net core wrapper project one level down so that its project.json doesn't clash with the vcxproj file. This happened after updating Visual Studio 2015 to Update 1, where building the SWIG glue library somehow tried to build the DNX class library because it found the project.json file inside
- Update build.bat to collect the wrapper source files from this new location
- Add missing .net class augmentations
- Add first cut of DNX-based .net test runner. Tests do not fully pass at the moment and this is not usable with existing MapGuide nuget packages if targeting the full .net framework


Property changes on: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx
___________________________________________________________________
Added: svn:ignore
   + artifacts
.vs


Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/Dnx.sln
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/Dnx.sln	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/Dnx.sln	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,46 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.24720.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2531ADAC-3A0B-4951-A1A6-DC9EA9F4ECEB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{724ED7AA-2728-4598-8D46-3FB8933E1822}"
+	ProjectSection(SolutionItems) = preProject
+		global.json = global.json
+	EndProjectSection
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "TestCommon", "src\TestCommon\TestCommon.xproj", "{75850376-F5CC-48E2-A527-79C9613A04DA}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "TestMapGuideApi", "src\TestMapGuideApi\TestMapGuideApi.xproj", "{B1F5B09F-FEBF-436F-8951-D315B603BBF4}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "TestRunner", "src\TestRunner\TestRunner.xproj", "{4DCFCFDB-3698-45B6-908E-19DA1CFF56FD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{75850376-F5CC-48E2-A527-79C9613A04DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{75850376-F5CC-48E2-A527-79C9613A04DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{75850376-F5CC-48E2-A527-79C9613A04DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{75850376-F5CC-48E2-A527-79C9613A04DA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B1F5B09F-FEBF-436F-8951-D315B603BBF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B1F5B09F-FEBF-436F-8951-D315B603BBF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B1F5B09F-FEBF-436F-8951-D315B603BBF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B1F5B09F-FEBF-436F-8951-D315B603BBF4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4DCFCFDB-3698-45B6-908E-19DA1CFF56FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4DCFCFDB-3698-45B6-908E-19DA1CFF56FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4DCFCFDB-3698-45B6-908E-19DA1CFF56FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4DCFCFDB-3698-45B6-908E-19DA1CFF56FD}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{75850376-F5CC-48E2-A527-79C9613A04DA} = {2531ADAC-3A0B-4951-A1A6-DC9EA9F4ECEB}
+		{B1F5B09F-FEBF-436F-8951-D315B603BBF4} = {2531ADAC-3A0B-4951-A1A6-DC9EA9F4ECEB}
+		{4DCFCFDB-3698-45B6-908E-19DA1CFF56FD} = {2531ADAC-3A0B-4951-A1A6-DC9EA9F4ECEB}
+	EndGlobalSection
+EndGlobal

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/global.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/global.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/global.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,6 @@
+{
+  "projects": [ "src", "test" ],
+  "sdk": {
+    "version": "1.0.0-rc1-update1"
+  }
+}


Property changes on: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon
___________________________________________________________________
Added: svn:ignore
   + TestCommon.xproj.user


Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ApiTypes.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ApiTypes.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ApiTypes.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    public class ApiTypes
+    {
+        public const string Platform = "Api";
+        public const string Http = "Http";
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Assert.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Assert.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Assert.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+#if !DNXCORE50
+    [Serializable]
+#endif
+    public class AssertException : Exception
+    {
+        public AssertException() { }
+        public AssertException(string message) : base(message) { }
+        public AssertException(string message, Exception inner) : base(message, inner) { }
+#if !DNXCORE50
+        protected AssertException(
+          System.Runtime.Serialization.SerializationInfo info,
+          System.Runtime.Serialization.StreamingContext context)
+            : base(info, context)
+        { }
+#endif
+    }
+
+    public class Assert
+    {
+        public static void AreBytesEqual(byte[] expected, byte[] actual)
+        {
+            byte[] a = expected;
+            byte[] b = actual;
+            if (a.Length != b.Length)
+                throw new AssertException("Expected byte array size of " + a.Length + ", got size of: " + b.Length);
+
+            for (int i = 0; i < a.Length; i++)
+            {
+                if (a[i] != b[i])
+                    throw new AssertException("Byte number " + (i + 1) + " in expected byte array does not match byte in actual byte array");
+            }
+        }
+
+        public static void AreEqual<T>(T expected, T actual)
+        {
+            if (typeof(T) == typeof(byte[]))
+            {
+                AreBytesEqual(expected as byte[], actual as byte[]);
+            }
+            else if (!EqualityComparer<T>.Default.Equals(expected, actual))
+                throw new AssertException("Expected: " + expected + ", got: " + actual);
+        }
+
+        public static void Greater<T>(T value, T against) where T : IComparable
+        {
+            if (value.CompareTo(against) <= 0)
+                throw new AssertException(value + " is not greater than " + against);
+        }
+
+        public static void IsNull(object obj)
+        {
+            if (obj != null)
+                throw new AssertException("Reference is not null");
+        }
+
+        public static void IsNotNull(object obj)
+        {
+            if (obj == null)
+                throw new AssertException("Reference is null");
+        }
+
+        public static void IsTrue(bool condition)
+        {
+            if (!condition)
+                throw new AssertException("Condition evaluated to false. Expected: true");
+        }
+
+        public static void IsFalse(bool condition)
+        {
+            if (condition)
+                throw new AssertException("Condition evaluated to true. Expected: false");
+        }
+
+        public static void IsNaN(double value)
+        {
+            if (!double.IsNaN(value))
+                throw new AssertException("Double is a number. Expected: NaN");
+        }
+
+        public static void Fail(string msg)
+        {
+            throw new AssertException(msg);
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,62 @@
+using System;
+using System.Reflection;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    //Defines tests outside of the SQLite-based test suite
+
+    public interface IExternalTest
+    {
+        void Execute(IPlatformFactory factory, ITestLogger logger);
+    }
+
+    public interface IPlatformFactory
+    {
+        MgService CreateService(int serviceType);
+        MgMapBase CreateMap(MgResourceIdentifier mapDefinition);
+        MgMapBase CreateMap(string coordSys, MgEnvelope env, string name);
+        MgLayerBase CreateLayer(MgResourceIdentifier resId);
+    }
+
+    public class CommonTests
+    {
+        public static int Execute(IPlatformFactory factory, ITestLogger logger, ref int testsRun)
+        {
+            int failures = 0;
+            var types = typeof(IPlatformFactory).GetTypeInfo().Assembly.GetTypes();
+            foreach (var type in types)
+            {
+                if (typeof(IExternalTest).IsAssignableFrom(type) && type.GetTypeInfo().IsClass)
+                {
+                    var test = (IExternalTest)Activator.CreateInstance(type);
+                    try
+                    {
+                        logger.WriteLine("****** Executing platform test: " + type.Name + " *********");
+                        Console.WriteLine("Executing external platform test: " + type.Name);
+                        test.Execute(factory, logger);
+                    }
+                    catch (AssertException ex)
+                    {
+                        logger.WriteLine("Assertion failure: " + ex.Message);
+                        Console.WriteLine("Assertion failure: " + ex.Message);
+                        failures++;
+                    }
+                    catch (Exception ex)
+                    {
+                        logger.WriteLine("General failure: " + ex.ToString());
+                        Console.WriteLine("General failure: " + ex.ToString());
+                        failures++;
+                    }
+                    finally
+                    {
+                        testsRun++;
+                    }
+                }
+            }
+            return failures;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonUtility.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonUtility.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/CommonUtility.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,749 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using Microsoft.Extensions.PlatformAbstractions;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    /// <summary>
+    /// Extension methods for SqliteVm
+    /// </summary>
+    public static class SqliteDbExtensions
+    {
+        /*
+        public static int Prepare(this SqliteVm vm, string sql, params object[] args)
+        {
+            string formattedSql = string.Format(sql, args);
+            return vm.Prepare(formattedSql);
+        }
+        */
+        public static int Execute(this SqliteVm vm, string sql, params object[] args)
+        {
+            string formattedSql = string.Format(sql, args);
+            return vm.Execute(formattedSql);
+        }
+
+        public static bool ReadParameterValue(this SqliteVm vm, int paramSetId, string paramName, NameValueCollection result, bool bIsPath = false)
+        {
+            int stat = vm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"{1}\"", paramSetId, paramName);
+            if (stat == Sqlite.Row)
+            {
+                string str = vm.GetString("ParamValue");
+                if (bIsPath)
+                {
+                    str = CommonUtility.GetPath(str);
+                }
+                result.Add(paramName, str);
+                return true;
+            }
+            return false;
+        }
+
+        public static bool ReadParameterValue(this SqliteVm vm, string paramName, NameValueCollection result)
+        {
+            int stat = vm.Execute("Select ParamValue from Params WHERE ParamName=\"{0}\"", paramName);
+            if (stat == Sqlite.Row)
+            {
+                result.Add(paramName, vm.GetString("ParamValue"));
+                return true;
+            }
+            return false;
+        }
+
+        public static bool ReadCommonParameterValue(this SqliteVm vm, string paramName, NameValueCollection result)
+        {
+            int stat = vm.Execute("Select ParamValue from CommonParams WHERE ParamName=\"{0}\"", paramName);
+            if (stat == Sqlite.Row)
+            {
+                result.Add(paramName, vm.GetString("ParamValue"));
+                return true;
+            }
+            return false;
+        }
+    }
+
+    /// <summary>
+    /// Common utility methods
+    /// </summary>
+    public class CommonUtility
+    {
+        public static NameValueCollection SetCommonParams(int paramSet, SqliteDb db)
+        {
+            NameValueCollection result = null;
+            var vm = new SqliteVm(db, false);
+            try
+            {
+                result = new NameValueCollection();
+
+                vm.ReadParameterValue(paramSet, "OPERATION", result);
+                vm.ReadCommonParameterValue("VERSION", result);
+                vm.ReadCommonParameterValue("CREDENTIALS", result);
+                vm.ReadCommonParameterValue("LOCALE", result);
+
+                vm = null;
+            }
+            catch (MgException ex)
+            {
+                throw new UnitTestException(string.Format("Exception from MapGuide:\n{0}", ex.GetDetails()));
+            }
+            catch (Exception ex)
+            {
+                try
+                {
+                    vm = null;
+                    vm = new SqliteVm(db, true);
+                    vm.ReadParameterValue("VERSION", result);
+                    vm.ReadParameterValue("CREDENTIALS", result);
+                    vm.ReadParameterValue("LOCALE", result);
+                }
+                catch (Exception ex2)
+                {
+
+                }
+            }
+            return result;
+        }
+
+        public static MgByteReader GetByteReaderFromPath(string path, bool bCheck = true)
+        {
+            //Our DNX root is 2 levels deeper, so fix any input paths that expect the original depth
+            path = path?.Replace("../../TestData", TestDataRoot.Path) ?? string.Empty;
+
+            if (bCheck)
+            {
+                if (File.Exists(path))
+                {
+                    MgByteSource source = new MgByteSource(path);
+                    MgByteReader reader = source.GetReader();
+                    return reader;
+                }
+                return null;
+            }
+            else
+            {
+                MgByteSource source = new MgByteSource(path);
+                MgByteReader reader = source.GetReader();
+                return reader;
+            }
+        }
+
+        public static string GetDbPath(string dumpFileName)
+        {
+            var db = new SqliteDb();
+            var dbPath = dumpFileName.Replace(".dump", ".db");
+            var dbName = CommonUtility.GetPath(dbPath);
+
+            if (!File.Exists(dumpFileName) && !File.Exists(dbName))
+            {
+                throw new UnitTestException(string.Format("Error: Dump file {0} not found. Unable to create database file", dumpFileName));
+            }
+            else if (!File.Exists(dbName))
+            {
+                db.GenerateDatabase(dumpFileName, dbName);
+            }
+            else if (File.Exists(dumpFileName) && File.GetLastWriteTimeUtc(dumpFileName) > File.GetLastWriteTimeUtc(dbName))
+            {
+                try
+                {
+                    File.Delete(dbName);
+                    db.GenerateDatabase(dumpFileName, dbName);
+                }
+                catch
+                {
+                    throw new UnitTestException(string.Format("Unable to delete database file {0}. The file is either in use or is read-only. The database has not been updated", dbName));
+                }
+            }
+
+            return dbPath;
+        }
+
+        public static string GetPath(string dbPath)
+        {
+            if (Path.IsPathRooted(dbPath))
+                return dbPath.Replace("\\", "/");
+            else
+                return Path.Combine(GetAssemblyPath(), dbPath).Replace("\\", "/");
+        }
+
+        private static string GetAssemblyPath()
+        {
+            return PlatformServices.Default.Application.ApplicationBasePath;
+        }
+
+        public static MgStringCollection StringToMgStringCollection(string str)
+        {
+            try
+            {
+                MgStringCollection coll = new MgStringCollection();
+                string[] tokens = str.Split(',');
+                foreach (var token in tokens)
+                {
+                    coll.Add(token);
+                }
+                return coll;
+            }
+            catch (MgException ex)
+            {
+                throw new UnitTestException(string.Format("Exception from MapGuide:\n{0}", ex.GetDetails()));
+            }
+        }
+
+        public static string MgStringCollectionToString(MgStringCollection coll)
+        {
+            try
+            {
+                //Sigh, we're too smart for our own good. Yes, the trailing comma
+                //should be there!
+                StringBuilder sb = new StringBuilder();
+                for (int i = 0; i < coll.GetCount(); i++)
+                {
+                    sb.Append(coll.GetItem(i));
+                    sb.Append(",");
+                }
+                return sb.ToString();
+
+                /*
+                List<string> items = new List<string>();
+                for (int i = 0; i < coll.GetCount(); i++)
+                {
+                    items.Add(coll.GetItem(i));
+                }
+                return string.Join(",", items.ToArray());
+                 */
+            }
+            catch (MgException ex)
+            {
+                throw new UnitTestException(string.Format("Exception from MapGuide:\n{0}", ex.GetDetails()));
+            }
+        }
+
+        public static string BooleanToString(bool b)
+        {
+            return b ? "True" : "False";
+        }
+
+        public static string MgEnvelopeToString(MgEnvelope env)
+        {
+            try
+            {
+                var ll = env.GetLowerLeftCoordinate();
+                var ur = env.GetUpperRightCoordinate();
+                return string.Format(CultureInfo.InvariantCulture,
+                    "({0}:{1})-({2}:{3})",
+                    ll.GetX(),
+                    ll.GetY(),
+                    ur.GetX(),
+                    ur.GetY());
+            }
+            catch (MgException ex)
+            {
+                throw new UnitTestException(string.Format("Exception from MapGuide:\n{0}", ex.GetDetails()));
+            }
+        }
+
+        public static string MgPointToString(MgPoint pt)
+        {
+            try
+            {
+                var coord = pt.GetCoordinate();
+                return string.Format(CultureInfo.InvariantCulture,
+                    "({0}:{1})",
+                    coord.GetX(),
+                    coord.GetY());
+            }
+            catch (MgException ex)
+            {
+                throw new UnitTestException(string.Format("Exception from MapGuide:\n{0}", ex.GetDetails()));
+            }
+        }
+
+        public static string GetExtension(string name)
+        {
+            if (name.LastIndexOf(".") >= 0)
+            {
+                return name.Substring(name.LastIndexOf(".") + 1);
+            }
+            else
+            {
+                if (name == "MG_USER_CREDENTIALS")
+                    return "txt";
+                else
+                    return "bin";
+            }
+        }
+
+        public static string GetMimeType(string extension)
+        {
+            switch (extension)
+            {
+                case "agf":
+                    return "application/agf";
+                case "bin":
+                    return "application/octet-stream";
+                case "dwf":
+                    return "model/vnd.dwf";
+                case "jpg":
+                case "jpeg":
+                    return "image/jpeg";
+                case "png":
+                    return "image/png";
+                case "tif":
+                case "tiff":
+                    return "image/tiff";
+                case "html":
+                    return "text/html";
+                case "txt":
+                    return "text/plain";
+                case "xml":
+                    return "text/xml";
+                default:
+                    return "application/octet-stream";
+            }
+        }
+
+        public static object SpecialDataHandling(string operation, object resultData, string mimeType)
+        {
+            object res = resultData;
+            switch (operation)
+            {
+                case "ENUMERATERESOURCES":
+                    res = RemoveTimeStamp(resultData.ToString());
+                    break;
+                case "GETDRAWINGLAYER":
+                    res = RemoveDwfSectionName(resultData, Encoding.UTF8);
+                    break;
+                case "GETDRAWINGSECTION":
+                    res = RemoveDwfSectionName(resultData, Encoding.UTF8);
+                    break;
+                case "GETLOG":
+                    res = RemoveLogEntryTimeStamp(resultData.ToString());
+                    break;
+                case "GETMAP":
+                    res = GetMapHeader(resultData.ToString());
+                    break;
+                case "GETLONGTRANSACTIONS":
+                    res = RemoveCreationDate(resultData.ToString());
+                    break;
+            }
+
+            string strRes = res as string;
+            if (strRes != null && mimeType == "text/xml")
+            {
+                var doc = new XmlDocument();
+                doc.LoadXml(strRes);
+                res = SortElement(doc, "");
+            }
+            return res;
+        }
+
+        class InvertedComparer<T> : IComparer<T>
+        {
+            private IComparer<T> _comp;
+
+            public InvertedComparer(IComparer<T> comp) { _comp = comp; }
+
+            public int Compare(T x, T y)
+            {
+                int res = _comp.Compare(x, y);
+                //Invert the non-zero results
+                if (res > 0)
+                    return -1;
+                else if (res < 0)
+                    return 1;
+                else
+                    return 0;
+            }
+        }
+
+        private static string SortElement(XmlNode elem, string preText)
+        {
+            var elemArray = new List<string>();
+            string elemString = "";
+            if (elem.ChildNodes.Count > 0)
+            {
+                int elCount = 0;
+                int txtCount = 0;
+                //foreach (XmlNode child in elem.ChildNodes)
+                for (int i = 0; i < elem.ChildNodes.Count; i++)
+                {
+                    var child = elem.ChildNodes[i];
+                    if (child.NodeType == XmlNodeType.Element)
+                    {
+                        var elemValue = SortElement(child, preText + "  ");
+                        if (!string.IsNullOrEmpty(elemValue))
+                        {
+                            elemArray.Add(elemValue);
+                            elCount++;
+                        }
+                    }
+                    else if (child.NodeType == XmlNodeType.Text)
+                    {
+                        string content = child.InnerText.Trim();
+                        if (!string.IsNullOrEmpty(content))
+                        {
+                            elemArray.Add(content);
+                            txtCount++;
+                        }
+                    }
+                }
+
+                //We have to ordinal compare to match the sort behaviour of
+                //sort() in PHP
+                elemArray.Sort((s1, s2) =>
+                {
+                    return string.CompareOrdinal(s1, s2);
+                });
+                foreach (string str in elemArray)
+                {
+                    elemString += str;
+                }
+            }
+
+            string endTag = "";
+            if (elemArray.Count > 1 && elemString.Length > 0)
+            {
+                endTag = "\n" + preText;
+            }
+            string tagName = "";
+            if (!(elem is XmlDocument))
+            {
+                tagName = elem.Name;
+            }
+            endTag += "</" + tagName + ">";
+
+            if ("" != tagName)
+            {
+                elemString = "\n" + preText + "<" + tagName + ">" + elemString + endTag;
+            }
+
+            return elemString;
+        }
+
+        private static string RemoveTimeStamp(string resultData)
+        {
+            string result = resultData;
+            string newResult = result;
+            while (result.IndexOf("<CreatedDate>") >= 0)
+            {
+                newResult = result.Substring(0, result.IndexOf("<CreatedDate>"));
+                newResult += result.Substring(result.IndexOf("</ModifiedDate>") + "</ModifiedDate>".Length);
+                result = newResult;
+            }
+            return newResult;
+        }
+
+        private static object RemoveDwfSectionName(object resultData, Encoding enc)
+        {
+            bool bFromByteArray = false;
+            byte[] bResultData = resultData as byte[];
+            string strResultData = resultData as string;
+            /*
+            if (strResultData == null)
+            {
+                if (bResultData != null)
+                {
+                    strResultData = enc.GetString(bResultData);
+                    bFromByteArray = true;
+                }
+            }*/
+
+            if (strResultData != null)
+            {
+                //Console.WriteLine("RemoveDwfSectionName: length = {0}", strResultData.Length);
+                int idx = strResultData.IndexOf(".w2d");
+                //Console.WriteLine("RemoveDwfSectionName: widx = {0}", idx);
+                if (idx >= 0)
+                {
+                    string newResult = strResultData.Substring(idx);
+                    int eidx = newResult.IndexOf("EndOfDWF");
+                    //Console.WriteLine("RemoveDwfSectionName: eidx = {0}", eidx);
+                    if (0 != eidx)
+                    {
+                        newResult = newResult.Substring(0, eidx);
+                        //Console.WriteLine("RemoveDwfSectionName: newlength = {0}", newResult.Length);
+                    }
+                    if (bFromByteArray)
+                        return enc.GetBytes(newResult);
+                    else
+                        return newResult;
+                }
+            }
+            else if (bResultData != null)
+            {
+                byte[] bW2d = enc.GetBytes(".w2d");
+                byte[] bEOF = enc.GetBytes("EndOfDWF");
+
+                int widx = -1;
+                int eidx = -1;
+
+                int wMatches = 0;
+                int eMatches = 0;
+
+                int i = 0;
+                while (i < bResultData.Length)
+                {
+                    //Haven't found .w2d sequence
+                    if (widx < 0 && wMatches == 0)
+                    {
+                        //We've found a "."
+                        if (bResultData[i] == bW2d[0])
+                        {
+                            wMatches++;
+                            i++;
+
+                            //Now try to follow through this sequence to see if it is ".w2d"
+                            while (wMatches < bW2d.Length)
+                            {
+                                //End of array. Abort
+                                if (i >= bResultData.Length)
+                                    break;
+
+                                //Next byte in sequence matches. Advance
+                                if (bResultData[i] == bW2d[wMatches])
+                                {
+                                    //Increment matches
+                                    wMatches++;
+
+                                    //Check if full sequence matches
+                                    if (wMatches == bW2d.Length)
+                                    {
+                                        //Match. Record index which is current position minus the # of consecutive matches
+                                        widx = i - wMatches;
+                                        break;
+                                    }
+                                }
+                                else //Incomplete sequence. Break this loop
+                                {
+                                    wMatches = 0; //Reset
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    //Haven't found EndOfDWF sequence
+                    else if (eidx < 0 && eMatches == 0)
+                    {
+                        //We've found a "E"
+                        if (bResultData[i] == bEOF[0])
+                        {
+                            eMatches++;
+                            i++;
+
+                            //Now try to follow through this sequence to see if it is "EndOfDWF"
+                            while (eMatches < bEOF.Length)
+                            {
+                                //End of array. Abort
+                                if (i >= bResultData.Length)
+                                    break;
+
+                                //Next byte in sequence matches. Advance
+                                if (bResultData[i] == bEOF[eMatches])
+                                {
+                                    //Increment matches
+                                    eMatches++;
+
+                                    //Check if full sequence matches
+                                    if (eMatches == bEOF.Length)
+                                    {
+                                        //Match. Record index which is current position minus the # of consecutive matches
+                                        eidx = i - eMatches;
+                                        break;
+                                    }
+                                }
+                                else //Incomplete sequence. Break this loop
+                                {
+                                    eMatches = 0; //Reset
+                                    break;
+                                }
+                            }
+                        }
+                    }
+
+                    //Found both offsets. We're done
+                    if (widx > 0 && eidx > widx)
+                        break;
+
+                    i++;
+                }
+
+                if (widx > 0 && eidx > widx)
+                {
+                    byte[] newResult = new byte[eidx - widx];
+                    int off = 0;
+                    for (int j = widx; j <= eidx; j++)
+                    {
+                        newResult[off] = bResultData[j];
+                    }
+                }
+            }
+            return resultData;
+        }
+
+        private static string RemoveLogEntryTimeStamp(string resultData)
+        {
+            string result = resultData;
+            string newResult = result;
+            while (result.IndexOf("<") >= 0)
+            {
+                newResult = result.Substring(0, result.IndexOf("<"));
+                newResult += result.Substring(result.IndexOf(">") + 1);
+                result = newResult;
+            }
+            return newResult;
+        }
+
+        private static string GetMapHeader(string resultData)
+        {
+            if (resultData.IndexOf("(DWF V06.01)") >= 0)
+                resultData = "(DWF V06.01)";
+            return resultData;
+        }
+
+        private static string RemoveCreationDate(string resultData)
+        {
+            string newResult = resultData;
+            while (resultData.IndexOf("<CreationDate>") >= 0)
+            {
+                newResult = resultData.Substring(0, resultData.IndexOf("<CreationDate>"));
+                newResult += resultData.Substring(resultData.IndexOf("</CreationDate>") + "</CreationDate>".Length);
+                resultData = newResult;
+            }
+            return newResult;
+        }
+
+        public static object ProcessExceptionMessage(object resultData)
+        {
+            string strResultData = resultData as string;
+            if (strResultData != null)
+            {
+                string text = "exception occurred";
+                if (strResultData.Contains(text))
+                {
+                    strResultData = strResultData.Substring(0, strResultData.IndexOf(text) + text.Length);
+                }
+                return strResultData;
+            }
+            return resultData;
+        }
+
+        public static bool SpecialValidation(string operation, object resultData, object expectedResult)
+        {
+            if (operation == "GETFEATUREPROVIDERS")
+            {
+                //We expect both to be strings here
+                return GetFeatureProvidersValidation(resultData.ToString(), expectedResult.ToString());
+            }
+            return false;
+        }
+
+        private static bool GetFeatureProvidersValidation(string resultData, string expectedResult)
+        {
+            throw new NotImplementedException();
+        }
+
+        public static object RemoveStackTraceFromResult(object result)
+        {
+            var strResult = result as string;
+            //TODO: Clean out stack trace
+            return result;
+        }
+
+        public static string GetExtensionFromMimeType(string mimeType)
+        {
+            string extension = "xml";
+            if (mimeType.Contains("ePlot"))
+                return "dwf";
+            if (mimeType.Contains("text/plain"))
+                return "txt";
+            if (mimeType.Contains("text/html"))
+                return "html";
+
+            switch (mimeType)
+            {
+                case "application/agf":
+                    return "agf";
+                case "application/octet-stream":
+                    return "bin";
+                case "model/vnd.dwf":
+                    return "dwf";
+                case "image/jpeg":
+                    return "jpg";
+                case "image/png":
+                    return "png";
+                case "image/tiff":
+                    return "tiff";
+                case "application/x-w2d":
+                    return "dwf";
+            }
+
+            return extension;
+        }
+
+        public static bool ByteArraysEqual(byte[] bExpected, byte[] bActual, string operation, string testName)
+        {
+            if (bExpected == null && bActual != null)
+                return false;
+
+            if (bExpected != null && bActual == null)
+                return false;
+
+            bool bRet = true;
+#if DEBUG_BINARY_COMPARISON
+            bool bLogged = false;
+            Guid guid = Guid.NewGuid();
+            using (StreamWriter sw1 = new StreamWriter(guid.ToString() + "_" + operation + "_" + testName + "_expected.txt", false))
+            using (StreamWriter sw2 = new StreamWriter(guid.ToString() + "_" + operation + "_" + testName + "_actual.txt", false))
+            {
+#endif
+            for (int i = 0; i < bExpected.Length; i++)
+            {
+                if (i >= bExpected.Length ||
+                    i >= bActual.Length)
+                {
+                    break;
+                }
+
+                byte b1 = bExpected[i];
+                byte b2 = bActual[i];
+
+#if DEBUG_BINARY_COMPARISON
+                sw1.WriteLine("{0} {1}", b1, Convert.ToChar(b1));
+                sw2.WriteLine("{0} {1}", b2, Convert.ToChar(b2));
+#endif
+
+                if (b1 != b2)
+                {
+#if DEBUG_BINARY_COMPARISON
+                    bRet = false;
+                    if (!bLogged)
+                    {
+                        System.Diagnostics.Debug.WriteLine(string.Format("[MgTestRunner]: Comparison {0} returned false. See logged text files", guid.ToString()));
+                        bLogged = true;
+                    }
+#else
+                    return false;
+#endif
+                }
+            }
+#if DEBUG_BINARY_COMPARISON
+            }
+
+            if (bRet)
+            {
+                File.Delete(guid.ToString() + "_" + operation + "_" + testName + "_expected.txt");
+                File.Delete(guid.ToString() + "_" + operation + "_" + testName + "_actual.txt");
+            }
+#endif
+
+            System.Diagnostics.Debug.WriteLine(string.Format("[MgTestRunner]: {0} - {1} - COMPARE: {2} with {3} = {4}", testName, operation, bExpected.Length, bActual.Length, (bRet ? 0 : 1)));
+            return bRet;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ByteReaderTest.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ByteReaderTest.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ByteReaderTest.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common.ExternalTests
+{
+    internal class ByteReaderTestData
+    {
+        internal static byte[] testBytes;
+        internal static int nBytes = 32768;
+        internal static int nBlocks = 256;
+        internal static string testString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+        internal static string infileName;
+        internal static string outfileName;
+        private static bool bFirstTime = true;
+
+        public static void Init()
+        {
+            if (bFirstTime)
+            {
+                infileName = System.IO.Path.GetTempFileName();
+                outfileName = System.IO.Path.GetTempFileName();
+                testBytes = new byte[nBytes];
+                for (int i = 0; i < nBytes; i++)
+                {
+                    testBytes[i] = (byte)(i % 255);
+                }
+
+                using (var fp = System.IO.File.OpenWrite(infileName))
+                {
+                    for (int j = 0; j < nBlocks; j++)
+                    {
+                        fp.Write(testBytes, 0, nBytes);
+                    }
+                }
+
+                bFirstTime = false;
+            }
+        }
+    }
+
+    public class ByteReaderTest : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            ByteReaderTestData.Init();
+            var nBytes = ByteReaderTestData.nBytes;
+            var nBlocks = ByteReaderTestData.nBlocks;
+            var testBytes = ByteReaderTestData.testBytes;
+            var infileName = ByteReaderTestData.infileName;
+            var outfileName = ByteReaderTestData.outfileName;
+            byte[] buf = new byte[nBytes];
+            MgByteReader reader = new MgByteReader(infileName, "png", false);
+            Assert.AreEqual(nBlocks * nBytes, reader.GetLength());
+            reader.Read(buf, nBytes);
+            Assert.AreEqual(buf, testBytes);
+            Assert.AreEqual((nBlocks - 1) * nBytes, reader.GetLength());
+            reader.Rewind();
+            Assert.AreEqual(nBlocks * nBytes, reader.GetLength());
+            reader.ToFile(outfileName);
+            reader.Rewind();
+
+            byte[] buf2 = new byte[nBytes];
+            using (var fp = System.IO.File.OpenRead(outfileName))
+            {
+                for (int j = 0; j < nBlocks; j++)
+                {
+                    fp.Read(buf2, 0, nBytes);
+                    reader.Read(buf, nBytes);
+                    Assert.AreEqual(buf, buf2);
+                }
+            }
+        }
+    }
+
+    public class MemoryConstructor : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            ByteReaderTestData.Init();
+            var nBytes = ByteReaderTestData.nBytes;
+            var testBytes = ByteReaderTestData.testBytes;
+            var outfileName = ByteReaderTestData.outfileName;
+
+            byte[] buf = new byte[nBytes];
+            MgByteReader reader = new MgByteReader(testBytes, nBytes, "png");
+            Assert.AreEqual(nBytes, reader.GetLength());
+            reader.Read(buf, nBytes);
+            Assert.AreEqual(buf, testBytes);
+            Assert.AreEqual(0, reader.GetLength());
+            reader.Rewind();
+            Assert.AreEqual(nBytes, reader.GetLength());
+
+            reader.ToFile(outfileName);
+
+            using (var fp = System.IO.File.OpenRead(outfileName))
+            {
+                fp.Read(buf, 0, nBytes);
+                Assert.AreEqual(buf, testBytes);
+            }
+        }
+    }
+
+    public class StringConstructor : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            ByteReaderTestData.Init();
+            var testString = ByteReaderTestData.testString;
+            MgByteReader reader = new MgByteReader(testString, "text/html");
+            Assert.AreEqual(testString.Length, reader.GetLength());
+            string buf = reader.ToString();
+            Assert.AreEqual(testString, buf);
+            Assert.AreEqual(testString.Length, reader.GetLength());
+            reader.Rewind();
+            Assert.AreEqual(testString.Length, reader.GetLength());
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/CollectionTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/CollectionTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/CollectionTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,993 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common.ExternalTests
+{
+    public class GeomBuild
+    {
+        private MgGeometryFactory factory = new MgGeometryFactory();
+
+        public MgPoint CreatePoint()
+        {
+            MgCoordinate coord = factory.CreateCoordinateXYZ(5.0, 3.0, 2.0);
+            return factory.CreatePoint(coord);
+        }
+
+        public MgLineString CreateLineString(double offset)
+        {
+            MgCoordinateCollection coordCol = new MgCoordinateCollection();
+
+            MgCoordinate coord1 = factory.CreateCoordinateXY(offset + 0.0, 1.0);
+            MgCoordinate coord2 = factory.CreateCoordinateXY(offset + 2.0, 3.0);
+            MgCoordinate coord3 = factory.CreateCoordinateXY(offset + 4.0, 5.0);
+
+            coordCol.Add(coord1);
+            coordCol.Add(coord2);
+            coordCol.Add(coord3);
+
+            return factory.CreateLineString(coordCol);
+        }
+
+
+
+        public MgLinearRing CreateLinearRing(double offset)
+        {
+            MgCoordinate oCoord1 = factory.CreateCoordinateXY(0.0, offset);
+            MgCoordinate oCoord2 = factory.CreateCoordinateXY(5.0, offset);
+            MgCoordinate oCoord3 = factory.CreateCoordinateXY(5.0, offset + 5.0);
+            MgCoordinate oCoord4 = factory.CreateCoordinateXY(0.0, offset + 5.0);
+            MgCoordinate oCoord5 = factory.CreateCoordinateXY(0.0, offset);
+
+            MgCoordinateCollection outerRingCoord = new MgCoordinateCollection();
+            outerRingCoord.Add(oCoord1);
+            outerRingCoord.Add(oCoord2);
+            outerRingCoord.Add(oCoord3);
+            outerRingCoord.Add(oCoord4);
+            outerRingCoord.Add(oCoord5);
+
+            return factory.CreateLinearRing(outerRingCoord);
+        }
+
+
+        public MgPolygon CreatePolygon(double offset)
+        {
+
+
+            // OuterRing
+            MgCoordinate oCoord1 = factory.CreateCoordinateXY(offset + 0.0, 0.0);
+            MgCoordinate oCoord2 = factory.CreateCoordinateXY(offset + 5.0, 0.0);
+            MgCoordinate oCoord3 = factory.CreateCoordinateXY(offset + 5.0, 5.0);
+            MgCoordinate oCoord4 = factory.CreateCoordinateXY(offset + 0.0, 5.0);
+            MgCoordinate oCoord5 = factory.CreateCoordinateXY(offset + 0.0, 0.0);
+
+            MgCoordinateCollection outerRingCoord = new MgCoordinateCollection();
+            outerRingCoord.Add(oCoord1);
+            outerRingCoord.Add(oCoord2);
+            outerRingCoord.Add(oCoord3);
+            outerRingCoord.Add(oCoord4);
+            outerRingCoord.Add(oCoord5);
+
+            // Inner Ring1
+            MgCoordinate i1Coord1 = factory.CreateCoordinateXY(offset + 1.0, 1.0);
+            MgCoordinate i1Coord2 = factory.CreateCoordinateXY(offset + 2.0, 1.0);
+            MgCoordinate i1Coord3 = factory.CreateCoordinateXY(offset + 2.0, 2.0);
+            MgCoordinate i1Coord4 = factory.CreateCoordinateXY(offset + 1.0, 1.0);
+
+            MgCoordinateCollection inner1RingCoord = new MgCoordinateCollection();
+            inner1RingCoord.Add(i1Coord1);
+            inner1RingCoord.Add(i1Coord2);
+            inner1RingCoord.Add(i1Coord3);
+            inner1RingCoord.Add(i1Coord4);
+
+            // Inner Ring2
+            MgCoordinate i2Coord1 = factory.CreateCoordinateXY(offset + 3.0, 3.0);
+            MgCoordinate i2Coord2 = factory.CreateCoordinateXY(offset + 4.0, 3.0);
+            MgCoordinate i2Coord3 = factory.CreateCoordinateXY(offset + 4.0, 4.0);
+            MgCoordinate i2Coord4 = factory.CreateCoordinateXY(offset + 3.0, 3.0);
+
+            MgCoordinateCollection inner2RingCoord = new MgCoordinateCollection();
+            inner2RingCoord.Add(i2Coord1);
+            inner2RingCoord.Add(i2Coord2);
+            inner2RingCoord.Add(i2Coord3);
+            inner2RingCoord.Add(i2Coord4);
+
+            MgLinearRing extRing = factory.CreateLinearRing(outerRingCoord);
+            MgLinearRing intRing1 = factory.CreateLinearRing(inner1RingCoord);
+            MgLinearRing intRing2 = factory.CreateLinearRing(inner2RingCoord);
+
+            MgLinearRingCollection intRings = new MgLinearRingCollection();
+            intRings.Add(intRing1);
+            intRings.Add(intRing2);
+
+            return factory.CreatePolygon(extRing, intRings);
+        }
+
+
+        public MgCurveString CreateCurveString(double offset)
+        {
+
+
+            // Create and return a curvestring consisting of
+            // one circulararc segment and one linearstring segment
+
+            // arcseg  = (0,0), (0,1), (1,2)
+            // lineseg = (1,2), (3,0), (3,2)
+
+            // ArcSegment
+            MgCoordinate startPos = factory.CreateCoordinateXY(offset + 0.0, offset + 0.0);
+            MgCoordinate midPos = factory.CreateCoordinateXY(offset + 0.0, offset + 1.0);
+            MgCoordinate endPos = factory.CreateCoordinateXY(offset + 1.0, offset + 2.0);
+            MgArcSegment arcSeg = factory.CreateArcSegment(startPos, endPos, midPos);
+
+            // Linear Segment
+            MgCoordinateCollection points = new MgCoordinateCollection();
+            MgCoordinate pt1 = factory.CreateCoordinateXY(offset + 1.0, offset + 2.0);
+            MgCoordinate pt2 = factory.CreateCoordinateXY(offset + 3.0, offset + 0.0);
+            MgCoordinate pt3 = factory.CreateCoordinateXY(offset + 3.0, offset + 2.0);
+            points.Add(pt1);
+            points.Add(pt2);
+            points.Add(pt3);
+            MgLinearSegment lineSeg = factory.CreateLinearSegment(points);
+
+            // CurveSegment
+            MgCurveSegmentCollection curveSegs = new MgCurveSegmentCollection();
+            curveSegs.Add(arcSeg);
+            curveSegs.Add(lineSeg);
+
+            return factory.CreateCurveString(curveSegs);
+        }
+
+
+        public MgCurveRing CreateCurveRing(double offset)
+        {
+            // Ring is a closed entity.
+            // Create and return a ring consisting of
+            // one circulararc segment and one linearstring segment
+
+            // arcseg  = (0,0), (0,1), (1,2)
+            // lineseg = (1,2), (0,0)
+
+
+
+            // ArcSegment
+            MgCoordinate startPos = factory.CreateCoordinateXY(offset + 0.0, offset + 0.0);
+            MgCoordinate midPos = factory.CreateCoordinateXY(offset + 0.0, offset + 1.0);
+            MgCoordinate endPos = factory.CreateCoordinateXY(offset + 1.0, offset + 2.0);
+            MgArcSegment arcSeg = factory.CreateArcSegment(startPos, endPos, midPos);
+
+            // Linear Segment
+            MgCoordinateCollection points = new MgCoordinateCollection();
+            MgCoordinate fromPt = factory.CreateCoordinateXY(offset + 1.0, offset + 2.0);
+            MgCoordinate toPt = factory.CreateCoordinateXY(offset + 0.0, offset + 0.0);
+            points.Add(fromPt);
+            points.Add(toPt);
+            MgLinearSegment lineSeg = factory.CreateLinearSegment(points);
+
+            // Curve Segment
+            MgCurveSegmentCollection curveSegs = new MgCurveSegmentCollection();
+            curveSegs.Add(arcSeg);
+            curveSegs.Add(lineSeg);
+
+            return factory.CreateCurveRing(curveSegs);
+        }
+
+
+        public MgCurvePolygon CreateCurvePolygon(double offset, int increment)
+        {
+
+
+            MgCurveRing extRing = CreateCurveRing(offset + increment);
+
+            MgCurveRingCollection intRings = new MgCurveRingCollection();
+
+            MgCurveRing ring1 = CreateCurveRing(offset + 2 * increment);
+            MgCurveRing ring2 = CreateCurveRing(offset + 3 * increment);
+
+            intRings.Add(ring1);
+            intRings.Add(ring2);
+
+            return factory.CreateCurvePolygon(extRing, intRings);
+        }
+
+
+        public MgMultiPoint CreateMultiPoint()
+        {
+
+
+            MgCoordinate coord1 = factory.CreateCoordinateXYZ(1.0, 2.0, 3.0);
+            MgPoint point1 = factory.CreatePoint(coord1);
+
+            MgCoordinate coord2 = factory.CreateCoordinateXYZ(4.0, 5.0, 6.0);
+            MgPoint point2 = factory.CreatePoint(coord2);
+
+            MgCoordinate coord3 = factory.CreateCoordinateXYZ(7.0, 8.0, 9.0);
+            MgPoint point3 = factory.CreatePoint(coord3);
+
+            MgPointCollection pnts = new MgPointCollection();
+            pnts.Add(point1);
+            pnts.Add(point2);
+            pnts.Add(point3);
+
+            return factory.CreateMultiPoint(pnts);
+        }
+
+
+        public MgMultiLineString CreateMultiLineString()
+        {
+
+
+            MgCoordinate coord1 = factory.CreateCoordinateXYZ(0.0, 1.0, 2.0);
+            MgCoordinate coord2 = factory.CreateCoordinateXYZ(3.0, 4.0, 5.0);
+            MgCoordinate coord3 = factory.CreateCoordinateXYZ(6.0, 7.0, 8.0);
+
+            MgCoordinateCollection coordColA = new MgCoordinateCollection();
+            coordColA.Add(coord1);
+            coordColA.Add(coord2);
+            coordColA.Add(coord3);
+
+            MgCoordinate coord4 = factory.CreateCoordinateXYZ(9.0, 10.0, 11.0);
+            MgCoordinate coord5 = factory.CreateCoordinateXYZ(12.0, 13.0, 14.0);
+            MgCoordinate coord6 = factory.CreateCoordinateXYZ(15.0, 16.0, 17.0);
+
+            MgCoordinateCollection coordColB = new MgCoordinateCollection();
+            coordColB.Add(coord4);
+            coordColB.Add(coord5);
+            coordColB.Add(coord6);
+
+            MgLineString lineString1 = factory.CreateLineString(coordColA);
+            MgLineString lineString2 = factory.CreateLineString(coordColB);
+
+            MgLineStringCollection lineStrings = new MgLineStringCollection();
+            lineStrings.Add(lineString1);
+            lineStrings.Add(lineString2);
+
+            return factory.CreateMultiLineString(lineStrings);
+        }
+
+
+        public MgMultiPolygon CreateMultiPolygon()
+        {
+
+
+            MgPolygon polygon1 = CreatePolygon(0.0);
+            MgPolygon polygon2 = CreatePolygon(0.0);
+
+            MgPolygonCollection polygons = new MgPolygonCollection();
+            polygons.Add(polygon1);
+            polygons.Add(polygon2);
+
+            return factory.CreateMultiPolygon(polygons);
+        }
+
+
+        MgMultiCurveString CreateMultiCurveString()
+        {
+
+
+            MgCurveString curveString1 = CreateCurveString(100);
+            MgCurveString curveString2 = CreateCurveString(200);
+            MgCurveString curveString3 = CreateCurveString(300);
+
+            MgCurveStringCollection curveStrings = new MgCurveStringCollection();
+            curveStrings.Add(curveString1);
+            curveStrings.Add(curveString2);
+            curveStrings.Add(curveString3);
+
+            return factory.CreateMultiCurveString(curveStrings);
+        }
+
+
+        public MgMultiCurvePolygon CreateMultiCurvePolygon(int numCurvePolys, double offset)
+        {
+
+
+            MgCurvePolygonCollection curvePolys = new MgCurvePolygonCollection();
+            for (int i = 0; i < numCurvePolys; i++)
+            {
+                MgCurvePolygon curvePoly = CreateCurvePolygon(i + offset, 1);
+                curvePolys.Add(curvePoly);
+            }
+
+            return factory.CreateMultiCurvePolygon(curvePolys);
+        }
+
+
+        public MgMultiGeometry CreateMultiGeometry()
+        {
+
+
+            MgGeometryCollection geometries = new MgGeometryCollection();
+            MgGeometry geometry = null;
+
+            // CurvePolygon
+            geometry = (MgGeometry)CreateCurvePolygon(0, 1);
+            geometries.Add(geometry);
+
+            // CurveString
+            // Not doing CurveString because of some unfixed defect.
+            // It may be the same one that sometimes affects MultiPolygon.
+            geometry = (MgGeometry)CreateCurveString(100);
+            geometries.Add(geometry);
+
+            // LineString
+            geometry = (MgGeometry)CreateLineString(1.0);
+            geometries.Add(geometry);
+
+            // Point
+            geometry = (MgGeometry)CreatePoint();
+            geometries.Add(geometry);
+
+            // Polygon
+            geometry = CreatePolygon(0.0);
+            geometries.Add(geometry);
+
+            // Make MultiGeometry from the many geometries collected above.
+            return factory.CreateMultiGeometry(geometries);
+        }
+
+        public MgArcSegment CreateArcSegment(double offset)
+        {
+            MgCoordinate startPos = factory.CreateCoordinateXY(offset + 0.0, offset + 0.0);
+            MgCoordinate midPos = factory.CreateCoordinateXY(offset + 0.0, offset + 1.0);
+            MgCoordinate endPos = factory.CreateCoordinateXY(offset + 1.0, offset + 2.0);
+            return factory.CreateArcSegment(startPos, endPos, midPos);
+        }
+    }
+
+    public class CollectionTestsIntCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgIntCollection coll = new MgIntCollection();
+            coll.Add(10);
+            coll.Add(20);
+            coll.Add(30);
+            coll.Add(40);
+            coll.Add(50);
+            Assert.AreEqual(20, coll.GetItem(1));
+            Assert.AreEqual(30, coll[2]);
+            Assert.AreEqual(5, coll.Count);
+
+            int j = 0;
+            foreach (int i in coll)
+            {
+                j += i;
+            }
+            Assert.AreEqual(150, j);
+        }
+    }
+
+    public class CollectionTestsPropertyCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgPropertyCollection coll = new MgPropertyCollection();
+            MgDoubleProperty dblProp = new MgDoubleProperty("DoubleProp", 1.1111);
+            MgInt32Property intProp = new MgInt32Property("IntProp", 1);
+            MgDateTime dateTime = new MgDateTime(2006, 9, 21);
+            MgDateTimeProperty dateProp = new MgDateTimeProperty("DateProp", dateTime);
+            MgSingleProperty single = new MgSingleProperty("SingleProp", (float)2.2222);
+            coll.Add(dblProp);
+            coll.Add(intProp);
+            coll.Add(dateProp);
+            coll[2] = single;
+
+            Assert.AreEqual(1.1111, (coll[0] as MgDoubleProperty).GetValue());
+            Assert.AreEqual(MgPropertyType.Double, coll[0].GetPropertyType());
+            Assert.AreEqual(MgPropertyType.Int32, coll[1].GetPropertyType());
+            Assert.AreEqual(MgPropertyType.Single, coll[2].GetPropertyType());
+            Assert.AreEqual((float)2.2222, (coll[2] as MgSingleProperty).GetValue());
+            Assert.AreEqual(3, coll.Count);
+
+            Assert.AreEqual(MgPropertyType.Double, coll[0].GetPropertyType());
+
+            string str = "";
+            foreach (MgProperty prop in coll)
+            {
+                str = str + "[" + prop.GetName() + "]";
+            }
+            Assert.AreEqual("[DoubleProp][IntProp][SingleProp]", str);
+        }
+    }
+
+    public class CollectionTestsBatchPropertyCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgPropertyCollection coll1 = new MgPropertyCollection();
+            MgDoubleProperty dblProp = new MgDoubleProperty("DoubleProp", 1.1111);
+            coll1.Add(dblProp);
+
+            MgPropertyCollection coll2 = new MgPropertyCollection();
+            MgInt32Property intProp = new MgInt32Property("IntProp", 1);
+            coll2.Add(intProp);
+
+            MgPropertyCollection coll3 = new MgPropertyCollection();
+            MgSingleProperty single = new MgSingleProperty("SingleProp", (float)2.2222);
+            coll3.Add(single);
+
+
+            MgBatchPropertyCollection coll = new MgBatchPropertyCollection();
+            coll.Add(coll1);
+            coll.Add(coll2);
+
+            Assert.AreEqual(2, coll.Count);
+            Assert.AreEqual(MgPropertyType.Double, coll[0][0].GetPropertyType());
+            Assert.AreEqual(MgPropertyType.Int32, coll[1][0].GetPropertyType());
+
+            coll[1] = coll3;
+
+            string str = "";
+            foreach (MgPropertyCollection c in coll)
+            {
+                str = str + "[" + c[0].GetName() + "]";
+            }
+            Assert.AreEqual("[DoubleProp][SingleProp]", str);
+        }
+    }
+
+    public class CollectionTestsClassDefinitionCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgClassDefinition class1 = new MgClassDefinition();
+            class1.SetName("class1");
+
+            MgClassDefinition class2 = new MgClassDefinition();
+            class2.SetName("class2");
+
+            MgClassDefinition class3 = new MgClassDefinition();
+            class3.SetName("class3");
+
+            MgClassDefinitionCollection coll = new MgClassDefinitionCollection();
+            coll.Insert(0, class3);
+            coll.Insert(0, class2);
+            coll.Insert(0, class1);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.AreEqual("class2", coll[1].GetName());
+
+            MgClassDefinition tmp = coll[0];
+            coll[0] = coll[1];
+            coll[1] = coll[2];
+            coll[2] = tmp;
+
+            string str = "";
+            foreach (MgClassDefinition def in coll)
+            {
+                str = str + "[" + def.GetName() + "]";
+            }
+            Assert.AreEqual("[class2][class3][class1]", str);
+        }
+    }
+
+    public class CollectionTestsCoordinateCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate c1 = gf.CreateCoordinateXY(1.0, 1.0);
+            MgCoordinate c2 = gf.CreateCoordinateXY(2.0, 2.0);
+            MgCoordinate c3 = gf.CreateCoordinateXY(3.0, 3.0);
+            MgCoordinate c4 = gf.CreateCoordinateXY(4.0, 4.0);
+
+            MgCoordinateCollection coll = new MgCoordinateCollection();
+            coll.Add(c1);
+            coll.Insert(1, c2);
+            coll.Add(c3);
+            coll.Add(c4);
+
+            Assert.AreEqual(4, coll.Count);
+            Assert.AreEqual(1.0, coll[0].GetX());
+            coll[3] = coll[2];
+            Assert.AreEqual(3.0, coll[3].GetX());
+
+            double sum = 0.0;
+            foreach (MgCoordinate coord in coll)
+            {
+                sum += coord.GetX();
+            }
+            Assert.AreEqual(9.0, sum);
+        }
+    }
+
+
+    public class CollectionTestsCurvePolygonCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgCurvePolygon geom1 = build.CreateCurvePolygon(2.0, 5);
+            MgCurvePolygon geom2 = build.CreateCurvePolygon(12.0, 5);
+            MgCurvePolygon geom3 = build.CreateCurvePolygon(2.0, 5);
+
+            MgCurvePolygonCollection coll = new MgCurvePolygonCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Equals(coll[0]));
+            Assert.IsTrue(coll[0].Equals(coll[2]));
+            Assert.IsFalse(coll[0].Equals(coll[1]));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Equals(coll[1]));
+
+            double width = 0.0;
+            foreach (MgCurvePolygon geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsCurveRingCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgCurveRing geom1 = build.CreateCurveRing(2.0);
+            MgCurveRing geom2 = build.CreateCurveRing(12.0);
+            MgCurveRing geom3 = build.CreateCurveRing(2.0);
+
+            MgCurveRingCollection coll = new MgCurveRingCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Envelope().Contains(coll[0].Envelope()));
+            Assert.IsTrue(coll[0].Envelope().Contains(coll[2].Envelope()));
+            Assert.IsFalse(coll[0].Envelope().Contains(coll[1].Envelope()));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Envelope().Contains(coll[1].Envelope()));
+
+            double width = 0.0;
+            foreach (MgCurveRing geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsCurveSegmentCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgArcSegment geom1 = build.CreateArcSegment(2.0);
+            MgArcSegment geom2 = build.CreateArcSegment(12.0);
+            MgArcSegment geom3 = build.CreateArcSegment(2.0);
+
+            MgCurveSegmentCollection coll = new MgCurveSegmentCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Envelope().Contains(coll[0].Envelope()));
+            Assert.IsTrue(coll[0].Envelope().Contains(coll[2].Envelope()));
+            Assert.IsFalse(coll[0].Envelope().Contains(coll[1].Envelope()));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Envelope().Contains(coll[1].Envelope()));
+
+            double width = 0.0;
+            foreach (MgCurveSegment geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsCurveStringCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgCurveString geom1 = build.CreateCurveString(2.0);
+            MgCurveString geom2 = build.CreateCurveString(12.0);
+            MgCurveString geom3 = build.CreateCurveString(2.0);
+
+            MgCurveStringCollection coll = new MgCurveStringCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Equals(coll[0]));
+            Assert.IsTrue(coll[0].Equals(coll[2]));
+            Assert.IsFalse(coll[0].Equals(coll[1]));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Equals(coll[1]));
+
+            double width = 0.0;
+            foreach (MgCurveString geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsFeatureCommandCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgPropertyCollection propVals = new MgPropertyCollection();
+            MgInt32Property prop = new MgInt32Property("prop", 1);
+            propVals.Add(prop);
+            MgUpdateFeatures update = new MgUpdateFeatures("class2", propVals, "where cat < dog");
+            MgInsertFeatures insert = new MgInsertFeatures("class3", propVals);
+            MgDeleteFeatures del = new MgDeleteFeatures("class1", "where cat > dog");
+
+            MgFeatureCommandCollection coll = new MgFeatureCommandCollection();
+            coll.Add(update);
+            coll.Add(insert);
+            coll.Add(del);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.AreEqual(MgFeatureCommandType.DeleteFeatures, coll[2].GetCommandType());
+            coll[0] = coll[1];
+
+            string txt = "";
+            foreach (MgFeatureCommand cmd in coll)
+            {
+                txt += "[" + cmd.GetCommandType() + "]";
+            }
+            Assert.AreEqual("[0][0][2]", txt);
+        }
+    }
+
+    public class CollectionTestsFeatureSchemaCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgFeatureSchema schema1 = new MgFeatureSchema("schema1", "desc1");
+            MgFeatureSchema schema2 = new MgFeatureSchema("schema2", "desc2");
+            MgFeatureSchema schema3 = new MgFeatureSchema("schema3", "desc3");
+
+            MgFeatureSchemaCollection coll = new MgFeatureSchemaCollection();
+            coll.Add(schema1);
+            coll.Add(schema2);
+            coll.Add(schema3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.AreEqual("schema3", coll[2].GetName());
+            coll[0] = coll[2];
+
+            string txt = "";
+            foreach (MgFeatureSchema schema in coll)
+            {
+                txt += "[" + schema.GetName() + "]";
+            }
+            Assert.AreEqual("[schema3][schema2][schema3]", txt);
+        }
+    }
+
+    public class CollectionTestsGeometryCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var wkt = new MgWktReaderWriter();
+            MgPoint geom1 = wkt.Read("POINT XY (1.0 1.0)") as MgPoint;
+            MgPoint geom2 = wkt.Read("POINT XY (2.0 2.0)") as MgPoint;
+            MgPoint geom3 = wkt.Read("POINT XY (1.0 1.0)") as MgPoint;
+
+            MgGeometryCollection coll = new MgGeometryCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Equals(coll[0]));
+            Assert.IsTrue(coll[0].Equals(coll[2]));
+            Assert.IsFalse(coll[0].Equals(coll[1]));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Equals(coll[1]));
+
+            double x = 0.0;
+            foreach (MgGeometry geom in coll)
+            {
+                x += (geom as MgPoint).GetCoordinate().GetX();
+            }
+            Assert.AreEqual(5.0, x);
+        }
+    }
+
+    public class CollectionTestsLayerCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            logger.WriteLine("Skipping CollectionTestsLayerCollection: Resource Service required to construct MgLayer");
+        }
+    }
+
+    public class CollectionTestsLayerGroupCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            logger.WriteLine("Skipping CollectionTestsLayerCollection: MgLayerGroupCollection constructor not visible");
+            /*
+            MgLayerGroup group1 = new MgLayerGroup("group1");
+            MgLayerGroup group2 = new MgLayerGroup("group2");
+            MgLayerGroup group3 = new MgLayerGroup("group3");
+            MgLayerGroup group4 = new MgLayerGroup("group4");
+
+            MgLayerGroupCollection coll = new MgLayerGroupCollection();
+            coll.Add(group1);
+            coll.Insert(1, group2);
+            coll.Add(group3);
+            coll.Insert(3, group4);
+
+            Assert.AreEqual(4, coll.Count);
+            Assert.AreEqual(coll[2].GetName(), "group3");
+
+            coll[1] = coll[2];
+
+            string txt = "";
+            foreach (MgLayerGroup group in coll)
+            {
+                txt += "[" + group.GetName() + "]";
+            }
+            Assert.AreEqual("[group1][group3][group3][group4]", txt);
+            */
+        }
+    }
+
+    public class CollectionTestsLinearRingCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgLinearRing geom1 = build.CreateLinearRing(1.0);
+            MgLinearRing geom2 = build.CreateLinearRing(5.0);
+            MgLinearRing geom3 = build.CreateLinearRing(1.0);
+
+            MgLinearRingCollection coll = new MgLinearRingCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Envelope().Contains(coll[0].Envelope()));
+            Assert.IsTrue(coll[0].Envelope().Contains(coll[2].Envelope()));
+            Assert.IsFalse(coll[0].Envelope().Contains(coll[1].Envelope()));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Envelope().Contains(coll[1].Envelope()));
+
+            double width = 0.0;
+            foreach (MgLinearRing geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsLineStringCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgLineString geom1 = build.CreateLineString(5.0);
+            MgLineString geom2 = build.CreateLineString(11.0);
+            MgLineString geom3 = build.CreateLineString(5.0);
+
+            MgLineStringCollection coll = new MgLineStringCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Equals(coll[0]));
+            Assert.IsTrue(coll[0].Equals(coll[2]));
+            Assert.IsFalse(coll[0].Equals(coll[1]));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Equals(coll[1]));
+
+            double width = 0.0;
+            foreach (MgLineString geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsMapCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            string coordsys = "GEOGCS[\"LL84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]";
+            MgEnvelope env = new MgEnvelope(10, 10, 20, 20);
+
+
+
+            MgMapBase map1 = factory.CreateMap(coordsys, env, "map1");
+            MgMapBase map2 = factory.CreateMap(coordsys, env, "map2");
+            MgMapBase map3 = factory.CreateMap(coordsys, env, "map3");
+            MgMapBase map4 = factory.CreateMap(coordsys, env, "map4");
+
+            MgMapCollection coll = new MgMapCollection();
+            coll.Add(map1);
+            coll.Insert(1, map2);
+            coll.Add(map3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.AreEqual(coll[2].GetName(), "map3");
+
+            coll[1] = map4;
+
+
+            string txt = "";
+            foreach (MgMapBase map in coll)
+            {
+                txt += "[" + map.GetName() + "]";
+            }
+            Assert.AreEqual("[map1][map4][map3]", txt);
+        }
+    }
+
+    public class CollectionTestsPointCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var wkt = new MgWktReaderWriter();
+            MgPoint geom1 = wkt.Read("POINT XY (1.0 1.0)") as MgPoint;
+            MgPoint geom2 = wkt.Read("POINT XY (2.0 2.0)") as MgPoint;
+            MgPoint geom3 = wkt.Read("POINT XY (1.0 1.0)") as MgPoint;
+
+            MgPointCollection coll = new MgPointCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Equals(coll[0]));
+            Assert.IsTrue(coll[0].Equals(coll[2]));
+            Assert.IsFalse(coll[0].Equals(coll[1]));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Equals(coll[1]));
+
+            double x = 0.0;
+            foreach (MgPoint geom in coll)
+            {
+                x += geom.GetCoordinate().GetX();
+            }
+            Assert.AreEqual(5.0, x);
+        }
+    }
+
+    public class CollectionTestsPolygonCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var build = new GeomBuild();
+            MgPolygon geom1 = build.CreatePolygon(2.0);
+            MgPolygon geom2 = build.CreatePolygon(12.0);
+            MgPolygon geom3 = build.CreatePolygon(2.0);
+
+            MgPolygonCollection coll = new MgPolygonCollection();
+            coll.Add(geom1);
+            coll.Add(geom2);
+            coll.Add(geom3);
+
+            Assert.AreEqual(3, coll.Count);
+            Assert.IsTrue(geom1.Equals(coll[0]));
+            Assert.IsTrue(coll[0].Equals(coll[2]));
+            Assert.IsFalse(coll[0].Equals(coll[1]));
+            coll[0] = coll[1];
+            Assert.IsTrue(coll[0].Equals(coll[1]));
+
+            double width = 0.0;
+            foreach (MgPolygon geom in coll)
+            {
+                width += geom.Envelope().GetWidth();
+            }
+            Assert.AreEqual(geom1.Envelope().GetWidth() * 3.0, width);
+        }
+    }
+
+    public class CollectionTestsPropertyDefinitionCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgDataPropertyDefinition def1 = new MgDataPropertyDefinition("def1");
+            MgDataPropertyDefinition def2 = new MgDataPropertyDefinition("def2");
+            MgDataPropertyDefinition def3 = new MgDataPropertyDefinition("def3");
+            MgDataPropertyDefinition def4 = new MgDataPropertyDefinition("def4");
+
+            MgPropertyDefinitionCollection coll = new MgPropertyDefinitionCollection();
+            coll.Add(def1);
+            coll.Add(def2);
+            coll.Insert(2, def4);
+            coll.Insert(2, def3);
+
+            Assert.AreEqual(4, coll.Count);
+            Assert.AreEqual("def1", coll[0].GetName());
+
+            MgPropertyDefinition tmp = coll[0];
+            coll.Remove(def1);
+            Assert.AreEqual(3, coll.Count);
+            coll.Insert(0, tmp);
+
+
+            string txt = "";
+            foreach (MgPropertyDefinition def in coll)
+            {
+                txt += "[" + def.GetName() + "]";
+            }
+            Assert.AreEqual("[def1][def2][def3][def4]", txt);
+        }
+    }
+
+    public class CollectionTestsReadOnlyLayerCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            logger.WriteLine("Skipping CollectionTestsReadOnlyLayerCollection: Resource Service required to construct MgLayer");
+        }
+    }
+
+    public class CollectionTestsStringCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var strColl = new List<string>();
+            strColl.Add("string1");
+            strColl.Add("string2");
+            strColl.Add("string3");
+            strColl.Add("string3");
+
+            MgStringCollection coll1 = new MgStringCollection();
+            coll1.Add("Hello");
+
+            MgStringCollection coll2 = new MgStringCollection(strColl);
+            Assert.AreEqual(4, coll2.GetCount());
+            IList<string> coll3 = coll2;
+            Assert.AreEqual(4, coll3.Count);
+            for (int i = 0; i < 4; i++)
+            {
+                Assert.AreEqual(strColl[i], coll2.GetItem(i));
+                Assert.AreEqual(strColl[i], coll3[i]);
+            }
+
+        }
+    }
+
+    public class CollectionTestsStringPropertyCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgStringProperty prop1 = new MgStringProperty("prop1", "val1");
+            MgStringProperty prop2 = new MgStringProperty("prop2", "val2");
+            MgStringProperty prop3 = new MgStringProperty("prop3", "val3");
+            MgStringProperty prop4 = new MgStringProperty("prop4", "val4");
+
+            MgStringPropertyCollection coll = new MgStringPropertyCollection();
+            coll.Add(prop1);
+            coll.Add(prop2);
+            coll.Remove(prop3);
+            coll.Remove(coll[1]);
+            Assert.AreEqual(1, coll.Count);
+            coll.Add(prop3);
+            coll[1] = prop2;
+            coll.Insert(2, prop3);
+            Assert.AreEqual(2, coll.IndexOf(prop3));
+            coll.Add(prop4);
+
+            string txt = "";
+            foreach (MgStringProperty prop in coll)
+            {
+                txt += "[" + prop.GetName() + "]";
+            }
+            Assert.AreEqual("[prop1][prop2][prop3][prop4]", txt);
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ConvenienceTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ConvenienceTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/ConvenienceTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,1324 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common.ExternalTests
+{
+    public class FeatureServiceTestUtil
+    {
+        public static string CreateTestDataStore(MgResourceIdentifier fsId, string provider, MgFeatureService featSvc)
+        {
+            string scName = "Default";
+            var csFactory = new MgCoordinateSystemFactory();
+            string wkt = csFactory.ConvertCoordinateSystemCodeToWkt("LL84");
+            var schema = new MgFeatureSchema("Default", "Default Schema");
+            var cls = new MgClassDefinition();
+            cls.SetName("Test");
+            var classes = schema.GetClasses();
+            classes.Add(cls);
+
+            var clsProps = cls.GetProperties();
+            var idProps = cls.GetIdentityProperties();
+
+            var id = new MgDataPropertyDefinition("ID");
+            id.SetAutoGeneration(true);
+            id.SetDataType(MgPropertyType.Int32);
+
+            var name = new MgDataPropertyDefinition("Name");
+            name.SetDataType(MgPropertyType.String);
+            name.SetLength(255);
+            name.SetNullable(false);
+
+            var geom = new MgGeometricPropertyDefinition("Geometry");
+            geom.SetGeometryTypes(MgFeatureGeometricType.Point);
+            geom.SetSpatialContextAssociation(scName);
+
+            clsProps.Add(id);
+            clsProps.Add(name);
+            clsProps.Add(geom);
+
+            idProps.Add(id);
+
+            cls.SetDefaultGeometryPropertyName("Geometry");
+
+            var fsp = new MgFileFeatureSourceParams(provider, scName, wkt, schema);
+            featSvc.CreateFeatureSource(fsId, fsp);
+
+            var schemas = featSvc.DescribeSchema(fsId, "");
+            classes = schemas[0].GetClasses();
+            return schemas[0].Name + ":" + classes[0].Name;
+        }
+    }
+
+    public class FeatureServiceInsertFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceInsertFeatures.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var props = new MgPropertyCollection();
+                var nameP = new MgStringProperty("Name", "Test");
+                var geom = wktRw.Read("POINT (1 1)");
+                var agf = agfRw.Write(geom);
+                var geomP = new MgGeometryProperty("Geometry", agf);
+                props.Add(nameP);
+                props.Add(geomP);
+
+                var fr = featSvc.InsertFeatures(fsId, className, props);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceInsertFeaturesWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceInsertFeaturesWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var props = new MgPropertyCollection();
+                var nameP = new MgStringProperty("Name", "Test");
+                var geom = wktRw.Read("POINT (1 1)");
+                var agf = agfRw.Write(geom);
+                var geomP = new MgGeometryProperty("Geometry", agf);
+                props.Add(nameP);
+                props.Add(geomP);
+                var trans = featSvc.BeginTransaction(fsId);
+                var fr = featSvc.InsertFeatures(fsId, className, props, trans);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+                trans.Rollback();
+
+                fr = featSvc.SelectFeatures(fsId, className, null);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceInsertFeaturesBatched : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceInsertFeaturesBatched.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = featSvc.InsertFeatures(fsId, className, batchProps);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceInsertFeaturesBatchedWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceInsertFeaturesBatchedWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var trans = featSvc.BeginTransaction(fsId);
+                var fr = featSvc.InsertFeatures(fsId, className, batchProps, trans);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+                trans.Rollback();
+
+                fr = featSvc.SelectFeatures(fsId, className, null);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceUpdateFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceUpdateFeatures.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = featSvc.InsertFeatures(fsId, className, batchProps);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var updateProps = new MgPropertyCollection();
+                var newName = new MgStringProperty("Name", "Test3Updated");
+                updateProps.Add(newName);
+
+                int updated = featSvc.UpdateMatchingFeatures(fsId, className, updateProps, "Name = 'Test3'");
+                Assert.AreEqual(1, updated);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceUpdateFeaturesWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceUpdateFeaturesWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = featSvc.InsertFeatures(fsId, className, batchProps);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var updateProps = new MgPropertyCollection();
+                var newName = new MgStringProperty("Name", "Test3Updated");
+                updateProps.Add(newName);
+
+                var trans = featSvc.BeginTransaction(fsId);
+                int updated = featSvc.UpdateMatchingFeatures(fsId, className, updateProps, "Name = 'Test3'", trans);
+                Assert.AreEqual(1, updated);
+                trans.Rollback();
+
+                var query = new MgFeatureQueryOptions();
+                query.SetFilter("Name = 'Test3Updated'");
+                fr = featSvc.SelectFeatures(fsId, className, query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceDeleteFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceDeleteFeatures.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = featSvc.InsertFeatures(fsId, className, batchProps);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                int deleted = featSvc.DeleteFeatures(fsId, className, "Name = 'Test3'");
+                Assert.AreEqual(1, deleted);
+
+                var query = new MgFeatureQueryOptions();
+                fr = featSvc.SelectFeatures(fsId, className, query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(4, count);
+
+                query.SetFilter("Name = 'Test3'");
+                fr = featSvc.SelectFeatures(fsId, className, query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class FeatureServiceDeleteFeaturesWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/FeatureServiceDeleteFeaturesWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = featSvc.InsertFeatures(fsId, className, batchProps);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var trans = featSvc.BeginTransaction(fsId);
+                int deleted = featSvc.DeleteFeatures(fsId, className, "Name = 'Test3'", trans);
+                Assert.AreEqual(1, deleted);
+
+                var query = new MgFeatureQueryOptions();
+                fr = featSvc.SelectFeatures(fsId, className, query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(4, count);
+                trans.Rollback();
+
+                query.SetFilter("Name = 'Test3'");
+                fr = featSvc.SelectFeatures(fsId, className, query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerInsertFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerInsertFeatures.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var props = new MgPropertyCollection();
+                var nameP = new MgStringProperty("Name", "Test");
+                var geom = wktRw.Read("POINT (1 1)");
+                var agf = agfRw.Write(geom);
+                var geomP = new MgGeometryProperty("Geometry", agf);
+                props.Add(nameP);
+                props.Add(geomP);
+
+                var fr = layer.InsertFeatures(props, null);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+
+                var query = new MgFeatureQueryOptions();
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerInsertFeaturesWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerInsertFeaturesWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var props = new MgPropertyCollection();
+                var nameP = new MgStringProperty("Name", "Test");
+                var geom = wktRw.Read("POINT (1 1)");
+                var agf = agfRw.Write(geom);
+                var geomP = new MgGeometryProperty("Geometry", agf);
+                props.Add(nameP);
+                props.Add(geomP);
+
+                var trans = layer.BeginTransaction();
+                var fr = layer.InsertFeatures(props, trans);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+                trans.Rollback();
+
+                var query = new MgFeatureQueryOptions();
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerInsertFeaturesBatched : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerInsertFeaturesBatched.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = layer.InsertFeatures(batchProps, null);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var query = new MgFeatureQueryOptions();
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerInsertFeaturesBatchedWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerInsertFeaturesBatchedWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var trans = layer.BeginTransaction();
+                var fr = layer.InsertFeatures(batchProps, trans);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+                trans.Rollback();
+
+                var query = new MgFeatureQueryOptions();
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerUpdateFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerUpdateFeatures.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = layer.InsertFeatures(batchProps, null);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var updateProps = new MgPropertyCollection();
+                var newName = new MgStringProperty("Name", "Test3Updated");
+                updateProps.Add(newName);
+
+                int updated = layer.UpdateMatchingFeatures(updateProps, "Name = 'Test3'", null);
+                Assert.AreEqual(1, updated);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerUpdateFeaturesWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerUpdateFeaturesWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = layer.InsertFeatures(batchProps, null);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var updateProps = new MgPropertyCollection();
+                var newName = new MgStringProperty("Name", "Test3Updated");
+                updateProps.Add(newName);
+
+                var trans = layer.BeginTransaction();
+                int updated = layer.UpdateMatchingFeatures(updateProps, "Name = 'Test3'", trans);
+                Assert.AreEqual(1, updated);
+
+                trans.Rollback();
+                var query = new MgFeatureQueryOptions();
+                query.SetFilter("Name = 'Test3Updated'");
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerDeleteFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerDeleteFeatures.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = layer.InsertFeatures(batchProps, null);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                int deleted = layer.DeleteFeatures("Name = 'Test3'", null);
+                Assert.AreEqual(1, deleted);
+
+                var query = new MgFeatureQueryOptions();
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(4, count);
+
+                query.SetFilter("Name = 'Test3'");
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(0, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerDeleteFeaturesWithTransaction : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/LayerDeleteFeaturesWithTransaction.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SQLite", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                var agfRw = new MgAgfReaderWriter();
+                var wktRw = new MgWktReaderWriter();
+
+                var batchProps = new MgBatchPropertyCollection();
+                for (int i = 0; i < 5; i++)
+                {
+                    var props = new MgPropertyCollection();
+                    var nameP = new MgStringProperty("Name", "Test" + (i + 1));
+                    var geom = wktRw.Read("POINT (1 1)");
+                    var agf = agfRw.Write(geom);
+                    var geomP = new MgGeometryProperty("Geometry", agf);
+                    props.Add(nameP);
+                    props.Add(geomP);
+                    batchProps.Add(props);
+                }
+
+                var fr = layer.InsertFeatures(batchProps, null);
+                int count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                var trans = layer.BeginTransaction();
+                int deleted = layer.DeleteFeatures("Name = 'Test3'", trans);
+                Assert.AreEqual(1, deleted);
+                trans.Rollback();
+
+                var query = new MgFeatureQueryOptions();
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(5, count);
+
+                query.SetFilter("Name = 'Test3'");
+                fr = layer.SelectFeatures(query);
+                count = 0;
+                while (fr.ReadNext())
+                {
+                    count++;
+                }
+                fr.Close();
+                Assert.AreEqual(1, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class SelectFeaturesWithTransform : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/TransformTest.FeatureSource");
+            try
+            {
+                //Create our test data store
+                MgFeatureSchema fs = new MgFeatureSchema("Default", "");
+                MgClassDefinition cls = new MgClassDefinition();
+                cls.SetName("Test");
+
+                MgDataPropertyDefinition id = new MgDataPropertyDefinition("ID");
+                id.SetAutoGeneration(true);
+                id.SetDataType(MgPropertyType.Int32);
+
+                MgGeometricPropertyDefinition geom = new MgGeometricPropertyDefinition("Geometry");
+                geom.SetGeometryTypes(MgFeatureGeometricType.Point);
+                geom.SetSpatialContextAssociation("Default");
+
+                MgPropertyDefinitionCollection props = cls.GetProperties();
+                MgPropertyDefinitionCollection idProps = cls.GetIdentityProperties();
+
+                props.Add(id);
+                props.Add(geom);
+                idProps.Add(id);
+
+                cls.SetDefaultGeometryPropertyName("Geometry");
+                MgClassDefinitionCollection classes = fs.GetClasses();
+                classes.Add(cls);
+
+                //We'll use a transform guaranteed to work. ArbitraryXY (unitA to unitB)
+                //We just check that the transformed values are not the original, that way
+                //we know that CS-Map did its job
+                MgCoordinateSystemFactory csFact = new MgCoordinateSystemFactory();
+                string srcWkt = csFact.ConvertCoordinateSystemCodeToWkt("XY-M");
+                string dstWkt = csFact.ConvertCoordinateSystemCodeToWkt("XY-IN");
+
+                MgGeometryFactory geomFact = new MgGeometryFactory();
+                MgAgfReaderWriter agfRw = new MgAgfReaderWriter();
+                MgFileFeatureSourceParams create = new MgFileFeatureSourceParams("OSGeo.SDF", "Default", srcWkt, fs);
+                featSvc.CreateFeatureSource(fsId, create);
+
+                //Populate data store with test points
+
+                MgCoordinate coord1 = geomFact.CreateCoordinateXY(-37.1020, 144.0020);
+                MgPoint pt1 = geomFact.CreatePoint(coord1);
+                MgByteReader agf1 = agfRw.Write(pt1);
+
+                MgPropertyCollection propVals = new MgPropertyCollection();
+                MgGeometryProperty pGeom = new MgGeometryProperty("Geometry", agf1);
+                propVals.Add(pGeom);
+
+                MgFeatureReader fr = featSvc.InsertFeatures(fsId, "Default:Test", propVals);
+                fr.Close();
+
+                MgCoordinate coord2 = geomFact.CreateCoordinateXY(-37.2020, 144.2020);
+                MgPoint pt2 = geomFact.CreatePoint(coord2);
+                MgByteReader agf2 = agfRw.Write(pt2);
+
+                pGeom.SetValue(agf2);
+                fr = featSvc.InsertFeatures(fsId, "Default:Test", propVals);
+                fr.Close();
+
+                //Now select from this data store
+                MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+                MgReader reader = featSvc.SelectFeatures(fsId, "Default:Test", query, dstWkt);
+
+                Assert.IsTrue(reader.ReadNext());
+                Assert.IsTrue(!reader.IsNull("Geometry"));
+
+                MgByteReader txAgf1 = reader.GetGeometry("Geometry");
+                MgGeometry txGeom1 = agfRw.Read(txAgf1);
+                MgPoint txPt1 = (MgPoint)txGeom1;
+                Assert.IsTrue(txPt1 != null);
+                MgCoordinate txCoord1 = txPt1.GetCoordinate();
+
+                //TODO: Maybe we should really check that it matches the expected transformed result
+                Assert.IsTrue(txCoord1.GetX() != -37.1020);
+                Assert.IsTrue(txCoord1.GetY() != 144.0020);
+
+                Assert.IsTrue(reader.ReadNext());
+                Assert.IsTrue(!reader.IsNull("Geometry"));
+
+                MgByteReader txAgf2 = reader.GetGeometry("Geometry");
+                MgGeometry txGeom2 = agfRw.Read(txAgf2);
+                MgPoint txPt2 = (MgPoint)txGeom2;
+                Assert.IsTrue(txPt2 != null);
+                MgCoordinate txCoord2 = txPt2.GetCoordinate();
+
+                //TODO: Maybe we should really check that it matches the expected transformed result
+                Assert.IsTrue(txCoord2.GetX() != -37.2020);
+                Assert.IsTrue(txCoord2.GetY() != 144.2020);
+
+                reader.Close();
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerSelectFeaturesWithTransform : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/TransformTest.FeatureSource");
+            try
+            {
+                //Create our test data store
+                MgFeatureSchema fs = new MgFeatureSchema("Default", "");
+                MgClassDefinition cls = new MgClassDefinition();
+                cls.SetName("Test");
+
+                MgDataPropertyDefinition id = new MgDataPropertyDefinition("ID");
+                id.SetAutoGeneration(true);
+                id.SetDataType(MgPropertyType.Int32);
+
+                MgGeometricPropertyDefinition geom = new MgGeometricPropertyDefinition("Geometry");
+                geom.SetGeometryTypes(MgFeatureGeometricType.Point);
+                geom.SetSpatialContextAssociation("Default");
+
+                MgPropertyDefinitionCollection props = cls.GetProperties();
+                MgPropertyDefinitionCollection idProps = cls.GetIdentityProperties();
+
+                props.Add(id);
+                props.Add(geom);
+                idProps.Add(id);
+
+                cls.SetDefaultGeometryPropertyName("Geometry");
+                MgClassDefinitionCollection classes = fs.GetClasses();
+                classes.Add(cls);
+
+                //We'll use a transform guaranteed to work. ArbitraryXY (unitA to unitB)
+                //We just check that the transformed values are not the original, that way
+                //we know that CS-Map did its job
+                MgCoordinateSystemFactory csFact = new MgCoordinateSystemFactory();
+                string srcWkt = csFact.ConvertCoordinateSystemCodeToWkt("XY-M");
+                string dstWkt = csFact.ConvertCoordinateSystemCodeToWkt("XY-IN");
+
+                MgGeometryFactory geomFact = new MgGeometryFactory();
+                MgAgfReaderWriter agfRw = new MgAgfReaderWriter();
+                MgFileFeatureSourceParams create = new MgFileFeatureSourceParams("OSGeo.SDF", "Default", srcWkt, fs);
+
+                featSvc.CreateFeatureSource(fsId, create);
+
+                MgMapBase map = factory.CreateMap(srcWkt, new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), "Default:Test", "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                //Populate data store with test points
+
+                MgCoordinate coord1 = geomFact.CreateCoordinateXY(-37.1020, 144.0020);
+                MgPoint pt1 = geomFact.CreatePoint(coord1);
+                MgByteReader agf1 = agfRw.Write(pt1);
+
+                MgPropertyCollection propVals = new MgPropertyCollection();
+                MgGeometryProperty pGeom = new MgGeometryProperty("Geometry", agf1);
+                propVals.Add(pGeom);
+
+                MgFeatureReader fr = layer.InsertFeatures(propVals, null);
+                fr.Close();
+
+                MgCoordinate coord2 = geomFact.CreateCoordinateXY(-37.2020, 144.2020);
+                MgPoint pt2 = geomFact.CreatePoint(coord2);
+                MgByteReader agf2 = agfRw.Write(pt2);
+
+                pGeom.SetValue(agf2);
+                fr = layer.InsertFeatures(propVals, null);
+                fr.Close();
+
+                //Now select from this data store
+                MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+                MgReader reader = layer.SelectFeatures(query, dstWkt);
+
+                Assert.IsTrue(reader.ReadNext());
+                Assert.IsTrue(!reader.IsNull("Geometry"));
+
+                MgByteReader txAgf1 = reader.GetGeometry("Geometry");
+                MgGeometry txGeom1 = agfRw.Read(txAgf1);
+                MgPoint txPt1 = (MgPoint)txGeom1;
+                Assert.IsTrue(txPt1 != null);
+                MgCoordinate txCoord1 = txPt1.GetCoordinate();
+
+                //TODO: Maybe we should really check that it matches the expected transformed result
+                Assert.IsTrue(txCoord1.GetX() != -37.1020);
+                Assert.IsTrue(txCoord1.GetY() != 144.0020);
+
+                Assert.IsTrue(reader.ReadNext());
+                Assert.IsTrue(!reader.IsNull("Geometry"));
+
+                MgByteReader txAgf2 = reader.GetGeometry("Geometry");
+                MgGeometry txGeom2 = agfRw.Read(txAgf2);
+                MgPoint txPt2 = (MgPoint)txGeom2;
+                Assert.IsTrue(txPt2 != null);
+                MgCoordinate txCoord2 = txPt2.GetCoordinate();
+
+                //TODO: Maybe we should really check that it matches the expected transformed result
+                Assert.IsTrue(txCoord2.GetX() != -37.2020);
+                Assert.IsTrue(txCoord2.GetY() != 144.2020);
+
+                reader.Close();
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class LayerGetSpatialContexts : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/GetSpatialContexts.FeatureSource");
+            try
+            {
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+
+                MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+                MgMapBase map = factory.CreateMap(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), new MgEnvelope(-180, -90, 180, 90), "TestMap");
+                MgLayerCollection layers = map.GetLayers();
+
+                string layerXml = string.Format(Resources.TestLayer, fsId.ToString(), className, "Geometry");
+                byte[] bytes = Encoding.UTF8.GetBytes(layerXml);
+                MgByteSource bs = new MgByteSource(bytes, bytes.Length);
+                MgByteReader br = bs.GetReader();
+
+                var ldfId = new MgResourceIdentifier("Library://UnitTests/Layers/TestLayer.LayerDefinition");
+                resSvc.SetResource(ldfId, br, null);
+
+                MgLayerBase layer = factory.CreateLayer(ldfId);
+                layers.Insert(0, layer);
+
+                MgSpatialContextReader scReader = layer.GetSpatialContexts(false);
+                int count = 0;
+                try
+                {
+                    while (scReader.ReadNext())
+                    {
+                        Assert.AreEqual("Default", scReader.GetName());
+                        Assert.AreEqual(csFactory.ConvertCoordinateSystemCodeToWkt("LL84"), scReader.GetCoordinateSystemWkt());
+                        count++;
+                    }
+                }
+                finally
+                {
+                    scReader.Close();
+                }
+                Assert.AreEqual(1, count);
+            }
+            finally
+            {
+                resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/PropertiesTest.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/PropertiesTest.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ExternalTests/PropertiesTest.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,1079 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common.ExternalTests
+{
+    public class PropertiesTestColor : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            short nRed = 22;
+            short nGreen = 33;
+            short nBlue = 44;
+            short nAlpha = 55;
+            MgColor color = new MgColor(nRed, nGreen, nBlue, nAlpha);
+            Assert.AreEqual(nRed, color.Red);
+            Assert.AreEqual(nGreen, color.Green);
+            Assert.AreEqual(nBlue, color.Blue);
+            Assert.AreEqual(nAlpha, color.Alpha);
+            String scolor = nRed.ToString("x") + nGreen.ToString("x") + nBlue.ToString("x") + nAlpha.ToString("x");
+            Assert.AreEqual(scolor, color.Color);
+        }
+    }
+
+    public class PropertiesTestDateTime : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgDateTime dt = new MgDateTime();
+            dt.Year = 2006;
+            dt.Month = 9;
+            dt.Day = 21;
+            dt.Hour = 16;
+            dt.Minute = 4;
+            dt.Second = 25;
+            dt.Microsecond = 99;
+
+            Assert.AreEqual(2006, dt.Year);
+            Assert.AreEqual(9, dt.Month);
+            Assert.AreEqual(21, dt.Day);
+            Assert.AreEqual(16, dt.Hour);
+            Assert.AreEqual(4, dt.Minute);
+            Assert.AreEqual(25, dt.Second);
+            Assert.AreEqual(99, dt.Microsecond);
+        }
+    }
+
+    public class PropertiesTestByteReader : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgByteSource source = new MgByteSource($"{TestDataRoot.Path}/DrawingService/SpaceShip.dwf");
+            source.MimeType = MgMimeType.Dwf;
+            MgByteReader reader = source.GetReader();
+
+            Assert.AreEqual(MgMimeType.Dwf, reader.MimeType);
+        }
+    }
+
+    public class PropertiesTestByteSource : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            string tmp = Path.GetTempFileName();
+            try
+            {
+                File.WriteAllText(tmp, "Hello World");
+
+                MgByteSource source = new MgByteSource(tmp);
+                source.MimeType = "text/plain";
+
+                Assert.AreEqual(MgMimeType.Text, source.MimeType);
+            }
+            finally
+            {
+                try
+                {
+                    File.Delete(tmp);
+                }
+                catch { }
+            }
+        }
+    }
+
+    public class PropertiesTestPropertyDefinition : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgPropertyDefinition propDef = new MgPropertyDefinition("TestProp", MgPropertyType.Int32);
+            propDef.Description = "description";
+            propDef.QualifiedName = "qualifiedName";
+
+            Assert.AreEqual("TestProp", propDef.Name);
+            Assert.AreEqual(MgPropertyType.Int32, propDef.PropertyType);
+            Assert.AreEqual("description", propDef.Description);
+            Assert.AreEqual("qualifiedName", propDef.QualifiedName);
+        }
+    }
+
+    public class PropertiesTestStringProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgStringProperty sp = new MgStringProperty("TestStringName", "TestStringValue");
+
+            Assert.AreEqual("TestStringValue", sp.Value);
+            Assert.AreEqual("TestStringName", sp.Name);
+        }
+    }
+
+    public class PropertiesTestBlobProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            string tmp = Path.GetTempFileName();
+            try
+            {
+                File.WriteAllText(tmp, "Hello World");
+
+                MgByteSource bs = new MgByteSource(tmp);
+                MgByteReader reader = bs.GetReader();
+                MgBlobProperty bp = new MgBlobProperty("BlobPropName", reader);
+
+                Assert.AreEqual("BlobPropName", bp.Name);
+                Assert.Greater((int)bp.Value.GetLength(), 0);
+                Assert.AreEqual(reader.GetLength(), bp.Value.GetLength());
+                Assert.AreEqual(MgPropertyType.Blob, bp.PropertyType);
+
+                MgByteSource bs2 = new MgByteSource($"{TestDataRoot.Path}/DrawingService/SpaceShip.dwf");
+                MgByteReader reader2 = bs2.GetReader();
+                bp.Value = reader2;
+                Assert.AreEqual(reader2.GetLength(), bp.Value.GetLength());
+            }
+            finally
+            {
+                try
+                {
+                    File.Delete(tmp);
+                }
+                catch { }
+            }
+        }
+    }
+
+    public class PropertiesTestBooleanProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgBooleanProperty bp = new MgBooleanProperty("BoolPropName", true);
+
+            Assert.IsTrue(bp.Value);
+            Assert.AreEqual("BoolPropName", bp.Name);
+            Assert.AreEqual(MgPropertyType.Boolean, bp.PropertyType);
+
+            bp.Value = false;
+            Assert.IsFalse(bp.Value);
+        }
+    }
+
+    public class PropertiesTestByteProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            byte bpv = 123;
+            MgByteProperty bp = new MgByteProperty("BytePropName", bpv);
+
+            Assert.AreEqual("BytePropName", bp.Name);
+            Assert.AreEqual(bpv, bp.Value);
+            Assert.AreEqual(MgPropertyType.Byte, bp.PropertyType);
+        }
+    }
+
+    public class PropertiesTestClobProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            string tmp = Path.GetTempFileName();
+            try
+            {
+                File.WriteAllText(tmp, "Hello World");
+
+                MgByteSource bs = new MgByteSource(tmp);
+                MgByteReader reader = bs.GetReader();
+                MgClobProperty cp = new MgClobProperty("ClobPropName", reader);
+
+                Assert.AreEqual("ClobPropName", cp.Name);
+                Assert.Greater((int)cp.Value.GetLength(), 0);
+                Assert.AreEqual(reader.GetLength(), cp.Value.GetLength());
+                Assert.AreEqual(MgPropertyType.Clob, cp.PropertyType);
+
+                MgByteSource bs2 = new MgByteSource($"{TestDataRoot.Path}/DrawingService/SpaceShip.dwf");
+                MgByteReader reader2 = bs2.GetReader();
+                cp.Value = reader2;
+                Assert.AreEqual(reader2.GetLength(), cp.Value.GetLength());
+            }
+            finally
+            {
+                try
+                {
+                    File.Delete(tmp);
+                }
+                catch { }
+            }
+        }
+    }
+
+    public class PropertiesTestDateTimeProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgDateTime dt = new MgDateTime(2006, 9, 22, 8, 33, 44, 55);
+            MgDateTimeProperty dtp = new MgDateTimeProperty("DateTimePropName", dt);
+
+            Assert.AreEqual("DateTimePropName", dtp.Name);
+            Assert.AreEqual(MgPropertyType.DateTime, dtp.PropertyType);
+            Assert.AreEqual(dt.Year, dtp.Value.Year);
+            Assert.AreEqual(dt.Month, dtp.Value.Month);
+            Assert.AreEqual(dt.Day, dtp.Value.Day);
+            Assert.AreEqual(dt.Hour, dtp.Value.Hour);
+            Assert.AreEqual(dt.Minute, dtp.Value.Minute);
+            Assert.AreEqual(dt.Second, dtp.Value.Second);
+            Assert.AreEqual(dt.Microsecond, dtp.Value.Microsecond);
+        }
+    }
+
+    public class PropertiesTestDoubleProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgDoubleProperty dp = new MgDoubleProperty("DoublePropName", 4.251973);
+
+            Assert.AreEqual("DoublePropName", dp.Name);
+            Assert.AreEqual(MgPropertyType.Double, dp.PropertyType);
+            Assert.AreEqual(4.251973, dp.Value);
+        }
+    }
+
+    public class PropertiesTestInt16Property : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgInt16Property ip = new MgInt16Property("Int16PropName", -32768);
+
+            Assert.AreEqual("Int16PropName", ip.Name);
+            Assert.AreEqual(MgPropertyType.Int16, ip.PropertyType);
+            Assert.AreEqual(Int16.MinValue, ip.Value);
+        }
+    }
+
+    public class PropertiesTestInt32Property : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgInt32Property ip = new MgInt32Property("Int32PropName", -2147483648);
+
+            Assert.AreEqual("Int32PropName", ip.Name);
+            Assert.AreEqual(MgPropertyType.Int32, ip.PropertyType);
+            Assert.AreEqual(Int32.MinValue, ip.Value);
+        }
+    }
+
+    public class PropertiesTestInt64Property : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgInt64Property ip = new MgInt64Property("Int64PropName", -9223372036854775808);
+
+            Assert.AreEqual("Int64PropName", ip.Name);
+            Assert.AreEqual(MgPropertyType.Int64, ip.PropertyType);
+            Assert.AreEqual(Int64.MinValue, ip.Value);
+        }
+    }
+
+    public class PropertiesTestSingleProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgSingleProperty sp = new MgSingleProperty("SinglePropName", 4.251973f);
+
+            Assert.AreEqual("SinglePropName", sp.Name);
+            Assert.AreEqual(MgPropertyType.Single, sp.PropertyType);
+            Assert.AreEqual(4.251973f, sp.Value);
+        }
+    }
+
+    public class PropertiesTestLayerBase : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            logger.WriteLine("Skipping PropertiesTestLayerBase: Resource Service required to construct MgLayer");
+            //MgUserInformation user = new MgUserInformation("Administrator", "admin");
+            //MgSiteConnection siteConnection = new MgSiteConnection();
+            //siteConnection.Open(user);
+            //MgResourceService resourceService = (MgResourceService)siteConnection.CreateService(MgServiceType.ResourceService);
+
+            //MgResourceIdentifier id = new MgResourceIdentifier("Library://UnitTests/Data/Shuttle.DrawingSource");
+
+            //MgLayerBase lb = new MgLayerBase(id, resourceService);
+
+            //lb.Name = "TestLayerName";
+            //Assert.AreEqual("TestLayerName", lb.Name);
+
+            //Assert.AreEqual(MgLayerType.Dynamic, lb.LayerType);
+
+            //MgLayerGroup lg = new MgLayerGroup("TestLayerGroup");
+            //lb.Group = lg;
+            //Assert.AreEqual(lg.Name, lb.Group.Name);
+
+            //lb.Visible = true;
+            //Assert.AreEqual(true, lb.Visible);
+            //lb.Visible = false;
+            //Assert.AreEqual(false, lb.Visible);
+
+            //lb.Selectable = true;
+            //Assert.AreEqual(true, lb.Selectable);
+            //lb.Selectable = false;
+            //Assert.AreEqual(false, lb.Selectable);
+
+            //Assert.AreEqual(id.ToString(), lb.LayerDefinition.ToString());
+
+            //lb.DisplayInLegend = true;
+            //Assert.AreEqual(true, lb.DisplayInLegend);
+            //lb.DisplayInLegend = false;
+            //Assert.AreEqual(false, lb.DisplayInLegend);
+
+            //Assert.AreEqual(false, lb.ExpandInLegend);
+
+            //lb.LegendLabel = "TestLegendLabel";
+            //Assert.AreEqual("TestLegendLabel", lb.LegendLabel);
+
+            //Assert.AreEqual("", lb.FeatureSourceId);
+            //Assert.AreEqual("", lb.FeatureClassName);
+        }
+    }
+
+    public class PropertiesTestLayerGroup : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgLayerGroup lg = new MgLayerGroup("TestLayerGroupName");
+
+            Assert.AreEqual("TestLayerGroupName", lg.Name);
+            Assert.AreEqual(MgLayerGroupType.Normal, lg.LayerGroupType);
+
+            lg.Group = new MgLayerGroup("AnotherTestLayerGroupName");
+            Assert.AreEqual("AnotherTestLayerGroupName", lg.Group.Name);
+
+            lg.Visible = true;
+            Assert.IsTrue(lg.Visible);
+            lg.Visible = false;
+            Assert.IsFalse(lg.Visible);
+
+            lg.DisplayInLegend = true;
+            Assert.IsTrue(lg.DisplayInLegend);
+            lg.DisplayInLegend = false;
+            Assert.IsFalse(lg.DisplayInLegend);
+
+            Assert.IsFalse(lg.ExpandInLegend);
+
+            lg.LegendLabel = "TestLegendLabel";
+            Assert.AreEqual("TestLegendLabel", lg.LegendLabel);
+        }
+    }
+
+    public class PropertiesTestMapBase : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgMapBase mb = new MgMapBase();
+            Assert.AreEqual("", mb.Name);
+            Assert.AreEqual("", mb.SessionId);
+            Assert.IsNull(mb.MapDefinition);
+            Assert.AreEqual("", mb.MapSRS);
+            Assert.IsNull(mb.MapExtent);
+            Assert.IsNull(mb.ViewCenter);
+            Assert.AreEqual(1.0, mb.ViewScale);
+            Assert.IsNull(mb.DataExtent);
+            Assert.AreEqual(96, mb.DisplayDpi);
+            Assert.AreEqual(0, mb.DisplayWidth);
+            Assert.AreEqual(0, mb.DisplayHeight);
+            Assert.AreEqual(0, mb.FiniteDisplayScaleCount);
+        }
+    }
+
+    public class PropertiesTestClassDefinition : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgClassDefinition classDef = new MgClassDefinition();
+            classDef.DefaultGeometryPropertyName = "TestDefaultGeometryPropName";
+            Assert.AreEqual("TestDefaultGeometryPropName", classDef.DefaultGeometryPropertyName);
+
+            classDef.Name = "TestName";
+            Assert.AreEqual("TestName", classDef.Name);
+
+            classDef.Description = "TestDescription";
+            Assert.AreEqual("TestDescription", classDef.Description);
+
+            Assert.IsNull(classDef.BaseClassDefinition);
+        }
+    }
+
+    public class PropertiesTestFileFeatureSourceParams : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgFileFeatureSourceParams csp = new MgFileFeatureSourceParams();
+            csp.ProviderName = "OSGeo.SDF";
+            Assert.AreEqual("OSGeo.SDF", csp.ProviderName);
+
+            csp.SpatialContextName = "TestSpatialContextName";
+            Assert.AreEqual("TestSpatialContextName", csp.SpatialContextName);
+
+            csp.SpatialContextDescription = "TestSpatialContextDescription";
+            Assert.AreEqual("TestSpatialContextDescription", csp.SpatialContextDescription);
+
+            csp.CoordinateSystemWkt = "TestCoordSysWkt";
+            Assert.AreEqual("TestCoordSysWkt", csp.CoordinateSystemWkt);
+
+            csp.XYTolerance = 0.0001;
+            Assert.AreEqual(0.0001, csp.XYTolerance);
+
+            csp.ZTolerance = 0.01;
+            Assert.AreEqual(0.01, csp.ZTolerance);
+
+            MgFeatureSchema schema = new MgFeatureSchema("SchemaName", "SchemaDescription");
+            csp.FeatureSchema = schema;
+            Assert.AreEqual(schema.Name, csp.FeatureSchema.Name);
+            Assert.AreEqual(schema.Description, csp.FeatureSchema.Description);
+        }
+    }
+
+    public class PropertiesTestDataPropertyDefinition : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgDataPropertyDefinition dpd = new MgDataPropertyDefinition("DataPropDefName");
+
+            dpd.DataType = MgPropertyType.Int32;
+            Assert.AreEqual(MgPropertyType.Int32, dpd.DataType);
+
+            dpd.Length = 0;
+            Assert.AreEqual(0, dpd.Length);
+
+            dpd.Precision = 0;
+            Assert.AreEqual(0, dpd.Precision);
+
+            dpd.Scale = 0;
+            Assert.AreEqual(0, dpd.Scale);
+
+            dpd.DefaultValue = "123";
+            Assert.AreEqual("123", dpd.DefaultValue);
+
+            dpd.Nullable = true;
+            Assert.IsTrue(dpd.Nullable);
+
+            dpd.ReadOnly = false;
+            Assert.IsFalse(dpd.ReadOnly);
+        }
+    }
+
+    public class PropertiesTestDeleteFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgDeleteFeatures df = new MgDeleteFeatures("dfClassName", "dfFilterText");
+            Assert.AreEqual("dfClassName", df.FeatureClassName);
+            Assert.AreEqual("dfFilterText", df.FilterText);
+        }
+    }
+
+    public class PropertiesTestFeatureProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgFeatureProperty fp = new MgFeatureProperty("FeatureProp", null);
+            Assert.AreEqual("FeatureProp", fp.Name);
+            Assert.AreEqual(MgPropertyType.Feature, fp.PropertyType);
+            Assert.IsNull(fp.Value);
+        }
+    }
+
+    public class PropertiesTestFeatureSchema : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgFeatureSchema fs = new MgFeatureSchema();
+            fs.Name = "fsName";
+            Assert.AreEqual("fsName", fs.Name);
+
+            fs.Description = "fsDescription";
+            Assert.AreEqual("fsDescription", fs.Description);
+        }
+    }
+
+    public class PropertiesTestGeometryPropertyDefinition : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometricPropertyDefinition gpd = new MgGeometricPropertyDefinition("gdpName");
+
+            gpd.GeometryTypes = MgGeometryType.LineString;
+            Assert.AreEqual(MgGeometryType.LineString, gpd.GeometryTypes);
+
+            gpd.ReadOnly = false;
+            Assert.IsFalse(gpd.ReadOnly);
+            gpd.ReadOnly = true;
+            Assert.IsTrue(gpd.ReadOnly);
+
+            gpd.HasElevation = true;
+            Assert.IsTrue(gpd.HasElevation);
+
+            gpd.HasMeasure = true;
+            Assert.IsTrue(gpd.HasMeasure);
+
+            gpd.SpatialContextAssociation = "spatialContextAssociation";
+            Assert.AreEqual("spatialContextAssociation", gpd.SpatialContextAssociation);
+        }
+    }
+
+    public class PropertiesTestGeometryProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            string tmp = Path.GetTempFileName();
+            try
+            {
+                File.WriteAllText(tmp, "Hello World");
+
+                MgByteSource bs = new MgByteSource(tmp);
+                MgByteReader reader = bs.GetReader();
+
+                MgGeometryProperty gp = new MgGeometryProperty("GeomPropName", reader);
+                MgByteSource bs2 = new MgByteSource($"{TestDataRoot.Path}/DrawingService/SpaceShip.dwf");
+                MgByteReader reader2 = bs2.GetReader();
+
+                gp.Value = reader2;
+                Assert.AreEqual(reader2.GetLength(), gp.Value.GetLength());
+
+                Assert.AreEqual(MgPropertyType.Geometry, gp.PropertyType);
+            }
+            finally
+            {
+                try
+                {
+                    File.Delete(tmp);
+                }
+                catch { }
+            }
+        }
+    }
+
+    public class PropertiesTestInsertFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgPropertyCollection propColl = new MgPropertyCollection();
+            propColl.Add(new MgInt32Property("intProp", 10));
+            MgInsertFeatures inf = new MgInsertFeatures("ClassName", propColl);
+            Assert.AreEqual("ClassName", inf.FeatureClassName);
+        }
+    }
+
+    public class PropertiesTestObjectPropertyDefinition : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgObjectPropertyDefinition opd = new MgObjectPropertyDefinition("odpName");
+            MgClassDefinition classDef = new MgClassDefinition();
+            classDef.Name = "testClassDef";
+
+            opd.ClassDefinition = classDef;
+            Assert.AreEqual(classDef.Name, opd.ClassDefinition.Name);
+
+            opd.ObjectType = MgObjectPropertyType.OrderedCollection;
+            Assert.AreEqual(MgObjectPropertyType.OrderedCollection, opd.ObjectType);
+
+            opd.OrderType = MgOrderingOption.Ascending;
+            Assert.AreEqual(MgOrderingOption.Ascending, opd.OrderType);
+
+            MgDataPropertyDefinition dpd = new MgDataPropertyDefinition("dpdName");
+            opd.IdentityProperty = dpd;
+            Assert.AreEqual(dpd.Name, opd.IdentityProperty.Name);
+        }
+    }
+
+    public class PropertiesTestRasterProperty : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgRasterProperty rp = new MgRasterProperty("RasterPropName", null);
+
+            Assert.AreEqual("RasterPropName", rp.Name);
+            Assert.AreEqual(MgPropertyType.Raster, rp.PropertyType);
+            Assert.IsNull(rp.Value);
+        }
+    }
+
+    public class PropertiesTestRasterPropertyDefinition : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgRasterPropertyDefinition rpd = new MgRasterPropertyDefinition("rasterPropDef");
+
+            rpd.ReadOnly = true;
+            Assert.IsTrue(rpd.ReadOnly);
+
+            rpd.Nullable = true;
+            Assert.IsTrue(rpd.Nullable);
+
+            rpd.DefaultImageXSize = 600;
+            Assert.AreEqual(600, rpd.DefaultImageXSize);
+
+            rpd.DefaultImageYSize = 600;
+            Assert.AreEqual(600, rpd.DefaultImageYSize);
+
+            Assert.AreEqual("rasterPropDef", rpd.Name);
+        }
+    }
+
+    public class PropertiesTestResourceIdentifier : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgResourceIdentifier resId = new MgResourceIdentifier("Library://UnitTests/Data/Shuttle.DrawingSource");
+
+            resId.RepositoryType = MgRepositoryType.Library;
+            Assert.AreEqual(MgRepositoryType.Library, resId.RepositoryType);
+
+            resId.RepositoryName = "resName";
+            Assert.AreEqual("resName", resId.RepositoryName);
+
+            resId.Path = "Data";
+            Assert.AreEqual("Data", resId.Path);
+
+            resId.Name = "Shuttle";
+            Assert.AreEqual("Shuttle", resId.Name);
+
+            resId.ResourceType = MgResourceType.DrawingSource;
+            Assert.AreEqual(MgResourceType.DrawingSource, resId.ResourceType);
+        }
+    }
+
+    public class PropertiesTestUpdateFeatures : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgPropertyCollection propColl = new MgPropertyCollection();
+            propColl.Add(new MgInt32Property("intProp", 10));
+            MgUpdateFeatures uf = new MgUpdateFeatures("ClassName", propColl, "filter");
+            Assert.AreEqual("ClassName", uf.FeatureClassName);
+            Assert.AreEqual("ClassName", uf.FeatureClassName);
+        }
+    }
+
+    public class PropertiesTestCoordinateSystem : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+            MgCoordinateSystem coordSys = csFactory.CreateFromCode("LL84");
+            Assert.AreEqual(MgCoordinateSystemType.Geographic, coordSys.Type);
+            Assert.AreEqual("DEGREE", coordSys.Units);
+            Assert.AreEqual(-180, coordSys.MinX);
+            Assert.AreEqual(-90, coordSys.MinY);
+            Assert.AreEqual(180, coordSys.MaxX);
+            Assert.AreEqual(90, coordSys.MaxY);
+            Assert.AreEqual("LL84", coordSys.CsCode);
+            Assert.AreEqual("WGS84 datum, Latitude-Longitude; Degrees", coordSys.Description);
+            Assert.AreEqual("LL", coordSys.Projection);
+            Assert.AreEqual("Null Projection, produces/processes Latitude & Longitude", coordSys.ProjectionDescription);
+            Assert.AreEqual("WGS84", coordSys.Datum);
+            Assert.AreEqual("World Geodetic System of 1984", coordSys.DatumDescription);
+            Assert.AreEqual("WGS84", coordSys.Ellipsoid);
+            Assert.AreEqual("World Geodetic System of 1984, GEM 10C", coordSys.EllipsoidDescription);
+        }
+    }
+
+    public class PropertiesTestArcSegment : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinateXY start = gf.CreateCoordinateXY(0, 0) as MgCoordinateXY;
+            MgCoordinateXY end = gf.CreateCoordinateXY(10, 10) as MgCoordinateXY;
+            MgCoordinateXY control = gf.CreateCoordinateXY(5, 5) as MgCoordinateXY;
+            MgArcSegment arcSegment = gf.CreateArcSegment(start, end, control);
+
+            Assert.AreEqual(MgGeometryComponentType.ArcSegment, arcSegment.ComponentType);
+            Assert.AreEqual(control.ToString(), arcSegment.ControlCoordinate.ToString());
+            Assert.AreEqual(start.ToString(), arcSegment.StartCoordinate.ToString());
+            Assert.AreEqual(end.ToString(), arcSegment.EndCoordinate.ToString());
+        }
+    }
+
+    public class PropertiesTestCoordinateXY : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinateXY coord = gf.CreateCoordinateXY(100, 100) as MgCoordinateXY;
+            Assert.AreEqual(100, coord.X);
+            Assert.AreEqual(100, coord.Y);
+            MgCoordinate coord2 = coord;
+            Assert.AreEqual(100, coord2.X);
+            Assert.AreEqual(100, coord2.Y);
+        }
+    }
+
+    public class PropertiesTestCoordinateXYM : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinateXYM coord = gf.CreateCoordinateXYM(100, 100, 10) as MgCoordinateXYM;
+            Assert.AreEqual(100, coord.X);
+            Assert.AreEqual(100, coord.Y);
+            Assert.AreEqual(10, coord.M);
+            MgCoordinate coord2 = coord;
+            Assert.AreEqual(100, coord2.X);
+            Assert.AreEqual(100, coord2.Y);
+            Assert.AreEqual(10, coord2.M);
+        }
+    }
+
+    public class PropertiesTestCoordinateXYZ : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinateXYZ coord = gf.CreateCoordinateXYZ(100, 100, 10) as MgCoordinateXYZ;
+            Assert.AreEqual(100, coord.X);
+            Assert.AreEqual(100, coord.Y);
+            Assert.AreEqual(10, coord.Z);
+            MgCoordinate coord2 = coord;
+            Assert.AreEqual(100, coord2.X);
+            Assert.AreEqual(100, coord2.Y);
+            Assert.AreEqual(10, coord2.Z);
+        }
+    }
+
+    public class PropertiesTestCoordinateXYZM : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinateXYZM coord = gf.CreateCoordinateXYZM(100, 100, 10, 5) as MgCoordinateXYZM;
+            Assert.AreEqual(100, coord.X);
+            Assert.AreEqual(100, coord.Y);
+            Assert.AreEqual(10, coord.Z);
+            Assert.AreEqual(5, coord.M);
+            MgCoordinate coord2 = coord;
+            Assert.AreEqual(100, coord2.X);
+            Assert.AreEqual(100, coord2.Y);
+            Assert.AreEqual(10, coord2.Z);
+            Assert.AreEqual(5, coord2.M);
+        }
+    }
+
+    public class PropertiesTestCurvePolygon : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearSegment linearSegment = gf.CreateLinearSegment(coordinates);
+            MgCurveSegmentCollection curveSegments = new MgCurveSegmentCollection();
+            curveSegments.Add(linearSegment);
+            MgCurveRing outerRing = gf.CreateCurveRing(curveSegments);
+            MgCurvePolygon cp = gf.CreateCurvePolygon(outerRing, null);
+
+            Assert.AreEqual(outerRing.ToString(), cp.ExteriorRing.ToString());
+            Assert.AreEqual(0, cp.InteriorRingCount);
+            Assert.AreEqual(MgGeometryType.CurvePolygon, cp.GeometryType);
+            Assert.AreEqual(2, cp.Dimension);
+        }
+    }
+
+    public class PropertiesTestCurveRing : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearSegment linearSegment = gf.CreateLinearSegment(coordinates);
+            MgCurveSegmentCollection curveSegments = new MgCurveSegmentCollection();
+            curveSegments.Add(linearSegment);
+            MgCurveRing outerRing = gf.CreateCurveRing(curveSegments);
+
+            Assert.AreEqual(MgGeometryComponentType.CurveRing, outerRing.ComponentType);
+            Assert.AreEqual(1, outerRing.Count);
+            Assert.AreEqual(2, outerRing.Dimension);
+        }
+    }
+
+    public class PropertiesTestCurveString : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearSegment linearSegment = gf.CreateLinearSegment(coordinates);
+            MgCurveSegmentCollection curveSegments = new MgCurveSegmentCollection();
+            curveSegments.Add(linearSegment);
+            MgCurveString curveString = gf.CreateCurveString(curveSegments);
+
+            Assert.AreEqual(1, curveString.Count);
+            Assert.AreEqual(pt1.ToString(), curveString.StartCoordinate.ToString());
+            Assert.AreEqual(pt4.ToString(), curveString.EndCoordinate.ToString());
+            Assert.AreEqual(MgGeometryType.CurveString, curveString.GeometryType);
+            Assert.AreEqual(1, curveString.Dimension);
+        }
+    }
+
+    public class PropertiesTestEnvelope : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgEnvelope env = new MgEnvelope(-180, -90, 180, 90);
+
+            Assert.AreEqual(-180, env.LowerLeftCoordinate.GetX());
+            Assert.AreEqual(-90, env.LowerLeftCoordinate.GetY());
+            Assert.AreEqual(180, env.UpperRightCoordinate.GetX());
+            Assert.AreEqual(90, env.UpperRightCoordinate.GetY());
+            Assert.AreEqual(360, env.Width);
+            Assert.AreEqual(180, env.Height);
+            Assert.IsNaN(env.Depth);
+        }
+    }
+
+    public class PropertiesTestLinearRing : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearRing linearRing = gf.CreateLinearRing(coordinates);
+
+            Assert.AreEqual(MgGeometryComponentType.LinearRing, linearRing.ComponentType);
+            Assert.AreEqual(2, linearRing.Dimension);
+        }
+    }
+
+    public class PropertiesTestLinearSegment : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearSegment linearSegment = gf.CreateLinearSegment(coordinates);
+
+            Assert.AreEqual(MgGeometryComponentType.LinearSegment, linearSegment.ComponentType);
+            Assert.AreEqual(pt1.ToString(), linearSegment.StartCoordinate.ToString());
+            Assert.AreEqual(pt4.ToString(), linearSegment.EndCoordinate.ToString());
+            Assert.AreEqual(1, linearSegment.Dimension);
+        }
+    }
+
+    public class PropertiesTestLineString : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLineString linestring = gf.CreateLineString(coordinates);
+
+            Assert.AreEqual(pt1.ToString(), linestring.StartCoordinate.ToString());
+            Assert.AreEqual(pt4.ToString(), linestring.EndCoordinate.ToString());
+            Assert.AreEqual(MgGeometryType.LineString, linestring.GeometryType);
+            Assert.AreEqual(1, linestring.Dimension);
+        }
+    }
+
+    public class PropertiesTestMultiCurvePolygon : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearSegment linearSegment = gf.CreateLinearSegment(coordinates);
+            MgCurveSegmentCollection curveSegments = new MgCurveSegmentCollection();
+            MgCurveRing curveRing = gf.CreateCurveRing(curveSegments);
+            MgCurvePolygon cp = gf.CreateCurvePolygon(curveRing, null);
+            MgCurvePolygonCollection cpc = new MgCurvePolygonCollection();
+            cpc.Add(cp);
+            MgMultiCurvePolygon mcp = gf.CreateMultiCurvePolygon(cpc);
+
+            Assert.AreEqual(1, mcp.Count);
+            Assert.AreEqual(MgGeometryType.MultiCurvePolygon, mcp.GeometryType);
+            Assert.AreEqual(2, mcp.Dimension);
+        }
+    }
+
+    public class PropertiesTestMultiCurveString : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearSegment linearSegment = gf.CreateLinearSegment(coordinates);
+            MgCurveSegmentCollection curveSegments = new MgCurveSegmentCollection();
+            curveSegments.Add(linearSegment);
+            MgCurveString curveString = gf.CreateCurveString(curveSegments);
+            MgCurveStringCollection csc = new MgCurveStringCollection();
+            csc.Add(curveString);
+            MgMultiCurveString mcs = gf.CreateMultiCurveString(csc);
+
+            Assert.AreEqual(1, mcs.Count);
+            Assert.AreEqual(MgGeometryType.MultiCurveString, mcs.GeometryType);
+            Assert.AreEqual(1, mcs.Dimension);
+        }
+    }
+
+    public class PropertiesTestMultiGeometry : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLineString ls = gf.CreateLineString(coordinates);
+            MgGeometryCollection geometries = new MgGeometryCollection();
+            geometries.Add(ls);
+            MgMultiGeometry mg = gf.CreateMultiGeometry(geometries);
+
+            Assert.AreEqual(1, mg.Count);
+            Assert.AreEqual(MgGeometryType.MultiGeometry, mg.GeometryType);
+            Assert.AreEqual(4, mg.Dimension);
+        }
+    }
+
+    public class PropertiesTestMultiLineString : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLineString ls = gf.CreateLineString(coordinates);
+            MgLineStringCollection lineStringCollection = new MgLineStringCollection();
+            lineStringCollection.Add(ls);
+            MgMultiLineString mls = gf.CreateMultiLineString(lineStringCollection);
+
+            Assert.AreEqual(1, mls.Count);
+            Assert.AreEqual(MgGeometryType.MultiLineString, mls.GeometryType);
+            Assert.AreEqual(1, mls.Dimension);
+        }
+    }
+
+    public class PropertiesTestMultiPoint : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgPoint mgpt1 = gf.CreatePoint(pt1);
+            MgPoint mgpt2 = gf.CreatePoint(pt2);
+            MgPoint mgpt3 = gf.CreatePoint(pt3);
+            MgPoint mgpt4 = gf.CreatePoint(pt4);
+            MgPointCollection points = new MgPointCollection();
+            points.Add(mgpt1);
+            points.Add(mgpt2);
+            points.Add(mgpt3);
+            points.Add(mgpt4);
+            MgMultiPoint mp = gf.CreateMultiPoint(points);
+
+            Assert.AreEqual(4, mp.Count);
+            Assert.AreEqual(MgGeometryType.MultiPoint, mp.GeometryType);
+            Assert.AreEqual(0, mp.Dimension);
+        }
+    }
+
+    public class PropertiesTestPolygon : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            MgGeometryFactory gf = new MgGeometryFactory();
+            MgCoordinate pt1 = gf.CreateCoordinateXY(0, 0);
+            MgCoordinate pt2 = gf.CreateCoordinateXY(0, 10);
+            MgCoordinate pt3 = gf.CreateCoordinateXY(10, 10);
+            MgCoordinate pt4 = gf.CreateCoordinateXY(10, 0);
+            MgCoordinateCollection coordinates = new MgCoordinateCollection();
+            coordinates.Add(pt1);
+            coordinates.Add(pt2);
+            coordinates.Add(pt3);
+            coordinates.Add(pt4);
+            MgLinearRing linearRing = gf.CreateLinearRing(coordinates);
+            MgPolygon polygon = gf.CreatePolygon(linearRing, null);
+
+            Assert.AreEqual(linearRing.ToString(), polygon.ExteriorRing.ToString());
+            Assert.AreEqual(0, polygon.InteriorRingCount);
+            Assert.AreEqual(MgGeometryType.Polygon, polygon.GeometryType);
+            Assert.AreEqual(2, polygon.Dimension);
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/FeatureServiceOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/FeatureServiceOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/FeatureServiceOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgFeatureService
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class FeatureServiceOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgFeatureService _featureService;
+
+        protected FeatureServiceOperationExecutor(MgFeatureService featSvc, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _featureService = featSvc;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/FeatureService/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,533 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public class GetFeatureProviders : FeatureServiceOperationExecutor<GetFeatureProviders>
+    {
+        public GetFeatureProviders(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                MgByteReader reader = _featureService.GetFeatureProviders();
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetProviderCapabilities : FeatureServiceOperationExecutor<GetProviderCapabilities>
+    {
+        public GetProviderCapabilities(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PROVIDER", param);
+
+                MgByteReader reader = _featureService.GetCapabilities(param["PROVIDER"] ?? "");
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetConnectionPropertyValues : FeatureServiceOperationExecutor<GetConnectionPropertyValues>
+    {
+        public GetConnectionPropertyValues(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PROVIDER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "PROPERTY", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "CONNECTIONSTRING", param);
+
+                MgStringCollection result = _featureService.GetConnectionPropertyValues(param["PROVIDER"], param["PROPERTY"], param["CONNECTIONSTRING"]);
+                return new TestResult(CommonUtility.MgStringCollectionToString(result), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class DescribeFeatureSchema : FeatureServiceOperationExecutor<DescribeFeatureSchema>
+    {
+        public DescribeFeatureSchema(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SCHEMA", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                string result = _featureService.DescribeSchemaAsXml(resId, param["SCHEMA"]);
+
+                return new TestResult(result, "text/xml");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class SelectFeatures : FeatureServiceOperationExecutor<SelectFeatures>
+    {
+        public SelectFeatures(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "CLASSNAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "PROPERTIES", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "FILTER", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+                //TODO: Set query options
+                if (param["FILTER"] != null)
+                {
+                    query.SetFilter(param["FILTER"]);
+                }
+
+                //PROPERTIES should be stored in the database as comma separated string without spaces
+                if (param["PROPERTIES"] != null)
+                {
+                    string[] props = param["PROPERTIES"].Split(',');
+                    foreach (var p in props)
+                    {
+                        query.AddFeatureProperty(p);
+                    }
+                }
+
+                MgFeatureReader reader = _featureService.SelectFeatures(resId, param["CLASSNAME"], query);
+                MgByteReader byteReader = reader.ToXml();
+                reader.Close();
+                return TestResult.FromByteReader(byteReader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class SelectAggregates : FeatureServiceOperationExecutor<SelectAggregates>
+    {
+        public SelectAggregates(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "CLASSNAME", param);
+                //_unitTestVm.ReadParameterValue(paramSetId, "PROPERTIES", param);
+                //_unitTestVm.ReadParameterValue(paramSetId, "FILTER", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgFeatureAggregateOptions query = new MgFeatureAggregateOptions();
+                //TODO: Set query options
+                /*
+                if (param["FILTER"] != null)
+                {
+                    query.SetFilter(param["FILTER"]);
+                }
+                */
+                //PROPERTIES should be stored in the database as comma separated string without spaces
+                /*
+                if (param["PROPERTIES"] != null)
+                {
+                    string[] props = param["PROPERTIES"].Split(',');
+                    foreach (var p in props)
+                    {
+                        query.AddFeatureProperty(p);
+                    }
+                }*/
+
+                MgDataReader reader = _featureService.SelectAggregate(resId, param["CLASSNAME"], query);
+                MgByteReader byteReader = reader.ToXml();
+                reader.Close();
+                return TestResult.FromByteReader(byteReader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class ExecuteSqlQuery : FeatureServiceOperationExecutor<ExecuteSqlQuery>
+    {
+        public ExecuteSqlQuery(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SQL", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgSqlDataReader reader = _featureService.ExecuteSqlQuery(resId, param["SQL"]);
+                MgByteReader byteReader = reader.ToXml();
+                reader.Close();
+                return TestResult.FromByteReader(byteReader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetSpatialContexts : FeatureServiceOperationExecutor<GetSpatialContexts>
+    {
+        public GetSpatialContexts(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "ACTIVEONLY", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgSpatialContextReader reader = _featureService.GetSpatialContexts(resId, (param["ACTIVEONLY"] == "1"));
+                MgByteReader byteReader = reader.ToXml();
+                reader.Close();
+                return TestResult.FromByteReader(byteReader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetLongTransactions : FeatureServiceOperationExecutor<GetLongTransactions>
+    {
+        public GetLongTransactions(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "ACTIVEONLY", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgLongTransactionReader reader = _featureService.GetLongTransactions(resId, (param["ACTIVEONLY"] == "1"));
+                MgByteReader byteReader = reader.ToXml();
+                reader.Close();
+                return TestResult.FromByteReader(byteReader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public interface ISessionCreator
+    {
+        string CreateSession();
+    }
+
+    public interface IApplySession
+    {
+        void SetSessionId(string sessionId);
+    }
+
+    public class SetLongTransaction : FeatureServiceOperationExecutor<SetLongTransaction>
+    {
+        private ISessionCreator _creator;
+        private IApplySession _apply;
+
+        public SetLongTransaction(MgFeatureService featSvc, string unitTestVm, ISessionCreator creator, IApplySession apply)
+            : base(featSvc, unitTestVm)
+        {
+            _creator = creator;
+            _apply = apply;
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "LONGTRANSACTIONNAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "CREATESESSION", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                if (param["CREATESESSION"] == "TRUE")
+                {
+                    string sessionId = _creator.CreateSession();
+                    _apply.SetSessionId(sessionId);
+                }
+
+                bool bRes = _featureService.SetLongTransaction(resId, param["LONGTRANSACTIONNAME"]);
+
+                return new TestResult(CommonUtility.BooleanToString(bRes), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class TestConnection : FeatureServiceOperationExecutor<TestConnection>
+    {
+        public TestConnection(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                bool bRes = false;
+                MgResourceIdentifier resId = null;
+                if (!string.IsNullOrEmpty(param["RESOURCEID"]))
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                    bRes = _featureService.TestConnection(resId);
+                }
+                else
+                {
+                    _unitTestVm.ReadParameterValue(paramSetId, "PROVIDER", param);
+                    _unitTestVm.ReadParameterValue(paramSetId, "CONNECTIONSTRING", param);
+                    bRes = _featureService.TestConnection(param["PROVIDER"] ?? "", param["CONNECTIONSTRING"] ?? "");
+                }
+
+                return new TestResult(CommonUtility.BooleanToString(bRes), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetSchemas : FeatureServiceOperationExecutor<GetSchemas>
+    {
+        public GetSchemas(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgStringCollection result = _featureService.GetSchemas(resId);
+                return new TestResult(CommonUtility.MgStringCollectionToString(result), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetClasses : FeatureServiceOperationExecutor<GetClasses>
+    {
+        public GetClasses(MgFeatureService featSvc, string unitTestVm)
+            : base(featSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                NameValueCollection param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SCHEMANAME", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgStringCollection result = _featureService.GetClasses(resId, param["SCHEMANAME"]);
+                return new TestResult(CommonUtility.MgStringCollectionToString(result), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    /// <summary>
+    /// Executes a particular MapGuide API
+    /// </summary>
+    public interface ITestExecutor : IDisposable
+    {
+        /// <summary>
+        /// The API flavour we're executing. See <see cref="OSGeo.MapGuide.Test.Common.ApiTypes"/>
+        /// </summary>
+        string Api { get; }
+
+        /// <summary>
+        /// The name of the operation
+        /// </summary>
+        string OperationName { get; }
+
+        /// <summary>
+        /// Executes the API with the particular parameter set
+        /// </summary>
+        /// <param name="paramSetId"></param>
+        /// <returns></returns>
+        TestResult Execute(int paramSetId);
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutorCollection.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutorCollection.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestExecutorCollection.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    /// <summary>
+    /// A collection of test executors
+    /// </summary>
+    public interface ITestExecutorCollection
+    {
+        /// <summary>
+        /// Initializes this collection of test executors
+        /// </summary>
+        /// <param name="testExecutionMode"></param>
+        /// <param name="dumpFile"></param>
+        void Initialize(string testExecutionMode, string dumpFile);
+
+        /// <summary>
+        /// Gets the dump file path
+        /// </summary>
+        string DumpFile { get; }
+
+        /// <summary>
+        /// Gets the test execution mode
+        /// </summary>
+        string TestExecutionMode { get; }
+
+        /// <summary>
+        /// Gets the test executor of the specified operation name
+        /// </summary>
+        /// <param name="opName"></param>
+        /// <returns></returns>
+        ITestExecutor GetTestExecutor(string opName);
+
+        /// <summary>
+        /// Executes the test suite as defined in the dump file
+        /// </summary>
+        /// <param name="testsRun"></param>
+        /// <param name="logger"></param>
+        /// <param name="isEnterprise"></param>
+        /// <returns></returns>
+        int Execute(ref int testsRun, ITestLogger logger, bool isEnterprise);
+
+        /// <summary>
+        /// Validates a test execution result
+        /// </summary>
+        /// <param name="db"></param>
+        /// <param name="testName"></param>
+        /// <param name="paramSetId"></param>
+        /// <param name="operation"></param>
+        /// <param name="actualResult"></param>
+        /// <param name="logger"></param>
+        /// <returns></returns>
+        int ValidateRequest(SqliteDb db, string testName, int paramSetId, string operation, TestResult actualResult, ITestLogger logger);
+
+        /// <summary>
+        /// Performs necessary cleanup
+        /// </summary>
+        void Cleanup();
+    }
+
+    public abstract class TestExecutorCollectionBase : ITestExecutorCollection
+    {
+        public string TestExecutionMode { get; protected set; }
+
+        public string DumpFile { get; protected set; }
+
+        public abstract string ApiType { get; }
+
+        public void Initialize(string testExecutionMode, string dumpFile)
+        {
+            this.TestExecutionMode = testExecutionMode;
+            this.DumpFile = dumpFile;
+        }
+
+        protected abstract void SetupExecutors(string dbPath);
+
+        public int Execute(ref int testsRun, ITestLogger logger, bool isEnterprise)
+        {
+            int exitStatus = 0;
+            string dbPath = CommonUtility.GetDbPath(this.DumpFile);
+            string dbName = Path.GetFullPath(CommonUtility.GetPath(dbPath));
+
+            if (File.Exists(dbName))
+            {
+                var db = new SqliteDb();
+                db.Open(dbName);
+
+                var vm = new SqliteVm(db, true);
+
+                int status = vm.Execute($"Select TestName, TestType from TestCase where TestType=\"{ApiType}\" order by ExecuteSequence");
+
+                //NOTE: We can't share the SqliteVm instance among our executor objects as this messes up query results
+                //we must be able to re-create a new SqliteVm for each executor, so we pass down the db path
+                SetupExecutors(dbName);
+
+                while (status == Sqlite.Row)
+                {
+                    string testName = vm.GetString("TestName");
+                    string testType = vm.GetString("TestType");
+
+                    Console.WriteLine("Executing {0} test: {1}", testType, testName);
+                    using (var run = new TestExecutionRun(dbPath, this))
+                    {
+                        try
+                        {
+                            exitStatus += run.RunTests(testName, logger, ref testsRun);
+                        }
+                        catch (Exception ex)
+                        {
+                            Console.WriteLine(ex.ToString());
+                            exitStatus += 1;
+                        }
+                    }
+                    status = vm.NextRow();
+                }
+                vm.SqlFinalize();
+                vm = null;
+                db = null;
+            }
+            return exitStatus;
+        }
+
+        public abstract ITestExecutor GetTestExecutor(string opName);
+
+        public abstract int ValidateRequest(SqliteDb db, string testName, int paramSetId, string operation, TestResult actualResult, ITestLogger logger);
+
+        public abstract void Cleanup();
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestLogger.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestLogger.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ITestLogger.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    /// <summary>
+    /// A simple logger interface
+    /// </summary>
+    public interface ITestLogger : IDisposable
+    {
+        void Write(string format, params object[] args);
+        void WriteLine(string format, params object[] args);
+    }
+
+    /// <summary>
+    /// A logger for command line output
+    /// </summary>
+    public class TestLoggerConsole : ITestLogger
+    {
+        public void Write(string format, params object[] args)
+        {
+            Console.Write(format, args);
+        }
+
+        public void WriteLine(string format, params object[] args)
+        {
+            Console.WriteLine(format, args);
+        }
+
+        public void Dispose()
+        {
+
+        }
+    }
+
+    /// <summary>
+    /// A logger for file output
+    /// </summary>
+    public class TestLoggerFile : ITestLogger
+    {
+        private StreamWriter sw;
+
+        public TestLoggerFile(string file, bool append)
+        {
+            FileMode mode = FileMode.Append;
+            if (!append)
+            {
+                if (File.Exists(file))
+                    mode = FileMode.Truncate;
+                else
+                    mode = FileMode.OpenOrCreate;
+            }
+
+            var fs = new FileStream(file, mode);
+            sw = new StreamWriter(fs);
+        }
+
+        public void Write(string format, params object[] args)
+        {
+            sw.Write(format, args);
+        }
+
+        public void WriteLine(string format, params object[] args)
+        {
+            sw.WriteLine(format, args);
+        }
+
+        public void Dispose()
+        {
+            sw?.Dispose();
+            sw = null;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/MapLayerOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/MapLayerOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/MapLayerOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,60 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public interface IMapCreator
+    {
+        MgMapBase CreateMap(MgResourceIdentifier resId);
+        MgLayerBase CreateLayer(MgResourceIdentifier resId);
+    }
+
+    /// <summary>
+    /// The base class of all test executors operating with the runtime map
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class MapLayerOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgMapBase _map;
+        protected MgResourceService _resourceService;
+        protected IMapCreator _creator;
+
+        protected MapLayerOperationExecutor(MgResourceService resSvc, string unitTestVm, IMapCreator creator)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _resourceService = resSvc;
+            _creator = creator;
+        }
+
+        protected void CreateMapFromResource(int paramSetId)
+        {
+            if (_map != null)
+                return;
+
+            _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"MAPDEFINITION\"", paramSetId);
+            string mapName = _unitTestVm.GetString("ParamValue");
+            if (string.IsNullOrEmpty(mapName))
+            {
+                mapName = "Library://maplayertest/World.MapDefinition";
+            }
+
+            MgResourceIdentifier mdfId = new MgResourceIdentifier(mapName);
+            _map = _creator.CreateMap(mdfId);
+        }
+
+        protected MgLayerBase FindLayer(string name)
+        {
+            if (_map != null)
+            {
+                var layers = _map.GetLayers();
+                var lidx = layers.IndexOf(name);
+                if (lidx >= 0)
+                    return layers.GetItem(lidx);
+            }
+            return null;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/MapLayer/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,585 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public class GetMapExtent : MapLayerOperationExecutor<GetMapExtent>
+    {
+        public GetMapExtent(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                var extent = _map.GetMapExtent();
+                return new TestResult(CommonUtility.MgEnvelopeToString(extent), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetCoordinateSystem : MapLayerOperationExecutor<GetCoordinateSystem>
+    {
+        public GetCoordinateSystem(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                return new TestResult(_map.GetMapSRS(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetMapName : MapLayerOperationExecutor<GetMapName>
+    {
+        public GetMapName(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                return new TestResult(_map.GetName(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLayers : MapLayerOperationExecutor<GetLayers>
+    {
+        public GetLayers(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                var layers = _map.GetLayers();
+                var names = new List<string>();
+                for (int i = 0; i < layers.GetCount(); i++)
+                {
+                    var layer = layers.GetItem(i);
+                    names.Add(layer.GetName());
+                }
+
+                return new TestResult(string.Join("/", names.ToArray()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetGroups : MapLayerOperationExecutor<GetGroups>
+    {
+        public GetGroups(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                var groups = _map.GetLayerGroups();
+                var names = new List<string>();
+                for (int i = 0; i < groups.GetCount(); i++)
+                {
+                    var group = groups.GetItem(i);
+                    names.Add(group.GetName());
+                }
+
+                return new TestResult(string.Join("/", names.ToArray()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLayerVisibility : MapLayerOperationExecutor<GetLayerVisibility>
+    {
+        public GetLayerVisibility(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                if (layer == null)
+                    return new TestResult("***Unknown Layer***", "text/plain");
+                return new TestResult(CommonUtility.BooleanToString(layer.GetVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetDisplayInLegend : MapLayerOperationExecutor<GetDisplayInLegend>
+    {
+        public GetDisplayInLegend(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                if (layer == null)
+                    return new TestResult("***Unknown Layer***", "text/plain");
+                return new TestResult(CommonUtility.BooleanToString(layer.GetDisplayInLegend()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLegendLabel : MapLayerOperationExecutor<GetLegendLabel>
+    {
+        public GetLegendLabel(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                if (layer == null)
+                    return new TestResult("***Unknown Layer***", "text/plain");
+                return new TestResult(layer.GetLegendLabel(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLayerDefinition : MapLayerOperationExecutor<GetLayerDefinition>
+    {
+        public GetLayerDefinition(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                if (layer == null)
+                    return new TestResult("***Unknown Layer***", "text/plain");
+                var ldfId = layer.GetLayerDefinition();
+                return new TestResult(ldfId.ToString(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class IsLayerVisible : MapLayerOperationExecutor<IsLayerVisible>
+    {
+        public IsLayerVisible(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                if (layer == null)
+                    return new TestResult("***Unknown Layer***", "text/plain");
+                return new TestResult(CommonUtility.BooleanToString(layer.IsVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class AddLayerGroup : MapLayerOperationExecutor<AddLayerGroup>
+    {
+        public AddLayerGroup(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"GROUPNAME\"", paramSetId);
+                string groupName = _unitTestVm.GetString("ParamValue");
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"PARENTGROUPNAME\"", paramSetId);
+                string parentGroupName = _unitTestVm.GetString("ParamValue");
+
+                var groups = _map.GetLayerGroups();
+                var group = new MgLayerGroup(groupName);
+                if (!string.IsNullOrEmpty(parentGroupName))
+                {
+                    var parentGroup = groups.GetItem(parentGroupName);
+                    group.SetGroup(parentGroup);
+                }
+                groups.Add(group);
+
+                return new TestResult(groups.GetCount().ToString(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class AddLayer : MapLayerOperationExecutor<AddLayer>
+    {
+        public AddLayer(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERDEFINITION\"", paramSetId);
+                string layerDefinition = _unitTestVm.GetString("ParamValue");
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"GROUPNAME\"", paramSetId);
+                string groupName = _unitTestVm.GetString("ParamValue");
+
+                var ldfId = new MgResourceIdentifier(layerDefinition);
+                var layer = _creator.CreateLayer(ldfId);
+
+                if (!string.IsNullOrEmpty(groupName))
+                {
+                    var groups = _map.GetLayerGroups();
+                    var gidx = groups.IndexOf(groupName);
+                    if (gidx >= 0)
+                        layer.SetGroup(groups.GetItem(gidx));
+                }
+
+                var layers = _map.GetLayers();
+                layers.Add(layer);
+
+                return new TestResult(layers.GetCount().ToString(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class HideGroup : MapLayerOperationExecutor<HideGroup>
+    {
+        public HideGroup(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"GROUPNAME\"", paramSetId);
+                string groupName = _unitTestVm.GetString("ParamValue");
+
+                var groups = _map.GetLayerGroups();
+                var group = groups.GetItem(groupName);
+
+                group.SetVisible(false);
+                return new TestResult(CommonUtility.BooleanToString(group.GetVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class ShowGroup : MapLayerOperationExecutor<ShowGroup>
+    {
+        public ShowGroup(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"GROUPNAME\"", paramSetId);
+                string groupName = _unitTestVm.GetString("ParamValue");
+
+                var groups = _map.GetLayerGroups();
+                var group = groups.GetItem(groupName);
+
+                group.SetVisible(true);
+                return new TestResult(CommonUtility.BooleanToString(group.GetVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetViewCenter : MapLayerOperationExecutor<GetViewCenter>
+    {
+        public GetViewCenter(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                return new TestResult(CommonUtility.MgPointToString(_map.GetViewCenter()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetViewScale : MapLayerOperationExecutor<GetViewScale>
+    {
+        public GetViewScale(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+                return new TestResult(_map.GetViewScale().ToString(CultureInfo.InvariantCulture), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetDataExtent : MapLayerOperationExecutor<GetDataExtent>
+    {
+        public GetDataExtent(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                var extent = _map.GetDataExtent();
+                return new TestResult(CommonUtility.MgEnvelopeToString(extent), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class RemoveGroup : MapLayerOperationExecutor<RemoveGroup>
+    {
+        public RemoveGroup(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"GROUPNAME\"", paramSetId);
+                string groupName = _unitTestVm.GetString("ParamValue");
+
+                var groups = _map.GetLayerGroups();
+                var group = groups.GetItem(groupName);
+
+                groups.Remove(group);
+
+                return new TestResult("", "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class LayerExists : MapLayerOperationExecutor<LayerExists>
+    {
+        public LayerExists(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+
+                return new TestResult(CommonUtility.BooleanToString(layer != null), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLayerFeatureSource : MapLayerOperationExecutor<GetLayerFeatureSource>
+    {
+        public GetLayerFeatureSource(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                if (layer == null)
+                    return new TestResult("***Unknown Layer***", "text/plain");
+                return new TestResult(layer.GetFeatureSourceId(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLayerFeatureClass : MapLayerOperationExecutor<GetLayerFeatureClass>
+    {
+        public GetLayerFeatureClass(MgResourceService resSvc, string vm, IMapCreator creator)
+            : base(resSvc, vm, creator)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                this.CreateMapFromResource(paramSetId);
+
+                _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"LAYERNAME\"", paramSetId);
+                string layerName = _unitTestVm.GetString("ParamValue");
+
+                var layer = this.FindLayer(layerName);
+                return new TestResult(layer.GetFeatureClassName(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/PlatformApiTestExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/PlatformApiTestExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/PlatformApiTestExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,56 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all MapGuide API test executors
+    /// </summary>
+    public abstract class PlatformApiTestExecutor : TestExecutorBase
+    {
+        protected string _unitTestVmPath;
+        private SqliteDb _unitTestDb;
+        protected SqliteVm _unitTestVm;
+
+        protected PlatformApiTestExecutor(string opName, string apiType, string unitTestVm)
+        {
+            _opName = opName;
+            _apiType = apiType;
+            _unitTestVmPath = unitTestVm;
+
+            _unitTestDb = new SqliteDb();
+            _unitTestDb.Open(_unitTestVmPath);
+
+            _unitTestVm = new SqliteVm(_unitTestDb, true);
+        }
+
+        public override void Dispose()
+        {
+            _unitTestVm.SqlFinalize();
+            _unitTestVm = null;
+            try
+            {
+                _unitTestDb.Close();
+            }
+            catch { }
+            _unitTestDb = null;
+        }
+
+        private string _apiType;
+
+        public override string Api
+        {
+            get { return _apiType; }
+        }
+
+        private string _opName;
+
+        public override string OperationName
+        {
+            get { return _opName; }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Properties/AssemblyInfo.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Properties/AssemblyInfo.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Properties/AssemblyInfo.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TestCommon")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TestCommon")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("75850376-f5cc-48e2-a527-79c9613a04da")]

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,731 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public class EnumerateResources : ResourceServiceOperationExecutor<EnumerateResources>
+    {
+        public EnumerateResources(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "TYPE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DEPTH", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+                MgByteReader byteReader = _resourceService.EnumerateResources(resId, Convert.ToInt32(param["DEPTH"]), param["TYPE"] ?? "");
+
+                return TestResult.FromByteReader(byteReader, "GETRESOURCEDATA");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class SetResource : ResourceServiceOperationExecutor<SetResource>
+    {
+        public SetResource(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "CONTENT", param, true);
+                _unitTestVm.ReadParameterValue(paramSetId, "HEADER", param, true);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader content = CommonUtility.GetByteReaderFromPath(param["CONTENT"]);
+                MgByteReader header = CommonUtility.GetByteReaderFromPath(param["HEADER"]);
+
+                _resourceService.SetResource(resId, content, header);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class DeleteResource : ResourceServiceOperationExecutor<DeleteResource>
+    {
+        public DeleteResource(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                _resourceService.DeleteResource(resId);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetResourceContent : ResourceServiceOperationExecutor<GetResourceContent>
+    {
+        public GetResourceContent(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "PREPROCESS", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _resourceService.GetResourceContent(resId);
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetResourceHeader : ResourceServiceOperationExecutor<GetResourceHeader>
+    {
+        public GetResourceHeader(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _resourceService.GetResourceHeader(resId);
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class EnumerateResourceData : ResourceServiceOperationExecutor<EnumerateResourceData>
+    {
+        public EnumerateResourceData(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _resourceService.EnumerateResourceData(resId);
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetResourceData : ResourceServiceOperationExecutor<GetResourceData>
+    {
+        public GetResourceData(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DATANAME", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _resourceService.GetResourceData(resId, param["DATANAME"]);
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class SetResourceData : ResourceServiceOperationExecutor<SetResourceData>
+    {
+        public SetResourceData(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DATANAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DATATYPE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DATA", param, true);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                string extension = CommonUtility.GetExtension(param["DATANAME"]);
+                string mimeType = CommonUtility.GetMimeType(extension);
+                MgByteSource dataSource = new MgByteSource(param["DATA"]);
+                dataSource.SetMimeType(mimeType);
+                MgByteReader dataReader = dataSource.GetReader();
+
+                _resourceService.SetResourceData(resId, param["DATANAME"], param["DATATYPE"], dataReader);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class RenameResourceData : ResourceServiceOperationExecutor<RenameResourceData>
+    {
+        public RenameResourceData(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "OLDDATANAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWDATANAME", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                _resourceService.RenameResourceData(resId, param["OLDDATANAME"], param["NEWDATANAME"], false);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class DeleteResourceData : ResourceServiceOperationExecutor<DeleteResourceData>
+    {
+        public DeleteResourceData(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DATANAME", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                _resourceService.DeleteResourceData(resId, param["DATANAME"] ?? "");
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetRepositoryContent : ResourceServiceOperationExecutor<GetRepositoryContent>
+    {
+        public GetRepositoryContent(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader result = _resourceService.GetRepositoryContent(resId);
+
+                return TestResult.FromByteReader(result);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class GetRepositoryHeader : ResourceServiceOperationExecutor<GetRepositoryHeader>
+    {
+        public GetRepositoryHeader(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader result = _resourceService.GetRepositoryHeader(resId);
+
+                return TestResult.FromByteReader(result);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class UpdateRepository : ResourceServiceOperationExecutor<UpdateRepository>
+    {
+        public UpdateRepository(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "CONTENT", param, true);
+                _unitTestVm.ReadParameterValue(paramSetId, "HEADER", param, true);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader content = CommonUtility.GetByteReaderFromPath(param["CONTENT"]);
+                MgByteReader header = CommonUtility.GetByteReaderFromPath(param["HEADER"]);
+
+                _resourceService.UpdateRepository(resId, content, header);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class EnumerateResourceReferences : ResourceServiceOperationExecutor<EnumerateResourceReferences>
+    {
+        public EnumerateResourceReferences(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _resourceService.EnumerateReferences(resId);
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class MoveResource : ResourceServiceOperationExecutor<MoveResource>
+    {
+        public MoveResource(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "SOURCE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DESTINATION", param);
+
+                MgResourceIdentifier srcId = null;
+                if (param["SOURCE"] != null)
+                {
+                    srcId = new MgResourceIdentifier(param["SOURCE"]);
+                }
+
+                MgResourceIdentifier dstId = null;
+                if (param["DESTINATION"] != null)
+                {
+                    dstId = new MgResourceIdentifier(param["DESTINATION"]);
+                }
+
+                _resourceService.MoveResource(srcId, dstId, false);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class CopyResource : ResourceServiceOperationExecutor<CopyResource>
+    {
+        public CopyResource(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "SOURCE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DESTINATION", param);
+
+                MgResourceIdentifier srcId = null;
+                if (param["SOURCE"] != null)
+                {
+                    srcId = new MgResourceIdentifier(param["SOURCE"]);
+                }
+
+                MgResourceIdentifier dstId = null;
+                if (param["DESTINATION"] != null)
+                {
+                    dstId = new MgResourceIdentifier(param["DESTINATION"]);
+                }
+
+                _resourceService.CopyResource(srcId, dstId, false);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class ChangeResourceOwner : ResourceServiceOperationExecutor<ChangeResourceOwner>
+    {
+        public ChangeResourceOwner(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "OWNER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "INCLUDEDESCENDANTS", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                _resourceService.ChangeResourceOwner(resId, param["OWNER"], (param["INCLUDEDESCENDANTS"] == "1"));
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class InheritPermissionsFrom : ResourceServiceOperationExecutor<InheritPermissionsFrom>
+    {
+        public InheritPermissionsFrom(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                _resourceService.InheritPermissionsFrom(resId);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+
+    public class ApplyResourcePackage : ResourceServiceOperationExecutor<ApplyResourcePackage>
+    {
+        public ApplyResourcePackage(MgResourceService resSvc, string unitTestVm)
+            : base(resSvc, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PACKAGE", param, true);
+
+                MgByteReader reader = CommonUtility.GetByteReaderFromPath(param["PACKAGE"] ?? "", false);
+
+                _resourceService.ApplyResourcePackage(reader);
+
+                return TestResult.FromByteReader(null);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+            catch (Exception ex)
+            {
+                return TestResult.FromException(ex);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/ResourceServiceOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/ResourceServiceOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/ResourceService/ResourceServiceOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgResourceService
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class ResourceServiceOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgResourceService _resourceService;
+
+        protected ResourceServiceOperationExecutor(MgResourceService resSvc, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _resourceService = resSvc;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.Designer.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.Designer.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.Designer.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,101 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace OSGeo.MapGuide.Test.Common {
+    using System;
+    using System.Reflection;
+    
+    
+    /// <summary>
+    ///    A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///    Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OSGeo.MapGuide.Test.Common.Resources", typeof(Resources).GetTypeInfo().Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///    Overrides the current thread's CurrentUICulture property for all
+        ///    resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to  <?xml version="1.0" encoding="utf-8"?>
+        ///<LayerDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0.0" xsi:noNamespaceSchemaLocation="LayerDefinition-1.0.0.xsd">
+        ///  <VectorLayerDefinition>
+        ///    <ResourceId>{0}</ResourceId>
+        ///    <FeatureName>{1}</FeatureName>
+        ///    <FeatureNameType>FeatureClass</FeatureNameType>
+        ///    <Geometry>{2}</Geometry>
+        ///    <VectorScaleRange>
+        ///      <PointTypeStyle>
+        ///        <DisplayAsText>false</DisplayAsText>
+        ///       [rest of string was truncated]";.
+        /// </summary>
+        internal static string TestLayer {
+            get {
+                return ResourceManager.GetString("TestLayer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?>
+        ///<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="2.4.0" xsi:noNamespaceSchemaLocation="MapDefinition-2.4.0.xsd">
+        ///  <Name>Test Map</Name>
+        ///  <CoordinateSystem>{0}</CoordinateSystem>
+        ///  <Extents>
+        ///    <MinX>{1}</MinX>
+        ///    <MaxX>{2}</MaxX>
+        ///    <MinY>{3}</MinY>
+        ///    <MaxY>{4}</MaxY>
+        ///  </Extents>
+        ///  <BackgroundColor>ffffffff</BackgroundColor>
+        ///</MapDefinition>.
+        /// </summary>
+        internal static string TestMapDef {
+            get {
+                return ResourceManager.GetString("TestMapDef", resourceCulture);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.resx
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.resx	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Resources.resx	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="TestLayer" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestCommon\Resources\TestLayer.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="TestMapDef" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestCommon\Resources\TestMapDef.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Sqlite.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Sqlite.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/Sqlite.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.Data.Sqlite;
+using System.IO;
+using System.Text;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    public class SqliteDb
+    {
+        private SqliteConnection _conn;
+
+        public void Open(string dbName)
+        {
+            _conn = new SqliteConnection($"Data Source={dbName}");
+            _conn.Open();
+        }
+
+        internal SqliteConnection Connection => _conn;
+
+        public void Close()
+        {
+            _conn?.Close();
+        }
+
+        public void GenerateDatabase(string dumpFileName, string dbName)
+        {
+            using (var conn = new SqliteConnection($"Data Source={dbName}"))
+            {
+                conn.Open();
+
+                using (var cmd = conn.CreateCommand())
+                {
+                    cmd.CommandText = File.ReadAllText(dumpFileName);
+                    cmd.ExecuteNonQuery();
+                }
+            }
+        }
+    }
+
+    public class SqliteGcBlob
+    {
+        private byte[] _bytes;
+
+        public SqliteGcBlob(byte[] bytes)
+        {
+            _bytes = bytes;
+        }
+
+        public byte[] Read() => _bytes;
+    }
+
+    public class SqliteVm
+    {
+        private SqliteDataReader _rdr;
+        private SqliteDb _db;
+
+        public SqliteVm(SqliteDb db, bool b)
+        {
+            _db = db;
+        }
+
+        public int Execute(string sql)
+        {
+            var cmd = _db.Connection.CreateCommand();
+            cmd.CommandText = sql;
+            _rdr = cmd.ExecuteReader();
+            return NextRow();
+        }
+
+        public SqliteGcBlob GetBlob(string name)
+        {
+            if (_rdr == null)
+                return null;
+
+            int ordinal = _rdr.GetOrdinal(name);
+            if (ordinal >= 0)
+            {
+                if (!_rdr.IsDBNull(ordinal))
+                {
+                    var type = _rdr.GetFieldType(ordinal);
+                    if (type == typeof(byte[]))
+                    {
+                        return new SqliteGcBlob(_rdr.GetFieldValue<byte[]>(ordinal));
+                    }
+                    else
+                    {
+                        var result = GetString(name);
+                        return new SqliteGcBlob(Encoding.UTF8.GetBytes(result));
+                    }
+                }
+            }
+
+            return null;
+        }
+
+        public string GetString(string name)
+        {
+            if (_rdr == null)
+                return string.Empty;
+
+            int ordinal = _rdr.GetOrdinal(name);
+            if (ordinal >= 0)
+            {
+                if (!_rdr.IsDBNull(ordinal))
+                {
+                    return _rdr[ordinal].ToString();
+                }
+            }
+
+            return string.Empty;
+        }
+
+        public int NextRow() => (_rdr?.Read() == true) ? Sqlite.Row : Sqlite.EndOfReader;
+
+        public void SqlFinalize()
+        {
+            _rdr?.Dispose();
+            _rdr = null;
+        }
+    }
+
+    public class Sqlite
+    {
+        public const int OK = 0;
+        public const int Row = 1;
+        public const int EndOfReader = 2;
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestCommon.xproj
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestCommon.xproj	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestCommon.xproj	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>75850376-f5cc-48e2-a527-79c9613a04da</ProjectGuid>
+    <RootNamespace>OSGeo.MapGuide.Test.Common</RootNamespace>
+    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
+    <OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SchemaVersion>2.0</SchemaVersion>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
+</Project>
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestDataRoot.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestDataRoot.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestDataRoot.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    public static class TestDataRoot
+    {
+        static TestDataRoot()
+        {
+            Path = "../../../../TestData";
+        }
+
+        public static string Path { get; set; }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutionRun.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutionRun.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutionRun.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,111 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    /// <summary>
+    /// Executes a <see cref="T:OSGeo.MapGuide.Test.Common.ITestExecutorCollection"/> instance
+    /// </summary>
+    public class TestExecutionRun : IDisposable
+    {
+        private ITestExecutorCollection _executors;
+        private SqliteDb _unitTestDb;
+        private SqliteVm _unitTestVm;
+        private SqliteVm _unitTestResultVm;
+        private bool _generateDump;
+
+        public TestExecutionRun(string dbPath, ITestExecutorCollection exec, bool generateDump = false)
+        {
+            _executors = exec;
+            _generateDump = generateDump;
+            _unitTestDb = new SqliteDb();
+            _unitTestDb.Open(dbPath);
+
+            _unitTestVm = new SqliteVm(_unitTestDb, false);
+            _unitTestResultVm = new SqliteVm(_unitTestDb, false);
+        }
+
+        public void Dispose()
+        {
+            _unitTestResultVm.SqlFinalize();
+            _unitTestResultVm = null;
+            _unitTestVm.SqlFinalize();
+            _unitTestVm = null;
+            try
+            {
+                _unitTestDb.Close();
+            }
+            catch { }
+            _unitTestDb = null;
+        }
+
+        public int RunTests(string testName, ITestLogger logger, ref int testsRun)
+        {
+            TestResult actualResult = null;
+            int exitStatus = 0;
+            try
+            {
+                //Add the test in the log file
+                string msg = "\n\n************************************************************\n" +
+                             string.Format("Executing {0}\n", testName) +
+                             "************************************************************\n\n";
+
+                logger.Write(msg);
+
+                //Get the list of operations to be executed for this test. This list should comma separated, no spaces.
+                _unitTestVm.Execute($"Select ParamSets from TestCase where TestName=\"{testName}\"");
+                string sets = _unitTestVm.GetString("ParamSets");
+
+                //Extract the paramset ids
+                int[] paramSet = sets.Split(',').Where(x => !string.IsNullOrEmpty(x)).Select(x => Convert.ToInt32(x)).ToArray();
+                foreach (int paramSetId in paramSet)
+                {
+                    _unitTestVm.Execute($"Select ParamValue from Params where ParamSet={paramSetId} AND ParamName=\"OPERATION\"");
+                    string paramValue = _unitTestVm.GetString("ParamValue");
+
+                    testsRun++;
+
+                    //Add the operation to the log file
+                    AddLogFileEntry(logger, paramValue, paramSetId, _unitTestResultVm);
+
+                    var exec = _executors.GetTestExecutor(paramValue);
+                    actualResult = exec.Execute(paramSetId);
+
+                    exitStatus += _executors.ValidateRequest(_unitTestDb, testName, paramSetId, paramValue, actualResult, logger);
+                }
+
+                return exitStatus;
+            }
+            catch (MgException ex)
+            {
+                throw new UnitTestException(string.Format("Exception from MapGuide:\n{0}", ex.GetDetails()));
+            }
+        }
+
+        private static void AddLogFileEntry(ITestLogger logger, string operation, int paramSetId, SqliteVm vm)
+        {
+            logger.Write("\nParamSet: {0}\n", paramSetId);
+            int status = vm.Execute($"Select * from Params where ParamSet={paramSetId}");
+
+            while (status == Sqlite.Row)
+            {
+                string paramName = vm.GetString("ParamName");
+                string paramValue = vm.GetString("ParamValue");
+
+                logger.Write("{0}: {1}\n", paramName, paramValue);
+                status = vm.NextRow();
+            }
+        }
+
+        public void Cleanup()
+        {
+            if (_executors != null)
+            {
+                _executors.Cleanup();
+                _executors = null;
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutorBase.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutorBase.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestExecutorBase.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    public abstract class TestExecutorBase : ITestExecutor
+    {
+        public abstract string Api
+        {
+            get;
+        }
+
+        public abstract string OperationName
+        {
+            get;
+        }
+
+        public abstract TestResult Execute(int paramSetId);
+
+        public abstract void Dispose();
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestResult.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestResult.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/TestResult.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,93 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+    /// <summary>
+    /// Encapsulates a unit test result
+    /// </summary>
+    public class TestResult
+    {
+        public object ResultData
+        {
+            get;
+            private set;
+        }
+
+        public string ContentType
+        {
+            get;
+            private set;
+        }
+
+        public string HttpStatusCode
+        {
+            get;
+            private set;
+        }
+
+        public TestResult(string resultData = "", string contentType = "", string statusCode = "")
+        {
+            this.ResultData = resultData;
+            this.ContentType = contentType;
+            this.HttpStatusCode = statusCode;
+        }
+
+        public static TestResult FromByteReader(MgByteReader byteReader, string operation = "")
+        {
+            try
+            {
+                TestResult res = new TestResult();
+                if (byteReader != null)
+                {
+                    res.ContentType = byteReader.GetMimeType();
+                    if (res.ContentType == MgMimeType.Html ||
+                        res.ContentType == MgMimeType.Json ||
+                        res.ContentType == MgMimeType.Kml ||
+                        res.ContentType == MgMimeType.Text ||
+                        res.ContentType == MgMimeType.Xml)
+                    {
+                        res.ResultData = byteReader.ToString();
+                    }
+                    else
+                    {
+                        MgByteSink sink = new MgByteSink(byteReader);
+                        string path = operation + Guid.NewGuid().ToString() + "Result.bin";
+                        if (string.IsNullOrEmpty(operation))
+                            path = Path.GetTempFileName();
+                        sink.ToFile(path);
+                        res.ResultData = File.ReadAllBytes(path);
+                        if (string.IsNullOrEmpty(operation))
+                            File.Delete(path);
+                        else
+                            System.Diagnostics.Debug.WriteLine(string.Format("[MgTestRunner]: Check out {0} if binary comparison results are strange", path));
+                        /*
+                        byte[] bytes = new byte[byteReader.GetLength()];
+                        byteReader.Read(bytes, bytes.Length);
+                        res.ResultData = bytes;
+                        */
+                    }
+                }
+                return res;
+            }
+            catch (MgException ex)
+            {
+                return FromMgException(ex);
+            }
+        }
+
+        public static TestResult FromMgException(MgException ex)
+        {
+            //Need to be lowercase to satisfy a PHP-ism. Ugh!
+            return new TestResult(ex.GetType().Name.ToLower(), "text/plain");
+        }
+
+        public static TestResult FromException(Exception ex)
+        {
+            return new TestResult(ex.Message, "text/plain");
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/UnitTestException.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/UnitTestException.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/UnitTestException.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Common
+{
+#if !DNXCORE50
+    [Serializable]
+#endif
+    public class UnitTestException : Exception
+    {
+        public UnitTestException() { }
+        public UnitTestException(string message) : base(message) { }
+        public UnitTestException(string message, Exception inner) : base(message, inner) { }
+#if !DNXCORE50
+        protected UnitTestException(
+          System.Runtime.Serialization.SerializationInfo info,
+          System.Runtime.Serialization.StreamingContext context)
+            : base(info, context)
+        { }
+#endif
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,31 @@
+{
+    "version": "1.0.0-*",
+    "description": "TestCommon Class Library",
+    "authors": [ "OSGeo" ],
+    "tags": [ "" ],
+    "projectUrl": "",
+    "licenseUrl": "",
+    "frameworks": {
+        "dnxcore50": {
+            "dependencies": {
+                "Microsoft.CSharp": "4.0.1-beta-23516",
+                "System.Console": "4.0.0-beta-23516",
+                "System.Collections": "4.0.11-beta-23516",
+                "System.Linq": "4.0.1-beta-23516",
+                "System.Runtime": "4.0.21-beta-23516",
+                "System.Threading": "4.0.11-beta-23516",
+                "System.Reflection": "4.1.0-beta-23516",
+                "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+                "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+                "MapGuideDotNetCoreApi": "3.1.0"
+            }
+        }
+    },
+    "dependencies": {
+        "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+        "System.Collections.Specialized": "4.0.1-beta-23516",
+        "System.Globalization": "4.0.11-beta-23516",
+        "System.IO": "4.0.11-beta-23516",
+        "System.Xml.XmlDocument": "4.0.1-beta-23516"
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.lock.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.lock.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestCommon/project.lock.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,3574 @@
+{
+  "locked": false,
+  "version": 2,
+  "targets": {
+    "DNXCore,Version=v5.0": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x86": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x86/native/ACE.dll": {},
+          "runtimes/win7-x86/native/GEOS.dll": {},
+          "runtimes/win7-x86/native/lib_json.dll": {},
+          "runtimes/win7-x86/native/MapGuideDotNetCoreUnmanagedApi.dll": {},
+          "runtimes/win7-x86/native/MgFoundation.dll": {},
+          "runtimes/win7-x86/native/MgGeometry.dll": {},
+          "runtimes/win7-x86/native/MgHttpHandler.dll": {},
+          "runtimes/win7-x86/native/MgMapGuideCommon.dll": {},
+          "runtimes/win7-x86/native/MgMdfModel.dll": {},
+          "runtimes/win7-x86/native/MgMdfParser.dll": {},
+          "runtimes/win7-x86/native/MgPlatformBase.dll": {},
+          "runtimes/win7-x86/native/MgWebApp.dll": {},
+          "runtimes/win7-x86/native/MgWebSupport.dll": {},
+          "runtimes/win7-x86/native/readme.txt": {},
+          "runtimes/win7-x86/native/xerces-c_3_1mg.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x86/native/sqlite3.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Overlapped": "4.0.0",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Overlapped/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Overlapped.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Overlapped.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x64": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x64/native/ACE.dll": {},
+          "runtimes/win7-x64/native/GEOS.dll": {},
+          "runtimes/win7-x64/native/lib_json.dll": {},
+          "runtimes/win7-x64/native/MapGuideDotNetCoreUnmanagedApi.dll": {},
+          "runtimes/win7-x64/native/MgFoundation.dll": {},
+          "runtimes/win7-x64/native/MgGeometry.dll": {},
+          "runtimes/win7-x64/native/MgHttpHandler.dll": {},
+          "runtimes/win7-x64/native/MgMapGuideCommon.dll": {},
+          "runtimes/win7-x64/native/MgMdfModel.dll": {},
+          "runtimes/win7-x64/native/MgMdfParser.dll": {},
+          "runtimes/win7-x64/native/MgPlatformBase.dll": {},
+          "runtimes/win7-x64/native/MgWebApp.dll": {},
+          "runtimes/win7-x64/native/MgWebSupport.dll": {},
+          "runtimes/win7-x64/native/readme.txt": {},
+          "runtimes/win7-x64/native/xerces-c_3_1mg.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x64/native/sqlite3.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Overlapped": "4.0.0",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Overlapped/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Overlapped.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Overlapped.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      }
+    }
+  },
+  "libraries": {
+    "MapGuideDotNetCoreApi/3.1.0": {
+      "type": "package",
+      "sha512": "A1bl+WWyigH83cWV45k3HeqE8i3BTcN36YGVbaXByTQOOFZz14CYDoiApZjXYTN4lqQpT2RDEZ4VUWHCtMrsqA==",
+      "files": [
+        "lib/dnxcore50/MapGuideDotNetCoreApi.dll",
+        "lib/dnxcore50/MapGuideDotNetCoreApi.xml",
+        "MapGuideDotNetCoreApi.3.1.0.nupkg",
+        "MapGuideDotNetCoreApi.3.1.0.nupkg.sha512",
+        "MapGuideDotNetCoreApi.nuspec",
+        "runtimes/win7-x64/native/ACE.dll",
+        "runtimes/win7-x64/native/GEOS.dll",
+        "runtimes/win7-x64/native/lib_json.dll",
+        "runtimes/win7-x64/native/MapGuideDotNetCoreUnmanagedApi.dll",
+        "runtimes/win7-x64/native/MgFoundation.dll",
+        "runtimes/win7-x64/native/MgGeometry.dll",
+        "runtimes/win7-x64/native/MgHttpHandler.dll",
+        "runtimes/win7-x64/native/MgMapGuideCommon.dll",
+        "runtimes/win7-x64/native/MgMdfModel.dll",
+        "runtimes/win7-x64/native/MgMdfParser.dll",
+        "runtimes/win7-x64/native/MgPlatformBase.dll",
+        "runtimes/win7-x64/native/MgWebApp.dll",
+        "runtimes/win7-x64/native/MgWebSupport.dll",
+        "runtimes/win7-x64/native/readme.txt",
+        "runtimes/win7-x64/native/xerces-c_3_1mg.dll",
+        "runtimes/win7-x86/native/ACE.dll",
+        "runtimes/win7-x86/native/GEOS.dll",
+        "runtimes/win7-x86/native/lib_json.dll",
+        "runtimes/win7-x86/native/MapGuideDotNetCoreUnmanagedApi.dll",
+        "runtimes/win7-x86/native/MgFoundation.dll",
+        "runtimes/win7-x86/native/MgGeometry.dll",
+        "runtimes/win7-x86/native/MgHttpHandler.dll",
+        "runtimes/win7-x86/native/MgMapGuideCommon.dll",
+        "runtimes/win7-x86/native/MgMdfModel.dll",
+        "runtimes/win7-x86/native/MgMdfParser.dll",
+        "runtimes/win7-x86/native/MgPlatformBase.dll",
+        "runtimes/win7-x86/native/MgWebApp.dll",
+        "runtimes/win7-x86/native/MgWebSupport.dll",
+        "runtimes/win7-x86/native/readme.txt",
+        "runtimes/win7-x86/native/xerces-c_3_1mg.dll"
+      ]
+    },
+    "Microsoft.CSharp/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fb+HO3nIjHao9lqsVVM0ne3GM/+1EfRQUoM58cxEOt+5biy/8DQ1nxIahZ9VaJKw7Wgb6XhRhsdwg8DkePEOJA==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.CSharp.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/Microsoft.CSharp.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg.sha512",
+        "Microsoft.CSharp.nuspec",
+        "ref/dotnet5.1/de/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/es/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/fr/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/it/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ja/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ko/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/Microsoft.CSharp.dll",
+        "ref/dotnet5.1/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ru/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hans/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hant/Microsoft.CSharp.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/Microsoft.CSharp.xml",
+        "ref/netcore50/es/Microsoft.CSharp.xml",
+        "ref/netcore50/fr/Microsoft.CSharp.xml",
+        "ref/netcore50/it/Microsoft.CSharp.xml",
+        "ref/netcore50/ja/Microsoft.CSharp.xml",
+        "ref/netcore50/ko/Microsoft.CSharp.xml",
+        "ref/netcore50/Microsoft.CSharp.dll",
+        "ref/netcore50/Microsoft.CSharp.xml",
+        "ref/netcore50/ru/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hans/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hant/Microsoft.CSharp.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._"
+      ]
+    },
+    "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "54F32OBWIWMIpeKggCMEX+Bp/TiAiKzBaQ4z+IRr61eNSnJhxMnLE/QWDs5YbCtbDlWIB4+VBC1rnT8PFGCtdw==",
+      "files": [
+        "build/net451/Microsoft.Data.Sqlite.props",
+        "build/netcore50/Microsoft.Data.Sqlite.targets",
+        "build/netcore50/win10-arm/native/sqlite3.dll",
+        "build/netcore50/win10-x64/native/sqlite3.dll",
+        "build/netcore50/win10-x86/native/sqlite3.dll",
+        "lib/dotnet5.4/Microsoft.Data.Sqlite.dll",
+        "lib/dotnet5.4/Microsoft.Data.Sqlite.xml",
+        "lib/net451/Microsoft.Data.Sqlite.dll",
+        "lib/net451/Microsoft.Data.Sqlite.xml",
+        "lib/netcore50/Microsoft.Data.Sqlite.dll",
+        "lib/netcore50/Microsoft.Data.Sqlite.xml",
+        "Microsoft.Data.Sqlite.1.0.0-rc1-final.nupkg",
+        "Microsoft.Data.Sqlite.1.0.0-rc1-final.nupkg.sha512",
+        "Microsoft.Data.Sqlite.nuspec",
+        "runtimes/win7-x64/native/sqlite3.dll",
+        "runtimes/win7-x86/native/sqlite3.dll"
+      ]
+    },
+    "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "26HS4c6MBisN+D7XUr8HObOI/JJvSJQYQR//Bfw/hi9UqhqK3lFpNKjOuYHI+gTxYdXT46HqZiz4D+k7d+ob3A==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll",
+        "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.xml",
+        "lib/net451/Microsoft.Extensions.PlatformAbstractions.dll",
+        "lib/net451/Microsoft.Extensions.PlatformAbstractions.xml",
+        "Microsoft.Extensions.PlatformAbstractions.1.0.0-rc1-final.nupkg",
+        "Microsoft.Extensions.PlatformAbstractions.1.0.0-rc1-final.nupkg.sha512",
+        "Microsoft.Extensions.PlatformAbstractions.nuspec"
+      ]
+    },
+    "runtime.win7.System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "pfQrTtnYcWOtI3RrpqjAzwT3I55ivTVZFpbKYG59dYTTvaLFGbs2njc/mrXHij6GylyJ2YjekS/9r6I8X3LV1A==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Console.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.Console.dll",
+        "runtimes/win7/lib/net/_._"
+      ]
+    },
+    "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TxSgeP23B6bPfE0QFX8u4/1p1jP6Ugn993npTRf3e9F3y61BIQeCkt5Im0gGdjz0dxioHkuTr+C2m4ELsMos8Q==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Diagnostics.Debug.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll",
+        "runtimes/win7/lib/netcore50/System.Diagnostics.Debug.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll"
+      ]
+    },
+    "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "UOHEVg3jQwsvy3b+8zhDk7BQ9GhHY1KcjHSuqArzIl7oemcM/+D7OfS5iOA96ydjEv9FmIKV3knkXMge+cUD0Q==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.IO.FileSystem.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll",
+        "runtimes/win7/lib/net/_._",
+        "runtimes/win7/lib/netcore50/System.IO.FileSystem.dll",
+        "runtimes/win7/lib/win8/_._",
+        "runtimes/win7/lib/wp8/_._",
+        "runtimes/win7/lib/wpa81/_._"
+      ]
+    },
+    "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HphDhue34J/4+1rIMtInY1FWK1oLEMpxIpxGeNnhIlQf7hv5QDf05aWEC6180qbgkPBCFwyGnwWRBnONApwbBQ==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Private.Uri.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll",
+        "runtimes/win7/lib/netcore50/System.Private.Uri.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll"
+      ]
+    },
+    "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Jm+LAzN7CZl1BZSxz4TsMBNy1rHNqyY/1+jxZf3BpF7vkPlWRXa/vSfY0lZJZdy4Doxa893bmcCf9pZNsJU16Q==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Extensions.dll",
+        "lib/netcore50/System.Runtime.Extensions.dll",
+        "ref/dotnet/_._",
+        "runtime.win7.System.Runtime.Extensions.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Runtime.Extensions.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Runtime.Extensions.nuspec",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll"
+      ]
+    },
+    "runtime.win7.System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "paSNXQ5Y6Exu3OpekooyMJFQ8mitn69fGO5Br3XLIfQ1KiMYVmRf+o6dMprC0SpPROVCiCxdUaJx5XkDEVL3uA==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Threading.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Threading.dll",
+        "runtimes/win7/lib/netcore50/System.Threading.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.dll"
+      ]
+    },
+    "System.Collections/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TDca4OETV0kkXdpkyivMw1/EKKD1Sa/NVAjirw+fA0LZ37jLDYX+KhPPUQxgkvhCe/SVvxETD5Viiudza2k7OQ==",
+      "files": [
+        "lib/DNXCore50/System.Collections.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Collections.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.xml",
+        "ref/dotnet5.1/es/System.Collections.xml",
+        "ref/dotnet5.1/fr/System.Collections.xml",
+        "ref/dotnet5.1/it/System.Collections.xml",
+        "ref/dotnet5.1/ja/System.Collections.xml",
+        "ref/dotnet5.1/ko/System.Collections.xml",
+        "ref/dotnet5.1/ru/System.Collections.xml",
+        "ref/dotnet5.1/System.Collections.dll",
+        "ref/dotnet5.1/System.Collections.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.xml",
+        "ref/dotnet5.4/de/System.Collections.xml",
+        "ref/dotnet5.4/es/System.Collections.xml",
+        "ref/dotnet5.4/fr/System.Collections.xml",
+        "ref/dotnet5.4/it/System.Collections.xml",
+        "ref/dotnet5.4/ja/System.Collections.xml",
+        "ref/dotnet5.4/ko/System.Collections.xml",
+        "ref/dotnet5.4/ru/System.Collections.xml",
+        "ref/dotnet5.4/System.Collections.dll",
+        "ref/dotnet5.4/System.Collections.xml",
+        "ref/dotnet5.4/zh-hans/System.Collections.xml",
+        "ref/dotnet5.4/zh-hant/System.Collections.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Collections.xml",
+        "ref/netcore50/es/System.Collections.xml",
+        "ref/netcore50/fr/System.Collections.xml",
+        "ref/netcore50/it/System.Collections.xml",
+        "ref/netcore50/ja/System.Collections.xml",
+        "ref/netcore50/ko/System.Collections.xml",
+        "ref/netcore50/ru/System.Collections.xml",
+        "ref/netcore50/System.Collections.dll",
+        "ref/netcore50/System.Collections.xml",
+        "ref/netcore50/zh-hans/System.Collections.xml",
+        "ref/netcore50/zh-hant/System.Collections.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Collections.dll",
+        "System.Collections.4.0.11-beta-23516.nupkg",
+        "System.Collections.4.0.11-beta-23516.nupkg.sha512",
+        "System.Collections.nuspec"
+      ]
+    },
+    "System.Collections.NonGeneric/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "rVgwrFBMkmp8LI6GhAYd6Bx+2uLIXjRfNg6Ie+ASfX8ESuh9e2HNxFy2yh1MPIXZq3OAYa+0mmULVwpnEC6UDA==",
+      "files": [
+        "lib/dotnet/System.Collections.NonGeneric.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Collections.NonGeneric.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Collections.NonGeneric.xml",
+        "ref/dotnet/es/System.Collections.NonGeneric.xml",
+        "ref/dotnet/fr/System.Collections.NonGeneric.xml",
+        "ref/dotnet/it/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ja/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ko/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ru/System.Collections.NonGeneric.xml",
+        "ref/dotnet/System.Collections.NonGeneric.dll",
+        "ref/dotnet/System.Collections.NonGeneric.xml",
+        "ref/dotnet/zh-hans/System.Collections.NonGeneric.xml",
+        "ref/dotnet/zh-hant/System.Collections.NonGeneric.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Collections.NonGeneric.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Collections.NonGeneric.4.0.0.nupkg",
+        "System.Collections.NonGeneric.4.0.0.nupkg.sha512",
+        "System.Collections.NonGeneric.nuspec"
+      ]
+    },
+    "System.Collections.Specialized/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "h/PM3mqxwZzhClFW7vxdgIoT/4TBqBqHNzIphgpvqisGhe0jpE5XiBVqhZwx2QMkZO7+LJpUmIv8W3gMkPr1fg==",
+      "files": [
+        "lib/dotnet5.4/System.Collections.Specialized.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Collections.Specialized.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/es/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/fr/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/it/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ja/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ko/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ru/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/System.Collections.Specialized.dll",
+        "ref/dotnet5.1/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.Specialized.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Collections.Specialized.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Collections.Specialized.4.0.1-beta-23516.nupkg",
+        "System.Collections.Specialized.4.0.1-beta-23516.nupkg.sha512",
+        "System.Collections.Specialized.nuspec"
+      ]
+    },
+    "System.ComponentModel/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "PdAC1M7yT9EBtLpXICbOtPDpDjYSlV2RXyQ7AiKyBD7mV1DNTIK7tcM1056GIOlMoJDDdxU5Z3otBeAM8v5PAg==",
+      "files": [
+        "lib/dotnet5.4/System.ComponentModel.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.ComponentModel.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.ComponentModel.xml",
+        "ref/dotnet5.1/es/System.ComponentModel.xml",
+        "ref/dotnet5.1/fr/System.ComponentModel.xml",
+        "ref/dotnet5.1/it/System.ComponentModel.xml",
+        "ref/dotnet5.1/ja/System.ComponentModel.xml",
+        "ref/dotnet5.1/ko/System.ComponentModel.xml",
+        "ref/dotnet5.1/ru/System.ComponentModel.xml",
+        "ref/dotnet5.1/System.ComponentModel.dll",
+        "ref/dotnet5.1/System.ComponentModel.xml",
+        "ref/dotnet5.1/zh-hans/System.ComponentModel.xml",
+        "ref/dotnet5.1/zh-hant/System.ComponentModel.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.ComponentModel.xml",
+        "ref/netcore50/es/System.ComponentModel.xml",
+        "ref/netcore50/fr/System.ComponentModel.xml",
+        "ref/netcore50/it/System.ComponentModel.xml",
+        "ref/netcore50/ja/System.ComponentModel.xml",
+        "ref/netcore50/ko/System.ComponentModel.xml",
+        "ref/netcore50/ru/System.ComponentModel.xml",
+        "ref/netcore50/System.ComponentModel.dll",
+        "ref/netcore50/System.ComponentModel.xml",
+        "ref/netcore50/zh-hans/System.ComponentModel.xml",
+        "ref/netcore50/zh-hant/System.ComponentModel.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.ComponentModel.4.0.1-beta-23516.nupkg",
+        "System.ComponentModel.4.0.1-beta-23516.nupkg.sha512",
+        "System.ComponentModel.nuspec"
+      ]
+    },
+    "System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0YTzoNamTU+6qfZEYtMuGjtkJHB1MEDyFsZ5L/x97GkZO3Bw91uwdPh0DkFwQ6E8KaQTgZAecSXoboUHAcdSLA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Console.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Console.xml",
+        "ref/dotnet5.1/es/System.Console.xml",
+        "ref/dotnet5.1/fr/System.Console.xml",
+        "ref/dotnet5.1/it/System.Console.xml",
+        "ref/dotnet5.1/ja/System.Console.xml",
+        "ref/dotnet5.1/ko/System.Console.xml",
+        "ref/dotnet5.1/ru/System.Console.xml",
+        "ref/dotnet5.1/System.Console.dll",
+        "ref/dotnet5.1/System.Console.xml",
+        "ref/dotnet5.1/zh-hans/System.Console.xml",
+        "ref/dotnet5.1/zh-hant/System.Console.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Console.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Console.4.0.0-beta-23516.nupkg",
+        "System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "System.Console.nuspec"
+      ]
+    },
+    "System.Data.Common/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fMYiiL3/cXaozWH08y/kB25BZf6eBf5EWxBZnjDECNBRkaJgsa4/0S6543NK11UpsWYYHBUFsX4roSq8GddkpA==",
+      "files": [
+        "lib/dotnet5.4/System.Data.Common.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Data.Common.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Data.Common.xml",
+        "ref/dotnet5.1/es/System.Data.Common.xml",
+        "ref/dotnet5.1/fr/System.Data.Common.xml",
+        "ref/dotnet5.1/it/System.Data.Common.xml",
+        "ref/dotnet5.1/ja/System.Data.Common.xml",
+        "ref/dotnet5.1/ko/System.Data.Common.xml",
+        "ref/dotnet5.1/ru/System.Data.Common.xml",
+        "ref/dotnet5.1/System.Data.Common.dll",
+        "ref/dotnet5.1/System.Data.Common.xml",
+        "ref/dotnet5.1/zh-hans/System.Data.Common.xml",
+        "ref/dotnet5.1/zh-hant/System.Data.Common.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Data.Common.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Data.Common.4.0.1-beta-23516.nupkg",
+        "System.Data.Common.4.0.1-beta-23516.nupkg.sha512",
+        "System.Data.Common.nuspec"
+      ]
+    },
+    "System.Diagnostics.Debug/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "wK52HdO2OW7P6hVk/Q9FCnKE9WcTDA3Yio1D8xmeE+6nfOqwWw6d+jVjgn5TSuDghudJK9xq77wseiGa6i7OTQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/System.Diagnostics.Debug.dll",
+        "ref/dotnet5.1/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/System.Diagnostics.Debug.dll",
+        "ref/dotnet5.4/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Diagnostics.Debug.xml",
+        "ref/netcore50/es/System.Diagnostics.Debug.xml",
+        "ref/netcore50/fr/System.Diagnostics.Debug.xml",
+        "ref/netcore50/it/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ja/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ko/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ru/System.Diagnostics.Debug.xml",
+        "ref/netcore50/System.Diagnostics.Debug.dll",
+        "ref/netcore50/System.Diagnostics.Debug.xml",
+        "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Diagnostics.Debug.4.0.11-beta-23516.nupkg",
+        "System.Diagnostics.Debug.4.0.11-beta-23516.nupkg.sha512",
+        "System.Diagnostics.Debug.nuspec"
+      ]
+    },
+    "System.Dynamic.Runtime/4.0.0": {
+      "type": "package",
+      "sha512": "33os71rQUCLjM5pbhQqCopq9/YcqBHPBQ8WylrzNk3oJmfAR0SFwzZIKJRN2JcrkBYdzC/NtWrYVU8oroyZieA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Dynamic.Runtime.xml",
+        "ref/dotnet/es/System.Dynamic.Runtime.xml",
+        "ref/dotnet/fr/System.Dynamic.Runtime.xml",
+        "ref/dotnet/it/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ja/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ko/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ru/System.Dynamic.Runtime.xml",
+        "ref/dotnet/System.Dynamic.Runtime.dll",
+        "ref/dotnet/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Dynamic.Runtime.xml",
+        "ref/netcore50/es/System.Dynamic.Runtime.xml",
+        "ref/netcore50/fr/System.Dynamic.Runtime.xml",
+        "ref/netcore50/it/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ja/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ko/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ru/System.Dynamic.Runtime.xml",
+        "ref/netcore50/System.Dynamic.Runtime.dll",
+        "ref/netcore50/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Dynamic.Runtime.4.0.0.nupkg",
+        "System.Dynamic.Runtime.4.0.0.nupkg.sha512",
+        "System.Dynamic.Runtime.nuspec"
+      ]
+    },
+    "System.Globalization/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "htoF4cS3WhCkU3HloMj3mz+h2FHnF8Hz0po/26otT5e46LlJ8p7LpFpxckxVviyYg9Fab9gr8aIB0ZDN9Cjpig==",
+      "files": [
+        "lib/DNXCore50/System.Globalization.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Globalization.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Globalization.xml",
+        "ref/dotnet5.1/es/System.Globalization.xml",
+        "ref/dotnet5.1/fr/System.Globalization.xml",
+        "ref/dotnet5.1/it/System.Globalization.xml",
+        "ref/dotnet5.1/ja/System.Globalization.xml",
+        "ref/dotnet5.1/ko/System.Globalization.xml",
+        "ref/dotnet5.1/ru/System.Globalization.xml",
+        "ref/dotnet5.1/System.Globalization.dll",
+        "ref/dotnet5.1/System.Globalization.xml",
+        "ref/dotnet5.1/zh-hans/System.Globalization.xml",
+        "ref/dotnet5.1/zh-hant/System.Globalization.xml",
+        "ref/dotnet5.4/de/System.Globalization.xml",
+        "ref/dotnet5.4/es/System.Globalization.xml",
+        "ref/dotnet5.4/fr/System.Globalization.xml",
+        "ref/dotnet5.4/it/System.Globalization.xml",
+        "ref/dotnet5.4/ja/System.Globalization.xml",
+        "ref/dotnet5.4/ko/System.Globalization.xml",
+        "ref/dotnet5.4/ru/System.Globalization.xml",
+        "ref/dotnet5.4/System.Globalization.dll",
+        "ref/dotnet5.4/System.Globalization.xml",
+        "ref/dotnet5.4/zh-hans/System.Globalization.xml",
+        "ref/dotnet5.4/zh-hant/System.Globalization.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Globalization.xml",
+        "ref/netcore50/es/System.Globalization.xml",
+        "ref/netcore50/fr/System.Globalization.xml",
+        "ref/netcore50/it/System.Globalization.xml",
+        "ref/netcore50/ja/System.Globalization.xml",
+        "ref/netcore50/ko/System.Globalization.xml",
+        "ref/netcore50/ru/System.Globalization.xml",
+        "ref/netcore50/System.Globalization.dll",
+        "ref/netcore50/System.Globalization.xml",
+        "ref/netcore50/zh-hans/System.Globalization.xml",
+        "ref/netcore50/zh-hant/System.Globalization.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Globalization.dll",
+        "System.Globalization.4.0.11-beta-23516.nupkg",
+        "System.Globalization.4.0.11-beta-23516.nupkg.sha512",
+        "System.Globalization.nuspec"
+      ]
+    },
+    "System.Globalization.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "rqbUXiwpBCvJ18ySCsjh20zleazO+6fr3s5GihC2sVwhyS0MUl6+oc5Rzk0z6CKkS4kmxbZQSeZLsK7cFSO0ng==",
+      "files": [
+        "lib/dotnet/System.Globalization.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Globalization.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Globalization.Extensions.xml",
+        "ref/dotnet/es/System.Globalization.Extensions.xml",
+        "ref/dotnet/fr/System.Globalization.Extensions.xml",
+        "ref/dotnet/it/System.Globalization.Extensions.xml",
+        "ref/dotnet/ja/System.Globalization.Extensions.xml",
+        "ref/dotnet/ko/System.Globalization.Extensions.xml",
+        "ref/dotnet/ru/System.Globalization.Extensions.xml",
+        "ref/dotnet/System.Globalization.Extensions.dll",
+        "ref/dotnet/System.Globalization.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Globalization.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Globalization.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Globalization.Extensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Globalization.Extensions.4.0.0.nupkg",
+        "System.Globalization.Extensions.4.0.0.nupkg.sha512",
+        "System.Globalization.Extensions.nuspec"
+      ]
+    },
+    "System.IO/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dR1DaWrF0zsV2z/GVs8xVvMds6xu0ykuwv+VPou8wbpJ1XxGBK9g6v5F84DWL8Q1qi+6Kyb56wbZYdYQO8OMew==",
+      "files": [
+        "lib/DNXCore50/System.IO.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.IO.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.IO.xml",
+        "ref/dotnet5.1/es/System.IO.xml",
+        "ref/dotnet5.1/fr/System.IO.xml",
+        "ref/dotnet5.1/it/System.IO.xml",
+        "ref/dotnet5.1/ja/System.IO.xml",
+        "ref/dotnet5.1/ko/System.IO.xml",
+        "ref/dotnet5.1/ru/System.IO.xml",
+        "ref/dotnet5.1/System.IO.dll",
+        "ref/dotnet5.1/System.IO.xml",
+        "ref/dotnet5.1/zh-hans/System.IO.xml",
+        "ref/dotnet5.1/zh-hant/System.IO.xml",
+        "ref/dotnet5.4/de/System.IO.xml",
+        "ref/dotnet5.4/es/System.IO.xml",
+        "ref/dotnet5.4/fr/System.IO.xml",
+        "ref/dotnet5.4/it/System.IO.xml",
+        "ref/dotnet5.4/ja/System.IO.xml",
+        "ref/dotnet5.4/ko/System.IO.xml",
+        "ref/dotnet5.4/ru/System.IO.xml",
+        "ref/dotnet5.4/System.IO.dll",
+        "ref/dotnet5.4/System.IO.xml",
+        "ref/dotnet5.4/zh-hans/System.IO.xml",
+        "ref/dotnet5.4/zh-hant/System.IO.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.IO.xml",
+        "ref/netcore50/es/System.IO.xml",
+        "ref/netcore50/fr/System.IO.xml",
+        "ref/netcore50/it/System.IO.xml",
+        "ref/netcore50/ja/System.IO.xml",
+        "ref/netcore50/ko/System.IO.xml",
+        "ref/netcore50/ru/System.IO.xml",
+        "ref/netcore50/System.IO.dll",
+        "ref/netcore50/System.IO.xml",
+        "ref/netcore50/zh-hans/System.IO.xml",
+        "ref/netcore50/zh-hant/System.IO.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.IO.dll",
+        "System.IO.4.0.11-beta-23516.nupkg",
+        "System.IO.4.0.11-beta-23516.nupkg.sha512",
+        "System.IO.nuspec"
+      ]
+    },
+    "System.IO.FileSystem/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "KOYNQ6FeLQh0HdHVlp6IRjRGPCjyFvZRKfhYSDFi7DR0EHY3cC2rvfVj5HWJEW5KlSaa01Ct25m06yVnqSxwOQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.4/de/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/es/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/fr/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/it/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ja/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ko/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ru/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/System.IO.FileSystem.dll",
+        "ref/dotnet5.4/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/zh-hans/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/zh-hant/System.IO.FileSystem.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.IO.FileSystem.4.0.1-beta-23516.nupkg",
+        "System.IO.FileSystem.4.0.1-beta-23516.nupkg.sha512",
+        "System.IO.FileSystem.nuspec"
+      ]
+    },
+    "System.IO.FileSystem.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "7pJUvYi/Yq3A5nagqCCiOw3+aJp3xXc/Cjr8dnJDnER3/6kX3LEencfqmXUcPl9+7OvRNyPMNhqsLAcMK6K/KA==",
+      "files": [
+        "lib/dotnet/System.IO.FileSystem.Primitives.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.Primitives.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/es/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/fr/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/it/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ja/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ko/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ru/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/System.IO.FileSystem.Primitives.dll",
+        "ref/dotnet/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hans/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hant/System.IO.FileSystem.Primitives.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.Primitives.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg.sha512",
+        "System.IO.FileSystem.Primitives.nuspec"
+      ]
+    },
+    "System.Linq/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "uNxm2RB+kMeiKnY26iPvOtJLzTzNaAF4A2qqyzev6j8x8w2Dr+gg7LF7BHCwC55N7OirhHrAWUb3C0n4oi9qYw==",
+      "files": [
+        "lib/dotnet5.4/System.Linq.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Linq.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Linq.xml",
+        "ref/dotnet5.1/es/System.Linq.xml",
+        "ref/dotnet5.1/fr/System.Linq.xml",
+        "ref/dotnet5.1/it/System.Linq.xml",
+        "ref/dotnet5.1/ja/System.Linq.xml",
+        "ref/dotnet5.1/ko/System.Linq.xml",
+        "ref/dotnet5.1/ru/System.Linq.xml",
+        "ref/dotnet5.1/System.Linq.dll",
+        "ref/dotnet5.1/System.Linq.xml",
+        "ref/dotnet5.1/zh-hans/System.Linq.xml",
+        "ref/dotnet5.1/zh-hant/System.Linq.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.xml",
+        "ref/netcore50/es/System.Linq.xml",
+        "ref/netcore50/fr/System.Linq.xml",
+        "ref/netcore50/it/System.Linq.xml",
+        "ref/netcore50/ja/System.Linq.xml",
+        "ref/netcore50/ko/System.Linq.xml",
+        "ref/netcore50/ru/System.Linq.xml",
+        "ref/netcore50/System.Linq.dll",
+        "ref/netcore50/System.Linq.xml",
+        "ref/netcore50/zh-hans/System.Linq.xml",
+        "ref/netcore50/zh-hant/System.Linq.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.Linq.4.0.1-beta-23516.nupkg",
+        "System.Linq.4.0.1-beta-23516.nupkg.sha512",
+        "System.Linq.nuspec"
+      ]
+    },
+    "System.Linq.Expressions/4.0.0": {
+      "type": "package",
+      "sha512": "wlfVllrKi+evu4Hi8yoJP1dSOVXbvsy7Hs1+oz4Cykfdf6MQTPlD3LI4WKWhprn8FpU5MS3spPSbcMX5sAoJSw==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Linq.Expressions.xml",
+        "ref/dotnet/es/System.Linq.Expressions.xml",
+        "ref/dotnet/fr/System.Linq.Expressions.xml",
+        "ref/dotnet/it/System.Linq.Expressions.xml",
+        "ref/dotnet/ja/System.Linq.Expressions.xml",
+        "ref/dotnet/ko/System.Linq.Expressions.xml",
+        "ref/dotnet/ru/System.Linq.Expressions.xml",
+        "ref/dotnet/System.Linq.Expressions.dll",
+        "ref/dotnet/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hans/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hant/System.Linq.Expressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.Expressions.xml",
+        "ref/netcore50/es/System.Linq.Expressions.xml",
+        "ref/netcore50/fr/System.Linq.Expressions.xml",
+        "ref/netcore50/it/System.Linq.Expressions.xml",
+        "ref/netcore50/ja/System.Linq.Expressions.xml",
+        "ref/netcore50/ko/System.Linq.Expressions.xml",
+        "ref/netcore50/ru/System.Linq.Expressions.xml",
+        "ref/netcore50/System.Linq.Expressions.dll",
+        "ref/netcore50/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hans/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hant/System.Linq.Expressions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Linq.Expressions.4.0.0.nupkg",
+        "System.Linq.Expressions.4.0.0.nupkg.sha512",
+        "System.Linq.Expressions.nuspec"
+      ]
+    },
+    "System.ObjectModel/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Djn1wb0vP662zxbe+c3mOhvC4vkQGicsFs1Wi0/GJJpp3Eqp+oxbJ+p2Sx3O0efYueggAI5SW+BqEoczjfr1cA==",
+      "files": [
+        "lib/dotnet/System.ObjectModel.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.ObjectModel.xml",
+        "ref/dotnet/es/System.ObjectModel.xml",
+        "ref/dotnet/fr/System.ObjectModel.xml",
+        "ref/dotnet/it/System.ObjectModel.xml",
+        "ref/dotnet/ja/System.ObjectModel.xml",
+        "ref/dotnet/ko/System.ObjectModel.xml",
+        "ref/dotnet/ru/System.ObjectModel.xml",
+        "ref/dotnet/System.ObjectModel.dll",
+        "ref/dotnet/System.ObjectModel.xml",
+        "ref/dotnet/zh-hans/System.ObjectModel.xml",
+        "ref/dotnet/zh-hant/System.ObjectModel.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.ObjectModel.4.0.10.nupkg",
+        "System.ObjectModel.4.0.10.nupkg.sha512",
+        "System.ObjectModel.nuspec"
+      ]
+    },
+    "System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "sha512": "MG79ArOc8KhfAkjrimI5GFH4tML7XFo+Z1sEQGLPxrBlwfbITwrrNfYb3YoH6CpAlJHc4pcs/gZrUas/pEkTdg==",
+      "files": [
+        "ref/dnxcore50/_._",
+        "ref/netcore50/_._",
+        "runtime.json",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "System.Private.Uri.nuspec"
+      ]
+    },
+    "System.Reflection/4.1.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "wfrnDfk8p2cqJQY3TTHsJRmf3cE3wa6BacncCn4dO58lVwQNNe9ASdLrLJZlMviAjx8+1fUpj6NX7leIOyaBJA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/net46/System.Reflection.dll",
+        "lib/netcore50/System.Reflection.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Reflection.xml",
+        "ref/dotnet5.1/es/System.Reflection.xml",
+        "ref/dotnet5.1/fr/System.Reflection.xml",
+        "ref/dotnet5.1/it/System.Reflection.xml",
+        "ref/dotnet5.1/ja/System.Reflection.xml",
+        "ref/dotnet5.1/ko/System.Reflection.xml",
+        "ref/dotnet5.1/ru/System.Reflection.xml",
+        "ref/dotnet5.1/System.Reflection.dll",
+        "ref/dotnet5.1/System.Reflection.xml",
+        "ref/dotnet5.1/zh-hans/System.Reflection.xml",
+        "ref/dotnet5.1/zh-hant/System.Reflection.xml",
+        "ref/dotnet5.4/de/System.Reflection.xml",
+        "ref/dotnet5.4/es/System.Reflection.xml",
+        "ref/dotnet5.4/fr/System.Reflection.xml",
+        "ref/dotnet5.4/it/System.Reflection.xml",
+        "ref/dotnet5.4/ja/System.Reflection.xml",
+        "ref/dotnet5.4/ko/System.Reflection.xml",
+        "ref/dotnet5.4/ru/System.Reflection.xml",
+        "ref/dotnet5.4/System.Reflection.dll",
+        "ref/dotnet5.4/System.Reflection.xml",
+        "ref/dotnet5.4/zh-hans/System.Reflection.xml",
+        "ref/dotnet5.4/zh-hant/System.Reflection.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/net46/System.Reflection.dll",
+        "ref/netcore50/de/System.Reflection.xml",
+        "ref/netcore50/es/System.Reflection.xml",
+        "ref/netcore50/fr/System.Reflection.xml",
+        "ref/netcore50/it/System.Reflection.xml",
+        "ref/netcore50/ja/System.Reflection.xml",
+        "ref/netcore50/ko/System.Reflection.xml",
+        "ref/netcore50/ru/System.Reflection.xml",
+        "ref/netcore50/System.Reflection.dll",
+        "ref/netcore50/System.Reflection.xml",
+        "ref/netcore50/zh-hans/System.Reflection.xml",
+        "ref/netcore50/zh-hant/System.Reflection.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.dll",
+        "System.Reflection.4.1.0-beta-23516.nupkg",
+        "System.Reflection.4.1.0-beta-23516.nupkg.sha512",
+        "System.Reflection.nuspec"
+      ]
+    },
+    "System.Reflection.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dbYaZWCyFAu1TGYUqR2n+Q+1casSHPR2vVW0WVNkXpZbrd2BXcZ7cpvpu9C98CTHtNmyfMWCLpCclDqly23t6A==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Extensions.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Extensions.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Extensions.xml",
+        "ref/dotnet/es/System.Reflection.Extensions.xml",
+        "ref/dotnet/fr/System.Reflection.Extensions.xml",
+        "ref/dotnet/it/System.Reflection.Extensions.xml",
+        "ref/dotnet/ja/System.Reflection.Extensions.xml",
+        "ref/dotnet/ko/System.Reflection.Extensions.xml",
+        "ref/dotnet/ru/System.Reflection.Extensions.xml",
+        "ref/dotnet/System.Reflection.Extensions.dll",
+        "ref/dotnet/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Extensions.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Extensions.dll",
+        "ref/netcore50/System.Reflection.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll",
+        "System.Reflection.Extensions.4.0.0.nupkg",
+        "System.Reflection.Extensions.4.0.0.nupkg.sha512",
+        "System.Reflection.Extensions.nuspec"
+      ]
+    },
+    "System.Reflection.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "n9S0XpKv2ruc17FSnaiX6nV47VfHTZ1wLjKZlAirUZCvDQCH71mVp+Ohabn0xXLh5pK2PKp45HCxkqu5Fxn/lA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Primitives.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Primitives.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Primitives.xml",
+        "ref/dotnet/es/System.Reflection.Primitives.xml",
+        "ref/dotnet/fr/System.Reflection.Primitives.xml",
+        "ref/dotnet/it/System.Reflection.Primitives.xml",
+        "ref/dotnet/ja/System.Reflection.Primitives.xml",
+        "ref/dotnet/ko/System.Reflection.Primitives.xml",
+        "ref/dotnet/ru/System.Reflection.Primitives.xml",
+        "ref/dotnet/System.Reflection.Primitives.dll",
+        "ref/dotnet/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Primitives.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Primitives.dll",
+        "ref/netcore50/System.Reflection.Primitives.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll",
+        "System.Reflection.Primitives.4.0.0.nupkg",
+        "System.Reflection.Primitives.4.0.0.nupkg.sha512",
+        "System.Reflection.Primitives.nuspec"
+      ]
+    },
+    "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "vA+eepDQ8ZFRodTHc+w8nBTkUqD+rEgirRR38tW6Z/uCDTzBPHGg6TqhqBhmY4wdWsT8/7fjwFPb7/dxldQW7g==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.TypeExtensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Reflection.TypeExtensions.dll",
+        "lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/es/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/fr/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/it/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ja/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ko/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ru/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/System.Reflection.TypeExtensions.dll",
+        "ref/dotnet5.1/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/zh-hans/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/zh-hant/System.Reflection.TypeExtensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Reflection.TypeExtensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "System.Reflection.TypeExtensions.4.1.0-beta-23516.nupkg",
+        "System.Reflection.TypeExtensions.4.1.0-beta-23516.nupkg.sha512",
+        "System.Reflection.TypeExtensions.nuspec"
+      ]
+    },
+    "System.Resources.ResourceManager/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "d1PiB1k57GP5EJZJKnJ+LgrOQCgHPnn5oySQAy4pL2MpEDDpTyTPKv+q9aRWUA25ICXaHkWJzeTkj898ePteWQ==",
+      "files": [
+        "lib/DNXCore50/System.Resources.ResourceManager.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Resources.ResourceManager.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/es/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/fr/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/it/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ja/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ko/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ru/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/System.Resources.ResourceManager.dll",
+        "ref/dotnet5.1/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Resources.ResourceManager.xml",
+        "ref/netcore50/es/System.Resources.ResourceManager.xml",
+        "ref/netcore50/fr/System.Resources.ResourceManager.xml",
+        "ref/netcore50/it/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ja/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ko/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ru/System.Resources.ResourceManager.xml",
+        "ref/netcore50/System.Resources.ResourceManager.dll",
+        "ref/netcore50/System.Resources.ResourceManager.xml",
+        "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll",
+        "System.Resources.ResourceManager.4.0.1-beta-23516.nupkg",
+        "System.Resources.ResourceManager.4.0.1-beta-23516.nupkg.sha512",
+        "System.Resources.ResourceManager.nuspec"
+      ]
+    },
+    "System.Runtime/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "R174ctQjJnCIVxA2Yzp1v68wfLfPSROZWrbaSBcnEzHAQbOjprBQi37aWdr5y05Pq2J/O7h6SjTsYhVOLdiRYQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.xml",
+        "ref/dotnet5.1/es/System.Runtime.xml",
+        "ref/dotnet5.1/fr/System.Runtime.xml",
+        "ref/dotnet5.1/it/System.Runtime.xml",
+        "ref/dotnet5.1/ja/System.Runtime.xml",
+        "ref/dotnet5.1/ko/System.Runtime.xml",
+        "ref/dotnet5.1/ru/System.Runtime.xml",
+        "ref/dotnet5.1/System.Runtime.dll",
+        "ref/dotnet5.1/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.3/de/System.Runtime.xml",
+        "ref/dotnet5.3/es/System.Runtime.xml",
+        "ref/dotnet5.3/fr/System.Runtime.xml",
+        "ref/dotnet5.3/it/System.Runtime.xml",
+        "ref/dotnet5.3/ja/System.Runtime.xml",
+        "ref/dotnet5.3/ko/System.Runtime.xml",
+        "ref/dotnet5.3/ru/System.Runtime.xml",
+        "ref/dotnet5.3/System.Runtime.dll",
+        "ref/dotnet5.3/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.4/de/System.Runtime.xml",
+        "ref/dotnet5.4/es/System.Runtime.xml",
+        "ref/dotnet5.4/fr/System.Runtime.xml",
+        "ref/dotnet5.4/it/System.Runtime.xml",
+        "ref/dotnet5.4/ja/System.Runtime.xml",
+        "ref/dotnet5.4/ko/System.Runtime.xml",
+        "ref/dotnet5.4/ru/System.Runtime.xml",
+        "ref/dotnet5.4/System.Runtime.dll",
+        "ref/dotnet5.4/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.xml",
+        "ref/netcore50/es/System.Runtime.xml",
+        "ref/netcore50/fr/System.Runtime.xml",
+        "ref/netcore50/it/System.Runtime.xml",
+        "ref/netcore50/ja/System.Runtime.xml",
+        "ref/netcore50/ko/System.Runtime.xml",
+        "ref/netcore50/ru/System.Runtime.xml",
+        "ref/netcore50/System.Runtime.dll",
+        "ref/netcore50/System.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.dll",
+        "System.Runtime.4.0.21-beta-23516.nupkg",
+        "System.Runtime.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.nuspec"
+      ]
+    },
+    "System.Runtime.Extensions/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HX4wNPrcCV9D+jpbsJCRPuVJbcDM+JobSotQWKq40lCq0WJbJi+0lNQ/T1zHEdWcf4W2PmtMkug1rW7yKW9PiQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/es/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/it/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/System.Runtime.Extensions.dll",
+        "ref/dotnet5.1/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/de/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/es/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/it/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/System.Runtime.Extensions.dll",
+        "ref/dotnet5.4/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.Extensions.xml",
+        "ref/netcore50/es/System.Runtime.Extensions.xml",
+        "ref/netcore50/fr/System.Runtime.Extensions.xml",
+        "ref/netcore50/it/System.Runtime.Extensions.xml",
+        "ref/netcore50/ja/System.Runtime.Extensions.xml",
+        "ref/netcore50/ko/System.Runtime.Extensions.xml",
+        "ref/netcore50/ru/System.Runtime.Extensions.xml",
+        "ref/netcore50/System.Runtime.Extensions.dll",
+        "ref/netcore50/System.Runtime.Extensions.xml",
+        "ref/netcore50/zh-hans/System.Runtime.Extensions.xml",
+        "ref/netcore50/zh-hant/System.Runtime.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Runtime.Extensions.4.0.11-beta-23516.nupkg",
+        "System.Runtime.Extensions.4.0.11-beta-23516.nupkg.sha512",
+        "System.Runtime.Extensions.nuspec"
+      ]
+    },
+    "System.Runtime.Handles/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "QD37drGPHLLPSf8iZx4wyUx7niFU3D8U79GQ56CkRW4qZJ1qSAmZU9AqLuBdLoQWLRmniy9panML6bly4ob6qw==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Handles.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Runtime.Handles.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.4/de/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/es/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/fr/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/it/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ja/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ko/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ru/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/System.Runtime.Handles.dll",
+        "ref/dotnet5.4/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.Handles.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll",
+        "System.Runtime.Handles.4.0.1-beta-23516.nupkg",
+        "System.Runtime.Handles.4.0.1-beta-23516.nupkg.sha512",
+        "System.Runtime.Handles.nuspec"
+      ]
+    },
+    "System.Runtime.InteropServices/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "XRWX4yFPKQ3t3hbPReLB9d2ViTuGqMLYHGcuWteIYgoIaKtHp7Uae2xHjiUG/QZbVN6vUp+KnL04aIi5dOj8lQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.InteropServices.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.InteropServices.dll",
+        "lib/win8/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.2/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.2/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.3/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.4/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.InteropServices.xml",
+        "ref/netcore50/es/System.Runtime.InteropServices.xml",
+        "ref/netcore50/fr/System.Runtime.InteropServices.xml",
+        "ref/netcore50/it/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ja/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ko/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ru/System.Runtime.InteropServices.xml",
+        "ref/netcore50/System.Runtime.InteropServices.dll",
+        "ref/netcore50/System.Runtime.InteropServices.xml",
+        "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/win8/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll",
+        "System.Runtime.InteropServices.4.0.21-beta-23516.nupkg",
+        "System.Runtime.InteropServices.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.InteropServices.nuspec"
+      ]
+    },
+    "System.Text.Encoding/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "gk4da/Y3VReZpIeQ3UDTCknbkO/FuYKOJtP+5+Vtc07mTcPHvhgbZLXEGTTneP6yWPDWTTh20nZZMF/19YsRtA==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Text.Encoding.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Text.Encoding.xml",
+        "ref/dotnet5.1/es/System.Text.Encoding.xml",
+        "ref/dotnet5.1/fr/System.Text.Encoding.xml",
+        "ref/dotnet5.1/it/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ja/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ko/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ru/System.Text.Encoding.xml",
+        "ref/dotnet5.1/System.Text.Encoding.dll",
+        "ref/dotnet5.1/System.Text.Encoding.xml",
+        "ref/dotnet5.1/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet5.1/zh-hant/System.Text.Encoding.xml",
+        "ref/dotnet5.4/de/System.Text.Encoding.xml",
+        "ref/dotnet5.4/es/System.Text.Encoding.xml",
+        "ref/dotnet5.4/fr/System.Text.Encoding.xml",
+        "ref/dotnet5.4/it/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ja/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ko/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ru/System.Text.Encoding.xml",
+        "ref/dotnet5.4/System.Text.Encoding.dll",
+        "ref/dotnet5.4/System.Text.Encoding.xml",
+        "ref/dotnet5.4/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet5.4/zh-hant/System.Text.Encoding.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Text.Encoding.xml",
+        "ref/netcore50/es/System.Text.Encoding.xml",
+        "ref/netcore50/fr/System.Text.Encoding.xml",
+        "ref/netcore50/it/System.Text.Encoding.xml",
+        "ref/netcore50/ja/System.Text.Encoding.xml",
+        "ref/netcore50/ko/System.Text.Encoding.xml",
+        "ref/netcore50/ru/System.Text.Encoding.xml",
+        "ref/netcore50/System.Text.Encoding.dll",
+        "ref/netcore50/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hans/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hant/System.Text.Encoding.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll",
+        "System.Text.Encoding.4.0.11-beta-23516.nupkg",
+        "System.Text.Encoding.4.0.11-beta-23516.nupkg.sha512",
+        "System.Text.Encoding.nuspec"
+      ]
+    },
+    "System.Text.Encoding.Extensions/4.0.10": {
+      "type": "package",
+      "sha512": "TZvlwXMxKo3bSRIcsWZLCIzIhLbvlz+mGeKYRZv/zUiSoQzGOwkYeBu6hOw2XPQgKqT0F4Rv8zqKdvmp2fWKYg==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/es/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/fr/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/it/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ja/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ko/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ru/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/System.Text.Encoding.Extensions.dll",
+        "ref/dotnet/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Text.Encoding.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg.sha512",
+        "System.Text.Encoding.Extensions.nuspec"
+      ]
+    },
+    "System.Text.RegularExpressions/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0vDuHXJePpfMCecWBNOabOKCvzfTbFMNcGgklt3l5+RqHV5SzmF7RUVpuet8V0rJX30ROlL66xdehw2Rdsn2DA==",
+      "files": [
+        "lib/dotnet/System.Text.RegularExpressions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.RegularExpressions.xml",
+        "ref/dotnet/es/System.Text.RegularExpressions.xml",
+        "ref/dotnet/fr/System.Text.RegularExpressions.xml",
+        "ref/dotnet/it/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ja/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ko/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ru/System.Text.RegularExpressions.xml",
+        "ref/dotnet/System.Text.RegularExpressions.dll",
+        "ref/dotnet/System.Text.RegularExpressions.xml",
+        "ref/dotnet/zh-hans/System.Text.RegularExpressions.xml",
+        "ref/dotnet/zh-hant/System.Text.RegularExpressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Text.RegularExpressions.4.0.10.nupkg",
+        "System.Text.RegularExpressions.4.0.10.nupkg.sha512",
+        "System.Text.RegularExpressions.nuspec"
+      ]
+    },
+    "System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "AiuvOzOo6CZpIIw3yGJZcs3IhiCZcy0P/ThubazmWExERHJZoOnD/jB+Bn2gxTAD0rc/ytrRdBur9PuX6DvvvA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.xml",
+        "ref/dotnet5.1/es/System.Threading.xml",
+        "ref/dotnet5.1/fr/System.Threading.xml",
+        "ref/dotnet5.1/it/System.Threading.xml",
+        "ref/dotnet5.1/ja/System.Threading.xml",
+        "ref/dotnet5.1/ko/System.Threading.xml",
+        "ref/dotnet5.1/ru/System.Threading.xml",
+        "ref/dotnet5.1/System.Threading.dll",
+        "ref/dotnet5.1/System.Threading.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.xml",
+        "ref/dotnet5.4/de/System.Threading.xml",
+        "ref/dotnet5.4/es/System.Threading.xml",
+        "ref/dotnet5.4/fr/System.Threading.xml",
+        "ref/dotnet5.4/it/System.Threading.xml",
+        "ref/dotnet5.4/ja/System.Threading.xml",
+        "ref/dotnet5.4/ko/System.Threading.xml",
+        "ref/dotnet5.4/ru/System.Threading.xml",
+        "ref/dotnet5.4/System.Threading.dll",
+        "ref/dotnet5.4/System.Threading.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.xml",
+        "ref/netcore50/es/System.Threading.xml",
+        "ref/netcore50/fr/System.Threading.xml",
+        "ref/netcore50/it/System.Threading.xml",
+        "ref/netcore50/ja/System.Threading.xml",
+        "ref/netcore50/ko/System.Threading.xml",
+        "ref/netcore50/ru/System.Threading.xml",
+        "ref/netcore50/System.Threading.dll",
+        "ref/netcore50/System.Threading.xml",
+        "ref/netcore50/zh-hans/System.Threading.xml",
+        "ref/netcore50/zh-hant/System.Threading.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Threading.4.0.11-beta-23516.nupkg",
+        "System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.nuspec"
+      ]
+    },
+    "System.Threading.Overlapped/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "X5LuQFhM5FTqaez3eXKJ9CbfSGZ7wj6j4hSVtxct3zmwQXLqG95qoWdvILcgN7xtrDOBIFtpiyDg0vmoI0jE2A==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Overlapped.dll",
+        "lib/net46/System.Threading.Overlapped.dll",
+        "lib/netcore50/System.Threading.Overlapped.dll",
+        "ref/dotnet/de/System.Threading.Overlapped.xml",
+        "ref/dotnet/es/System.Threading.Overlapped.xml",
+        "ref/dotnet/fr/System.Threading.Overlapped.xml",
+        "ref/dotnet/it/System.Threading.Overlapped.xml",
+        "ref/dotnet/ja/System.Threading.Overlapped.xml",
+        "ref/dotnet/ko/System.Threading.Overlapped.xml",
+        "ref/dotnet/ru/System.Threading.Overlapped.xml",
+        "ref/dotnet/System.Threading.Overlapped.dll",
+        "ref/dotnet/System.Threading.Overlapped.xml",
+        "ref/dotnet/zh-hans/System.Threading.Overlapped.xml",
+        "ref/dotnet/zh-hant/System.Threading.Overlapped.xml",
+        "ref/net46/System.Threading.Overlapped.dll",
+        "System.Threading.Overlapped.4.0.0.nupkg",
+        "System.Threading.Overlapped.4.0.0.nupkg.sha512",
+        "System.Threading.Overlapped.nuspec"
+      ]
+    },
+    "System.Threading.Tasks/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "xjN0l+GsHEdV3G2lKF7DnH7kEM2OXoWq56jcvByNaiirrs1om5RyI6gwX7F4rTbkf8eZk1pjg01l4CI3nLyTKg==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Tasks.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Threading.Tasks.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/es/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/fr/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/it/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ja/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ko/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ru/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/System.Threading.Tasks.dll",
+        "ref/dotnet5.1/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/de/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/es/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/fr/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/it/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ja/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ko/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ru/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/System.Threading.Tasks.dll",
+        "ref/dotnet5.4/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.Tasks.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.Tasks.xml",
+        "ref/netcore50/es/System.Threading.Tasks.xml",
+        "ref/netcore50/fr/System.Threading.Tasks.xml",
+        "ref/netcore50/it/System.Threading.Tasks.xml",
+        "ref/netcore50/ja/System.Threading.Tasks.xml",
+        "ref/netcore50/ko/System.Threading.Tasks.xml",
+        "ref/netcore50/ru/System.Threading.Tasks.xml",
+        "ref/netcore50/System.Threading.Tasks.dll",
+        "ref/netcore50/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll",
+        "System.Threading.Tasks.4.0.11-beta-23516.nupkg",
+        "System.Threading.Tasks.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.Tasks.nuspec"
+      ]
+    },
+    "System.Xml.ReaderWriter/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "VdmWWMH7otrYV7D+cviUo7XjX0jzDnD/lTGSZTlZqfIQ5PhXk85j+6P0TK9od3PnOd5ZIM+pOk01G/J+3nh9/w==",
+      "files": [
+        "lib/dotnet/System.Xml.ReaderWriter.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/es/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/fr/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/it/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ja/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ko/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ru/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/System.Xml.ReaderWriter.dll",
+        "ref/dotnet/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/zh-hans/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/zh-hant/System.Xml.ReaderWriter.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Xml.ReaderWriter.4.0.10.nupkg",
+        "System.Xml.ReaderWriter.4.0.10.nupkg.sha512",
+        "System.Xml.ReaderWriter.nuspec"
+      ]
+    },
+    "System.Xml.XmlDocument/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Al+MOyRvCL9SlJYzInF9cH9Sxlf4eBLtD1AadyZVaRqhmcTYDst/AEf6GerqQ4hHfrGmeCflfxWPc2BYBJ2nug==",
+      "files": [
+        "lib/dotnet5.4/System.Xml.XmlDocument.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Xml.XmlDocument.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/es/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/fr/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/it/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ja/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ko/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ru/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/System.Xml.XmlDocument.dll",
+        "ref/dotnet5.1/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/zh-hans/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/zh-hant/System.Xml.XmlDocument.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Xml.XmlDocument.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Xml.XmlDocument.4.0.1-beta-23516.nupkg",
+        "System.Xml.XmlDocument.4.0.1-beta-23516.nupkg.sha512",
+        "System.Xml.XmlDocument.nuspec"
+      ]
+    }
+  },
+  "projectFileDependencyGroups": {
+    "": [
+      "Microsoft.Extensions.PlatformAbstractions >= 1.0.0-rc1-final",
+      "System.Collections.Specialized >= 4.0.1-beta-23516",
+      "System.Globalization >= 4.0.11-beta-23516",
+      "System.IO >= 4.0.11-beta-23516",
+      "System.Xml.XmlDocument >= 4.0.1-beta-23516"
+    ],
+    "DNXCore,Version=v5.0": [
+      "Microsoft.CSharp >= 4.0.1-beta-23516",
+      "System.Console >= 4.0.0-beta-23516",
+      "System.Collections >= 4.0.11-beta-23516",
+      "System.Linq >= 4.0.1-beta-23516",
+      "System.Runtime >= 4.0.21-beta-23516",
+      "System.Threading >= 4.0.11-beta-23516",
+      "System.Reflection >= 4.1.0-beta-23516",
+      "System.Reflection.TypeExtensions >= 4.1.0-beta-23516",
+      "Microsoft.Data.Sqlite >= 1.0.0-rc1-final",
+      "MapGuideDotNetCoreApi >= 3.1.0"
+    ]
+  }
+}
\ No newline at end of file


Property changes on: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide
___________________________________________________________________
Added: svn:ignore
   + TestMapGuide.xproj.user


Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Program.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Program.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Program.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TestMapGuide
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Properties/AssemblyInfo.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Properties/AssemblyInfo.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/Properties/AssemblyInfo.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TestMapGuide")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TestMapGuide")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d888b391-a169-4b5a-8741-def21d995cee")]

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/TestMapGuide.xproj
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/TestMapGuide.xproj	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/TestMapGuide.xproj	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+  </PropertyGroup>
+
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>d888b391-a169-4b5a-8741-def21d995cee</ProjectGuid>
+    <RootNamespace>TestMapGuide</RootNamespace>
+    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
+    <OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <SchemaVersion>2.0</SchemaVersion>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
+</Project>

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,33 @@
+{
+  "version": "1.0.0-*",
+  "description": "TestMapGuide Console Application",
+  "authors": [ "Jackie Ng" ],
+  "tags": [ "" ],
+  "projectUrl": "",
+  "licenseUrl": "",
+
+  "compilationOptions": {
+    "emitEntryPoint": true
+  },
+
+    "dependencies": {
+        "TestCommon": "1.0.0-*"
+    },
+
+  "commands": {
+    "TestMapGuide": "TestMapGuide"
+  },
+
+  "frameworks": {
+    "dnx451": { },
+    "dnxcore50": {
+      "dependencies": {
+        "Microsoft.CSharp": "4.0.1-beta-23516",
+        "System.Collections": "4.0.11-beta-23516",
+        "System.Console": "4.0.0-beta-23516",
+        "System.Linq": "4.0.1-beta-23516",
+        "System.Threading": "4.0.11-beta-23516"
+      }
+    }
+  }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.lock.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.lock.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuide/project.lock.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,2201 @@
+{
+  "locked": false,
+  "version": 2,
+  "targets": {
+    "DNX,Version=v4.5.1": {
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.5.1"
+      }
+    },
+    "DNXCore,Version=v5.0": {
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Diagnostics.Debug.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.IO/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.20": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Tasks.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": ".NETPlatform,Version=v5.4",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516"
+        }
+      }
+    },
+    "DNX,Version=v4.5.1/win7-x86": {
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.5.1"
+      }
+    },
+    "DNX,Version=v4.5.1/win7-x64": {
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.5.1"
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x86": {
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Diagnostics.Debug.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.IO/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.20": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": ".NETPlatform,Version=v5.4",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516"
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x64": {
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Diagnostics.Debug.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.IO/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.20": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": ".NETPlatform,Version=v5.4",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516"
+        }
+      }
+    }
+  },
+  "libraries": {
+    "TestCommon/1.0.0": {
+      "type": "project",
+      "path": "../TestCommon/project.json"
+    },
+    "Microsoft.CSharp/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fb+HO3nIjHao9lqsVVM0ne3GM/+1EfRQUoM58cxEOt+5biy/8DQ1nxIahZ9VaJKw7Wgb6XhRhsdwg8DkePEOJA==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.CSharp.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/Microsoft.CSharp.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg.sha512",
+        "Microsoft.CSharp.nuspec",
+        "ref/dotnet5.1/de/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/es/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/fr/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/it/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ja/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ko/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/Microsoft.CSharp.dll",
+        "ref/dotnet5.1/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ru/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hans/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hant/Microsoft.CSharp.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/Microsoft.CSharp.xml",
+        "ref/netcore50/es/Microsoft.CSharp.xml",
+        "ref/netcore50/fr/Microsoft.CSharp.xml",
+        "ref/netcore50/it/Microsoft.CSharp.xml",
+        "ref/netcore50/ja/Microsoft.CSharp.xml",
+        "ref/netcore50/ko/Microsoft.CSharp.xml",
+        "ref/netcore50/Microsoft.CSharp.dll",
+        "ref/netcore50/Microsoft.CSharp.xml",
+        "ref/netcore50/ru/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hans/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hant/Microsoft.CSharp.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._"
+      ]
+    },
+    "runtime.win7.System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "pfQrTtnYcWOtI3RrpqjAzwT3I55ivTVZFpbKYG59dYTTvaLFGbs2njc/mrXHij6GylyJ2YjekS/9r6I8X3LV1A==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Console.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.Console.dll",
+        "runtimes/win7/lib/net/_._"
+      ]
+    },
+    "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HphDhue34J/4+1rIMtInY1FWK1oLEMpxIpxGeNnhIlQf7hv5QDf05aWEC6180qbgkPBCFwyGnwWRBnONApwbBQ==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Private.Uri.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll",
+        "runtimes/win7/lib/netcore50/System.Private.Uri.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll"
+      ]
+    },
+    "runtime.win7.System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "paSNXQ5Y6Exu3OpekooyMJFQ8mitn69fGO5Br3XLIfQ1KiMYVmRf+o6dMprC0SpPROVCiCxdUaJx5XkDEVL3uA==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Threading.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Threading.dll",
+        "runtimes/win7/lib/netcore50/System.Threading.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.dll"
+      ]
+    },
+    "System.Collections/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TDca4OETV0kkXdpkyivMw1/EKKD1Sa/NVAjirw+fA0LZ37jLDYX+KhPPUQxgkvhCe/SVvxETD5Viiudza2k7OQ==",
+      "files": [
+        "lib/DNXCore50/System.Collections.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Collections.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.xml",
+        "ref/dotnet5.1/es/System.Collections.xml",
+        "ref/dotnet5.1/fr/System.Collections.xml",
+        "ref/dotnet5.1/it/System.Collections.xml",
+        "ref/dotnet5.1/ja/System.Collections.xml",
+        "ref/dotnet5.1/ko/System.Collections.xml",
+        "ref/dotnet5.1/ru/System.Collections.xml",
+        "ref/dotnet5.1/System.Collections.dll",
+        "ref/dotnet5.1/System.Collections.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.xml",
+        "ref/dotnet5.4/de/System.Collections.xml",
+        "ref/dotnet5.4/es/System.Collections.xml",
+        "ref/dotnet5.4/fr/System.Collections.xml",
+        "ref/dotnet5.4/it/System.Collections.xml",
+        "ref/dotnet5.4/ja/System.Collections.xml",
+        "ref/dotnet5.4/ko/System.Collections.xml",
+        "ref/dotnet5.4/ru/System.Collections.xml",
+        "ref/dotnet5.4/System.Collections.dll",
+        "ref/dotnet5.4/System.Collections.xml",
+        "ref/dotnet5.4/zh-hans/System.Collections.xml",
+        "ref/dotnet5.4/zh-hant/System.Collections.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Collections.xml",
+        "ref/netcore50/es/System.Collections.xml",
+        "ref/netcore50/fr/System.Collections.xml",
+        "ref/netcore50/it/System.Collections.xml",
+        "ref/netcore50/ja/System.Collections.xml",
+        "ref/netcore50/ko/System.Collections.xml",
+        "ref/netcore50/ru/System.Collections.xml",
+        "ref/netcore50/System.Collections.dll",
+        "ref/netcore50/System.Collections.xml",
+        "ref/netcore50/zh-hans/System.Collections.xml",
+        "ref/netcore50/zh-hant/System.Collections.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Collections.dll",
+        "System.Collections.4.0.11-beta-23516.nupkg",
+        "System.Collections.4.0.11-beta-23516.nupkg.sha512",
+        "System.Collections.nuspec"
+      ]
+    },
+    "System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0YTzoNamTU+6qfZEYtMuGjtkJHB1MEDyFsZ5L/x97GkZO3Bw91uwdPh0DkFwQ6E8KaQTgZAecSXoboUHAcdSLA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Console.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Console.xml",
+        "ref/dotnet5.1/es/System.Console.xml",
+        "ref/dotnet5.1/fr/System.Console.xml",
+        "ref/dotnet5.1/it/System.Console.xml",
+        "ref/dotnet5.1/ja/System.Console.xml",
+        "ref/dotnet5.1/ko/System.Console.xml",
+        "ref/dotnet5.1/ru/System.Console.xml",
+        "ref/dotnet5.1/System.Console.dll",
+        "ref/dotnet5.1/System.Console.xml",
+        "ref/dotnet5.1/zh-hans/System.Console.xml",
+        "ref/dotnet5.1/zh-hant/System.Console.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Console.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Console.4.0.0-beta-23516.nupkg",
+        "System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "System.Console.nuspec"
+      ]
+    },
+    "System.Diagnostics.Debug/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "pi2KthuvI2LWV2c2V+fwReDsDiKpNl040h6DcwFOb59SafsPT/V1fCy0z66OKwysurJkBMmp5j5CBe3Um+ub0g==",
+      "files": [
+        "lib/DNXCore50/System.Diagnostics.Debug.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Diagnostics.Debug.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet/System.Diagnostics.Debug.dll",
+        "ref/dotnet/System.Diagnostics.Debug.xml",
+        "ref/dotnet/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll",
+        "System.Diagnostics.Debug.4.0.10.nupkg",
+        "System.Diagnostics.Debug.4.0.10.nupkg.sha512",
+        "System.Diagnostics.Debug.nuspec"
+      ]
+    },
+    "System.Dynamic.Runtime/4.0.0": {
+      "type": "package",
+      "sha512": "33os71rQUCLjM5pbhQqCopq9/YcqBHPBQ8WylrzNk3oJmfAR0SFwzZIKJRN2JcrkBYdzC/NtWrYVU8oroyZieA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Dynamic.Runtime.xml",
+        "ref/dotnet/es/System.Dynamic.Runtime.xml",
+        "ref/dotnet/fr/System.Dynamic.Runtime.xml",
+        "ref/dotnet/it/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ja/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ko/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ru/System.Dynamic.Runtime.xml",
+        "ref/dotnet/System.Dynamic.Runtime.dll",
+        "ref/dotnet/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Dynamic.Runtime.xml",
+        "ref/netcore50/es/System.Dynamic.Runtime.xml",
+        "ref/netcore50/fr/System.Dynamic.Runtime.xml",
+        "ref/netcore50/it/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ja/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ko/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ru/System.Dynamic.Runtime.xml",
+        "ref/netcore50/System.Dynamic.Runtime.dll",
+        "ref/netcore50/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Dynamic.Runtime.4.0.0.nupkg",
+        "System.Dynamic.Runtime.4.0.0.nupkg.sha512",
+        "System.Dynamic.Runtime.nuspec"
+      ]
+    },
+    "System.Globalization/4.0.10": {
+      "type": "package",
+      "sha512": "kzRtbbCNAxdafFBDogcM36ehA3th8c1PGiz8QRkZn8O5yMBorDHSK8/TGJPYOaCS5zdsGk0u9qXHnW91nqy7fw==",
+      "files": [
+        "lib/DNXCore50/System.Globalization.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Globalization.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Globalization.xml",
+        "ref/dotnet/es/System.Globalization.xml",
+        "ref/dotnet/fr/System.Globalization.xml",
+        "ref/dotnet/it/System.Globalization.xml",
+        "ref/dotnet/ja/System.Globalization.xml",
+        "ref/dotnet/ko/System.Globalization.xml",
+        "ref/dotnet/ru/System.Globalization.xml",
+        "ref/dotnet/System.Globalization.dll",
+        "ref/dotnet/System.Globalization.xml",
+        "ref/dotnet/zh-hans/System.Globalization.xml",
+        "ref/dotnet/zh-hant/System.Globalization.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Globalization.dll",
+        "System.Globalization.4.0.10.nupkg",
+        "System.Globalization.4.0.10.nupkg.sha512",
+        "System.Globalization.nuspec"
+      ]
+    },
+    "System.IO/4.0.0": {
+      "type": "package",
+      "sha512": "MoCHQ0u5n0OMwUS8OX4Gl48qKiQziSW5cXvt82d+MmAcsLq9OL90+ihnu/aJ1h6OOYcBswrZAEuApfZha9w2lg==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.IO.xml",
+        "ref/dotnet/es/System.IO.xml",
+        "ref/dotnet/fr/System.IO.xml",
+        "ref/dotnet/it/System.IO.xml",
+        "ref/dotnet/ja/System.IO.xml",
+        "ref/dotnet/ko/System.IO.xml",
+        "ref/dotnet/ru/System.IO.xml",
+        "ref/dotnet/System.IO.dll",
+        "ref/dotnet/System.IO.xml",
+        "ref/dotnet/zh-hans/System.IO.xml",
+        "ref/dotnet/zh-hant/System.IO.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.IO.xml",
+        "ref/netcore50/es/System.IO.xml",
+        "ref/netcore50/fr/System.IO.xml",
+        "ref/netcore50/it/System.IO.xml",
+        "ref/netcore50/ja/System.IO.xml",
+        "ref/netcore50/ko/System.IO.xml",
+        "ref/netcore50/ru/System.IO.xml",
+        "ref/netcore50/System.IO.dll",
+        "ref/netcore50/System.IO.xml",
+        "ref/netcore50/zh-hans/System.IO.xml",
+        "ref/netcore50/zh-hant/System.IO.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.IO.4.0.0.nupkg",
+        "System.IO.4.0.0.nupkg.sha512",
+        "System.IO.nuspec"
+      ]
+    },
+    "System.IO.FileSystem.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "7pJUvYi/Yq3A5nagqCCiOw3+aJp3xXc/Cjr8dnJDnER3/6kX3LEencfqmXUcPl9+7OvRNyPMNhqsLAcMK6K/KA==",
+      "files": [
+        "lib/dotnet/System.IO.FileSystem.Primitives.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.Primitives.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/es/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/fr/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/it/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ja/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ko/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ru/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/System.IO.FileSystem.Primitives.dll",
+        "ref/dotnet/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hans/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hant/System.IO.FileSystem.Primitives.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.Primitives.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg.sha512",
+        "System.IO.FileSystem.Primitives.nuspec"
+      ]
+    },
+    "System.Linq/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "uNxm2RB+kMeiKnY26iPvOtJLzTzNaAF4A2qqyzev6j8x8w2Dr+gg7LF7BHCwC55N7OirhHrAWUb3C0n4oi9qYw==",
+      "files": [
+        "lib/dotnet5.4/System.Linq.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Linq.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Linq.xml",
+        "ref/dotnet5.1/es/System.Linq.xml",
+        "ref/dotnet5.1/fr/System.Linq.xml",
+        "ref/dotnet5.1/it/System.Linq.xml",
+        "ref/dotnet5.1/ja/System.Linq.xml",
+        "ref/dotnet5.1/ko/System.Linq.xml",
+        "ref/dotnet5.1/ru/System.Linq.xml",
+        "ref/dotnet5.1/System.Linq.dll",
+        "ref/dotnet5.1/System.Linq.xml",
+        "ref/dotnet5.1/zh-hans/System.Linq.xml",
+        "ref/dotnet5.1/zh-hant/System.Linq.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.xml",
+        "ref/netcore50/es/System.Linq.xml",
+        "ref/netcore50/fr/System.Linq.xml",
+        "ref/netcore50/it/System.Linq.xml",
+        "ref/netcore50/ja/System.Linq.xml",
+        "ref/netcore50/ko/System.Linq.xml",
+        "ref/netcore50/ru/System.Linq.xml",
+        "ref/netcore50/System.Linq.dll",
+        "ref/netcore50/System.Linq.xml",
+        "ref/netcore50/zh-hans/System.Linq.xml",
+        "ref/netcore50/zh-hant/System.Linq.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.Linq.4.0.1-beta-23516.nupkg",
+        "System.Linq.4.0.1-beta-23516.nupkg.sha512",
+        "System.Linq.nuspec"
+      ]
+    },
+    "System.Linq.Expressions/4.0.0": {
+      "type": "package",
+      "sha512": "wlfVllrKi+evu4Hi8yoJP1dSOVXbvsy7Hs1+oz4Cykfdf6MQTPlD3LI4WKWhprn8FpU5MS3spPSbcMX5sAoJSw==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Linq.Expressions.xml",
+        "ref/dotnet/es/System.Linq.Expressions.xml",
+        "ref/dotnet/fr/System.Linq.Expressions.xml",
+        "ref/dotnet/it/System.Linq.Expressions.xml",
+        "ref/dotnet/ja/System.Linq.Expressions.xml",
+        "ref/dotnet/ko/System.Linq.Expressions.xml",
+        "ref/dotnet/ru/System.Linq.Expressions.xml",
+        "ref/dotnet/System.Linq.Expressions.dll",
+        "ref/dotnet/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hans/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hant/System.Linq.Expressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.Expressions.xml",
+        "ref/netcore50/es/System.Linq.Expressions.xml",
+        "ref/netcore50/fr/System.Linq.Expressions.xml",
+        "ref/netcore50/it/System.Linq.Expressions.xml",
+        "ref/netcore50/ja/System.Linq.Expressions.xml",
+        "ref/netcore50/ko/System.Linq.Expressions.xml",
+        "ref/netcore50/ru/System.Linq.Expressions.xml",
+        "ref/netcore50/System.Linq.Expressions.dll",
+        "ref/netcore50/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hans/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hant/System.Linq.Expressions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Linq.Expressions.4.0.0.nupkg",
+        "System.Linq.Expressions.4.0.0.nupkg.sha512",
+        "System.Linq.Expressions.nuspec"
+      ]
+    },
+    "System.ObjectModel/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Djn1wb0vP662zxbe+c3mOhvC4vkQGicsFs1Wi0/GJJpp3Eqp+oxbJ+p2Sx3O0efYueggAI5SW+BqEoczjfr1cA==",
+      "files": [
+        "lib/dotnet/System.ObjectModel.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.ObjectModel.xml",
+        "ref/dotnet/es/System.ObjectModel.xml",
+        "ref/dotnet/fr/System.ObjectModel.xml",
+        "ref/dotnet/it/System.ObjectModel.xml",
+        "ref/dotnet/ja/System.ObjectModel.xml",
+        "ref/dotnet/ko/System.ObjectModel.xml",
+        "ref/dotnet/ru/System.ObjectModel.xml",
+        "ref/dotnet/System.ObjectModel.dll",
+        "ref/dotnet/System.ObjectModel.xml",
+        "ref/dotnet/zh-hans/System.ObjectModel.xml",
+        "ref/dotnet/zh-hant/System.ObjectModel.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.ObjectModel.4.0.10.nupkg",
+        "System.ObjectModel.4.0.10.nupkg.sha512",
+        "System.ObjectModel.nuspec"
+      ]
+    },
+    "System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "sha512": "MG79ArOc8KhfAkjrimI5GFH4tML7XFo+Z1sEQGLPxrBlwfbITwrrNfYb3YoH6CpAlJHc4pcs/gZrUas/pEkTdg==",
+      "files": [
+        "ref/dnxcore50/_._",
+        "ref/netcore50/_._",
+        "runtime.json",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "System.Private.Uri.nuspec"
+      ]
+    },
+    "System.Reflection/4.0.10": {
+      "type": "package",
+      "sha512": "WZ+4lEE4gqGx6mrqLhSiW4oi6QLPWwdNjzhhTONmhELOrW8Cw9phlO9tltgvRUuQUqYtBiliFwhO5S5fCJElVw==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Reflection.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Reflection.xml",
+        "ref/dotnet/es/System.Reflection.xml",
+        "ref/dotnet/fr/System.Reflection.xml",
+        "ref/dotnet/it/System.Reflection.xml",
+        "ref/dotnet/ja/System.Reflection.xml",
+        "ref/dotnet/ko/System.Reflection.xml",
+        "ref/dotnet/ru/System.Reflection.xml",
+        "ref/dotnet/System.Reflection.dll",
+        "ref/dotnet/System.Reflection.xml",
+        "ref/dotnet/zh-hans/System.Reflection.xml",
+        "ref/dotnet/zh-hant/System.Reflection.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.dll",
+        "System.Reflection.4.0.10.nupkg",
+        "System.Reflection.4.0.10.nupkg.sha512",
+        "System.Reflection.nuspec"
+      ]
+    },
+    "System.Reflection.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dbYaZWCyFAu1TGYUqR2n+Q+1casSHPR2vVW0WVNkXpZbrd2BXcZ7cpvpu9C98CTHtNmyfMWCLpCclDqly23t6A==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Extensions.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Extensions.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Extensions.xml",
+        "ref/dotnet/es/System.Reflection.Extensions.xml",
+        "ref/dotnet/fr/System.Reflection.Extensions.xml",
+        "ref/dotnet/it/System.Reflection.Extensions.xml",
+        "ref/dotnet/ja/System.Reflection.Extensions.xml",
+        "ref/dotnet/ko/System.Reflection.Extensions.xml",
+        "ref/dotnet/ru/System.Reflection.Extensions.xml",
+        "ref/dotnet/System.Reflection.Extensions.dll",
+        "ref/dotnet/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Extensions.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Extensions.dll",
+        "ref/netcore50/System.Reflection.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll",
+        "System.Reflection.Extensions.4.0.0.nupkg",
+        "System.Reflection.Extensions.4.0.0.nupkg.sha512",
+        "System.Reflection.Extensions.nuspec"
+      ]
+    },
+    "System.Reflection.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "n9S0XpKv2ruc17FSnaiX6nV47VfHTZ1wLjKZlAirUZCvDQCH71mVp+Ohabn0xXLh5pK2PKp45HCxkqu5Fxn/lA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Primitives.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Primitives.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Primitives.xml",
+        "ref/dotnet/es/System.Reflection.Primitives.xml",
+        "ref/dotnet/fr/System.Reflection.Primitives.xml",
+        "ref/dotnet/it/System.Reflection.Primitives.xml",
+        "ref/dotnet/ja/System.Reflection.Primitives.xml",
+        "ref/dotnet/ko/System.Reflection.Primitives.xml",
+        "ref/dotnet/ru/System.Reflection.Primitives.xml",
+        "ref/dotnet/System.Reflection.Primitives.dll",
+        "ref/dotnet/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Primitives.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Primitives.dll",
+        "ref/netcore50/System.Reflection.Primitives.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll",
+        "System.Reflection.Primitives.4.0.0.nupkg",
+        "System.Reflection.Primitives.4.0.0.nupkg.sha512",
+        "System.Reflection.Primitives.nuspec"
+      ]
+    },
+    "System.Reflection.TypeExtensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "YRM/msNAM86hdxPyXcuZSzmTO0RQFh7YMEPBLTY8cqXvFPYIx2x99bOyPkuU81wRYQem1c1HTkImQ2DjbOBfew==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.TypeExtensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Reflection.TypeExtensions.dll",
+        "lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/es/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/fr/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/it/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/ja/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/ko/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/ru/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/System.Reflection.TypeExtensions.dll",
+        "ref/dotnet/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/zh-hans/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet/zh-hant/System.Reflection.TypeExtensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Reflection.TypeExtensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "System.Reflection.TypeExtensions.4.0.0.nupkg",
+        "System.Reflection.TypeExtensions.4.0.0.nupkg.sha512",
+        "System.Reflection.TypeExtensions.nuspec"
+      ]
+    },
+    "System.Resources.ResourceManager/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "qmqeZ4BJgjfU+G2JbrZt4Dk1LsMxO4t+f/9HarNY6w8pBgweO6jT+cknUH7c3qIrGvyUqraBhU45Eo6UtA0fAw==",
+      "files": [
+        "lib/DNXCore50/System.Resources.ResourceManager.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Resources.ResourceManager.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Resources.ResourceManager.xml",
+        "ref/dotnet/es/System.Resources.ResourceManager.xml",
+        "ref/dotnet/fr/System.Resources.ResourceManager.xml",
+        "ref/dotnet/it/System.Resources.ResourceManager.xml",
+        "ref/dotnet/ja/System.Resources.ResourceManager.xml",
+        "ref/dotnet/ko/System.Resources.ResourceManager.xml",
+        "ref/dotnet/ru/System.Resources.ResourceManager.xml",
+        "ref/dotnet/System.Resources.ResourceManager.dll",
+        "ref/dotnet/System.Resources.ResourceManager.xml",
+        "ref/dotnet/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/dotnet/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Resources.ResourceManager.dll",
+        "ref/netcore50/System.Resources.ResourceManager.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll",
+        "System.Resources.ResourceManager.4.0.0.nupkg",
+        "System.Resources.ResourceManager.4.0.0.nupkg.sha512",
+        "System.Resources.ResourceManager.nuspec"
+      ]
+    },
+    "System.Runtime/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "R174ctQjJnCIVxA2Yzp1v68wfLfPSROZWrbaSBcnEzHAQbOjprBQi37aWdr5y05Pq2J/O7h6SjTsYhVOLdiRYQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.xml",
+        "ref/dotnet5.1/es/System.Runtime.xml",
+        "ref/dotnet5.1/fr/System.Runtime.xml",
+        "ref/dotnet5.1/it/System.Runtime.xml",
+        "ref/dotnet5.1/ja/System.Runtime.xml",
+        "ref/dotnet5.1/ko/System.Runtime.xml",
+        "ref/dotnet5.1/ru/System.Runtime.xml",
+        "ref/dotnet5.1/System.Runtime.dll",
+        "ref/dotnet5.1/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.3/de/System.Runtime.xml",
+        "ref/dotnet5.3/es/System.Runtime.xml",
+        "ref/dotnet5.3/fr/System.Runtime.xml",
+        "ref/dotnet5.3/it/System.Runtime.xml",
+        "ref/dotnet5.3/ja/System.Runtime.xml",
+        "ref/dotnet5.3/ko/System.Runtime.xml",
+        "ref/dotnet5.3/ru/System.Runtime.xml",
+        "ref/dotnet5.3/System.Runtime.dll",
+        "ref/dotnet5.3/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.4/de/System.Runtime.xml",
+        "ref/dotnet5.4/es/System.Runtime.xml",
+        "ref/dotnet5.4/fr/System.Runtime.xml",
+        "ref/dotnet5.4/it/System.Runtime.xml",
+        "ref/dotnet5.4/ja/System.Runtime.xml",
+        "ref/dotnet5.4/ko/System.Runtime.xml",
+        "ref/dotnet5.4/ru/System.Runtime.xml",
+        "ref/dotnet5.4/System.Runtime.dll",
+        "ref/dotnet5.4/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.xml",
+        "ref/netcore50/es/System.Runtime.xml",
+        "ref/netcore50/fr/System.Runtime.xml",
+        "ref/netcore50/it/System.Runtime.xml",
+        "ref/netcore50/ja/System.Runtime.xml",
+        "ref/netcore50/ko/System.Runtime.xml",
+        "ref/netcore50/ru/System.Runtime.xml",
+        "ref/netcore50/System.Runtime.dll",
+        "ref/netcore50/System.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.dll",
+        "System.Runtime.4.0.21-beta-23516.nupkg",
+        "System.Runtime.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.nuspec"
+      ]
+    },
+    "System.Runtime.Extensions/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "5dsEwf3Iml7d5OZeT20iyOjT+r+okWpN7xI2v+R4cgd3WSj4DeRPTvPFjDpacbVW4skCAZ8B9hxXJYgkCFKJ1A==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Runtime.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Runtime.Extensions.xml",
+        "ref/dotnet/es/System.Runtime.Extensions.xml",
+        "ref/dotnet/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet/it/System.Runtime.Extensions.xml",
+        "ref/dotnet/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet/System.Runtime.Extensions.dll",
+        "ref/dotnet/System.Runtime.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Runtime.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll",
+        "System.Runtime.Extensions.4.0.10.nupkg",
+        "System.Runtime.Extensions.4.0.10.nupkg.sha512",
+        "System.Runtime.Extensions.nuspec"
+      ]
+    },
+    "System.Runtime.Handles/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "638VhpRq63tVcQ6HDb3um3R/J2BtR1Sa96toHo6PcJGPXEPEsleCuqhBgX2gFCz0y0qkutANwW6VPPY5wQu1XQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Handles.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Runtime.Handles.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Runtime.Handles.xml",
+        "ref/dotnet/es/System.Runtime.Handles.xml",
+        "ref/dotnet/fr/System.Runtime.Handles.xml",
+        "ref/dotnet/it/System.Runtime.Handles.xml",
+        "ref/dotnet/ja/System.Runtime.Handles.xml",
+        "ref/dotnet/ko/System.Runtime.Handles.xml",
+        "ref/dotnet/ru/System.Runtime.Handles.xml",
+        "ref/dotnet/System.Runtime.Handles.dll",
+        "ref/dotnet/System.Runtime.Handles.xml",
+        "ref/dotnet/zh-hans/System.Runtime.Handles.xml",
+        "ref/dotnet/zh-hant/System.Runtime.Handles.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll",
+        "System.Runtime.Handles.4.0.0.nupkg",
+        "System.Runtime.Handles.4.0.0.nupkg.sha512",
+        "System.Runtime.Handles.nuspec"
+      ]
+    },
+    "System.Runtime.InteropServices/4.0.20": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "ZgDyBYfEnjWoz/viS6VOswA6XOkDSH2DzgbpczbW50RywhnCgTl+w3JEvtAiOGyIh8cyx1NJq80jsNBSUr8Pig==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.InteropServices.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Runtime.InteropServices.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet/System.Runtime.InteropServices.dll",
+        "ref/dotnet/System.Runtime.InteropServices.xml",
+        "ref/dotnet/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll",
+        "System.Runtime.InteropServices.4.0.20.nupkg",
+        "System.Runtime.InteropServices.4.0.20.nupkg.sha512",
+        "System.Runtime.InteropServices.nuspec"
+      ]
+    },
+    "System.Text.Encoding/4.0.0": {
+      "type": "package",
+      "sha512": "AMxFNOXpA6Ab8swULbXuJmoT2K5w6TnV3ObF5wsmEcIHQUJghoZtDVfVHb08O2wW15mOSI1i9Wg0Dx0pY13o8g==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Text.Encoding.xml",
+        "ref/dotnet/es/System.Text.Encoding.xml",
+        "ref/dotnet/fr/System.Text.Encoding.xml",
+        "ref/dotnet/it/System.Text.Encoding.xml",
+        "ref/dotnet/ja/System.Text.Encoding.xml",
+        "ref/dotnet/ko/System.Text.Encoding.xml",
+        "ref/dotnet/ru/System.Text.Encoding.xml",
+        "ref/dotnet/System.Text.Encoding.dll",
+        "ref/dotnet/System.Text.Encoding.xml",
+        "ref/dotnet/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet/zh-hant/System.Text.Encoding.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Text.Encoding.xml",
+        "ref/netcore50/es/System.Text.Encoding.xml",
+        "ref/netcore50/fr/System.Text.Encoding.xml",
+        "ref/netcore50/it/System.Text.Encoding.xml",
+        "ref/netcore50/ja/System.Text.Encoding.xml",
+        "ref/netcore50/ko/System.Text.Encoding.xml",
+        "ref/netcore50/ru/System.Text.Encoding.xml",
+        "ref/netcore50/System.Text.Encoding.dll",
+        "ref/netcore50/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hans/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hant/System.Text.Encoding.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Text.Encoding.4.0.0.nupkg",
+        "System.Text.Encoding.4.0.0.nupkg.sha512",
+        "System.Text.Encoding.nuspec"
+      ]
+    },
+    "System.Text.Encoding/4.0.10": {
+      "type": "package",
+      "sha512": "fNlSFgy4OuDlJrP9SFFxMlaLazq6ipv15sU5TiEgg9UCVnA/OgoVUfymFp4AOk1jOkW5SVxWbeeIUptcM+m/Vw==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Text.Encoding.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.Encoding.xml",
+        "ref/dotnet/es/System.Text.Encoding.xml",
+        "ref/dotnet/fr/System.Text.Encoding.xml",
+        "ref/dotnet/it/System.Text.Encoding.xml",
+        "ref/dotnet/ja/System.Text.Encoding.xml",
+        "ref/dotnet/ko/System.Text.Encoding.xml",
+        "ref/dotnet/ru/System.Text.Encoding.xml",
+        "ref/dotnet/System.Text.Encoding.dll",
+        "ref/dotnet/System.Text.Encoding.xml",
+        "ref/dotnet/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet/zh-hant/System.Text.Encoding.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll",
+        "System.Text.Encoding.4.0.10.nupkg",
+        "System.Text.Encoding.4.0.10.nupkg.sha512",
+        "System.Text.Encoding.nuspec"
+      ]
+    },
+    "System.Text.Encoding.Extensions/4.0.10": {
+      "type": "package",
+      "sha512": "TZvlwXMxKo3bSRIcsWZLCIzIhLbvlz+mGeKYRZv/zUiSoQzGOwkYeBu6hOw2XPQgKqT0F4Rv8zqKdvmp2fWKYg==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/es/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/fr/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/it/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ja/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ko/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ru/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/System.Text.Encoding.Extensions.dll",
+        "ref/dotnet/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Text.Encoding.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg.sha512",
+        "System.Text.Encoding.Extensions.nuspec"
+      ]
+    },
+    "System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "AiuvOzOo6CZpIIw3yGJZcs3IhiCZcy0P/ThubazmWExERHJZoOnD/jB+Bn2gxTAD0rc/ytrRdBur9PuX6DvvvA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.xml",
+        "ref/dotnet5.1/es/System.Threading.xml",
+        "ref/dotnet5.1/fr/System.Threading.xml",
+        "ref/dotnet5.1/it/System.Threading.xml",
+        "ref/dotnet5.1/ja/System.Threading.xml",
+        "ref/dotnet5.1/ko/System.Threading.xml",
+        "ref/dotnet5.1/ru/System.Threading.xml",
+        "ref/dotnet5.1/System.Threading.dll",
+        "ref/dotnet5.1/System.Threading.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.xml",
+        "ref/dotnet5.4/de/System.Threading.xml",
+        "ref/dotnet5.4/es/System.Threading.xml",
+        "ref/dotnet5.4/fr/System.Threading.xml",
+        "ref/dotnet5.4/it/System.Threading.xml",
+        "ref/dotnet5.4/ja/System.Threading.xml",
+        "ref/dotnet5.4/ko/System.Threading.xml",
+        "ref/dotnet5.4/ru/System.Threading.xml",
+        "ref/dotnet5.4/System.Threading.dll",
+        "ref/dotnet5.4/System.Threading.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.xml",
+        "ref/netcore50/es/System.Threading.xml",
+        "ref/netcore50/fr/System.Threading.xml",
+        "ref/netcore50/it/System.Threading.xml",
+        "ref/netcore50/ja/System.Threading.xml",
+        "ref/netcore50/ko/System.Threading.xml",
+        "ref/netcore50/ru/System.Threading.xml",
+        "ref/netcore50/System.Threading.dll",
+        "ref/netcore50/System.Threading.xml",
+        "ref/netcore50/zh-hans/System.Threading.xml",
+        "ref/netcore50/zh-hant/System.Threading.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Threading.4.0.11-beta-23516.nupkg",
+        "System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.nuspec"
+      ]
+    },
+    "System.Threading.Tasks/4.0.0": {
+      "type": "package",
+      "sha512": "dA3y1B6Pc8mNt9obhEWWGGpvEakS51+nafXpmM/Z8IF847GErLXGTjdfA+AYEKszfFbH7SVLWUklXhYeeSQ1lw==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Threading.Tasks.xml",
+        "ref/dotnet/es/System.Threading.Tasks.xml",
+        "ref/dotnet/fr/System.Threading.Tasks.xml",
+        "ref/dotnet/it/System.Threading.Tasks.xml",
+        "ref/dotnet/ja/System.Threading.Tasks.xml",
+        "ref/dotnet/ko/System.Threading.Tasks.xml",
+        "ref/dotnet/ru/System.Threading.Tasks.xml",
+        "ref/dotnet/System.Threading.Tasks.dll",
+        "ref/dotnet/System.Threading.Tasks.xml",
+        "ref/dotnet/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet/zh-hant/System.Threading.Tasks.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.Tasks.xml",
+        "ref/netcore50/es/System.Threading.Tasks.xml",
+        "ref/netcore50/fr/System.Threading.Tasks.xml",
+        "ref/netcore50/it/System.Threading.Tasks.xml",
+        "ref/netcore50/ja/System.Threading.Tasks.xml",
+        "ref/netcore50/ko/System.Threading.Tasks.xml",
+        "ref/netcore50/ru/System.Threading.Tasks.xml",
+        "ref/netcore50/System.Threading.Tasks.dll",
+        "ref/netcore50/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Threading.Tasks.4.0.0.nupkg",
+        "System.Threading.Tasks.4.0.0.nupkg.sha512",
+        "System.Threading.Tasks.nuspec"
+      ]
+    },
+    "System.Threading.Tasks/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "NOwJGDfk79jR0bnzosbXLVD/PdI8KzBeESoa3CofEM5v9R5EBfcI0Jyf18stx+0IYV9okmDIDxVtxq9TbnR9bQ==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Tasks.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Threading.Tasks.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Threading.Tasks.xml",
+        "ref/dotnet/es/System.Threading.Tasks.xml",
+        "ref/dotnet/fr/System.Threading.Tasks.xml",
+        "ref/dotnet/it/System.Threading.Tasks.xml",
+        "ref/dotnet/ja/System.Threading.Tasks.xml",
+        "ref/dotnet/ko/System.Threading.Tasks.xml",
+        "ref/dotnet/ru/System.Threading.Tasks.xml",
+        "ref/dotnet/System.Threading.Tasks.dll",
+        "ref/dotnet/System.Threading.Tasks.xml",
+        "ref/dotnet/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet/zh-hant/System.Threading.Tasks.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll",
+        "System.Threading.Tasks.4.0.10.nupkg",
+        "System.Threading.Tasks.4.0.10.nupkg.sha512",
+        "System.Threading.Tasks.nuspec"
+      ]
+    }
+  },
+  "projectFileDependencyGroups": {
+    "": [
+      "TestCommon >= 1.0.0-*"
+    ],
+    "DNX,Version=v4.5.1": [],
+    "DNXCore,Version=v5.0": [
+      "Microsoft.CSharp >= 4.0.1-beta-23516",
+      "System.Collections >= 4.0.11-beta-23516",
+      "System.Console >= 4.0.0-beta-23516",
+      "System.Linq >= 4.0.1-beta-23516",
+      "System.Threading >= 4.0.11-beta-23516"
+    ]
+  }
+}
\ No newline at end of file


Property changes on: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi
___________________________________________________________________
Added: svn:ignore
   + TestMapGuideApi.xproj.user


Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/DrawingServiceOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/DrawingServiceOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/DrawingServiceOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgDrawingService
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class DrawingServiceOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgDrawingService _drawingService;
+
+        protected DrawingServiceOperationExecutor(MgDrawingService drawSvc, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _drawingService = drawSvc;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/DrawingService/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,256 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public class DescribeDrawing : DrawingServiceOperationExecutor<DescribeDrawing>
+    {
+        public DescribeDrawing(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.DescribeDrawing(resId);
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetDrawing : DrawingServiceOperationExecutor<GetDrawing>
+    {
+        public GetDrawing(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.GetDrawing(resId);
+                return TestResult.FromByteReader(reader, "GETDRAWING");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateDrawingLayers : DrawingServiceOperationExecutor<EnumerateDrawingLayers>
+    {
+        public EnumerateDrawingLayers(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SECTION", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgStringCollection coll = _drawingService.EnumerateLayers(resId, param["SECTION"] ?? "");
+                MgByteReader reader = coll.ToXml();
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetDrawingLayer : DrawingServiceOperationExecutor<GetDrawingLayer>
+    {
+        public GetDrawingLayer(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SECTION", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "LAYER", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.GetLayer(resId, param["SECTION"], param["LAYER"]);
+                return TestResult.FromByteReader(reader, "GETDRAWINGLAYER");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetDrawingSection : DrawingServiceOperationExecutor<GetDrawingSection>
+    {
+        public GetDrawingSection(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SECTION", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.GetSection(resId, param["SECTION"]);
+                return TestResult.FromByteReader(reader, "GETDRAWINGSECTION");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateDrawingSections : DrawingServiceOperationExecutor<EnumerateDrawingSections>
+    {
+        public EnumerateDrawingSections(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.EnumerateSections(resId);
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateDrawingSectionResources : DrawingServiceOperationExecutor<EnumerateDrawingSectionResources>
+    {
+        public EnumerateDrawingSectionResources(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "SECTION", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.EnumerateSectionResources(resId, param["SECTION"] ?? "");
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetDrawingSectionResource : DrawingServiceOperationExecutor<GetDrawingSectionResource>
+    {
+        public GetDrawingSectionResource(MgDrawingService drawSvc, string vm)
+            : base(drawSvc, vm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCEID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "RESOURCENAME", param);
+
+                MgResourceIdentifier resId = null;
+                if (param["RESOURCEID"] != null)
+                {
+                    resId = new MgResourceIdentifier(param["RESOURCEID"]);
+                }
+
+                MgByteReader reader = _drawingService.GetSectionResource(resId, param["RESOURCENAME"]);
+                return TestResult.FromByteReader(reader, "GETDRAWINGSECTIONRESOURCE");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/CollectionTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/CollectionTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/CollectionTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,54 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Web.ExternalTests
+{
+    public class CollectionTestsMapPlotCollection : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            string coordsys = "GEOGCS[\"LL84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]],AXIS[\"Lat\",NORTH],AXIS[\"Long\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]";
+            MgEnvelope env = new MgEnvelope(10, 10, 20, 20);
+            MgMap map1 = (MgMap)factory.CreateMap(coordsys, env, "map1");
+            MgMap map2 = (MgMap)factory.CreateMap(coordsys, env, "map2");
+            MgMap map3 = (MgMap)factory.CreateMap(coordsys, env, "map3");
+
+            MgPlotSpecification spec = new MgPlotSpecification((float)8.0, (float)11.0, "in", (float)0.0, (float)0.0, (float)5.0, (float)5.0);
+            MgResourceIdentifier resId = new MgResourceIdentifier("Library://test.WebLayout");
+            MgLayout layout1 = new MgLayout(resId, "Title1", "in");
+            MgMapPlot plot1 = new MgMapPlot(map1, spec, layout1);
+
+            MgLayout layout2 = new MgLayout(resId, "Title2", "in");
+            MgMapPlot plot2 = new MgMapPlot(map2, spec, layout2);
+
+            MgLayout layout3 = new MgLayout(resId, "Title3", "in");
+            MgMapPlot plot3 = new MgMapPlot(map3, spec, layout3);
+
+            MgMapPlotCollection coll = new MgMapPlotCollection();
+            coll.Add(plot1);
+            coll.Add(plot2);
+            coll.Remove(plot1);
+
+            Assert.AreEqual(1, coll.Count);
+
+            coll.Insert(0, plot1);
+            coll.Insert(2, plot3);
+            MgMapPlot tmp = coll[2];
+            coll[2] = tmp;
+
+            Assert.AreEqual(3, coll.Count);
+
+
+            string txt = "";
+            foreach (MgMapPlot plot in coll)
+            {
+                txt += "[" + plot.GetLayout().GetTitle() + "]";
+            }
+            Assert.AreEqual("[Title1][Title2][Title3]", txt);
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/MapTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/MapTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/MapTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,146 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Web.ExternalTests
+{
+    public abstract class ExternalTestBase : IExternalTest
+    {
+        protected static void LoadResource(MgResourceService resSvc, string resIdStr, string path)
+        {
+            MgResourceIdentifier resId = new MgResourceIdentifier(resIdStr);
+            MgByteSource bs = new MgByteSource(path);
+            MgByteReader br = bs.GetReader();
+            resSvc.SetResource(resId, br, null);
+        }
+
+        protected static void LoadResourceData(MgResourceService resSvc, string resIdStr, string dataName, string dataType, string path)
+        {
+            MgResourceIdentifier resId = new MgResourceIdentifier(resIdStr);
+            MgByteSource bs = new MgByteSource(path);
+            MgByteReader br = bs.GetReader();
+            resSvc.SetResourceData(resId, dataName, dataType, br);
+        }
+
+        public abstract void Execute(IPlatformFactory factory, ITestLogger logger);
+    }
+
+    public class LinkedTileSetMapTest : ExternalTestBase
+    {
+        public override void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            try
+            {
+                MgResourceService resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+
+                var root = $"{TestDataRoot.Path}/TileService/";
+                LoadResource(resSvc, "Library://UnitTests/Data/RoadCenterLines.FeatureSource", root + "UT_RoadCenterLines.fs");
+                LoadResourceData(resSvc, "Library://UnitTests/Data/RoadCenterLines.FeatureSource", "UT_RoadCenterLines.sdf", MgResourceDataType.File, root + "UT_RoadCenterLines.sdf");
+                LoadResource(resSvc, "Library://UnitTests/Layers/RoadCenterLines.LayerDefinition", root + "UT_RoadCenterLines.ldf");
+
+                LoadResource(resSvc, "Library://UnitTests/Data/VotingDistricts.FeatureSource", root + "UT_VotingDistricts.fs");
+                LoadResourceData(resSvc, "Library://UnitTests/Data/VotingDistricts.FeatureSource", "UT_VotingDistricts.sdf", MgResourceDataType.File, root + "UT_VotingDistricts.sdf");
+                LoadResource(resSvc, "Library://UnitTests/Layers/VotingDistricts.LayerDefinition", root + "UT_VotingDistricts.ldf");
+
+                LoadResource(resSvc, "Library://UnitTests/Data/Parcels.FeatureSource", root + "UT_Parcels.fs");
+                LoadResourceData(resSvc, "Library://UnitTests/Data/Parcels.FeatureSource", "UT_Parcels.sdf", MgResourceDataType.File, root + "UT_Parcels.sdf");
+                LoadResource(resSvc, "Library://UnitTests/Layers/Parcels.LayerDefinition", root + "UT_Parcels.ldf");
+
+                string str = Resources.UT_XYZ;
+                byte[] tsd = Encoding.UTF8.GetBytes(str);
+                MgByteSource sourceTSD = new MgByteSource(tsd, tsd.Length);
+                MgByteReader contentTSD = sourceTSD.GetReader();
+                MgResourceIdentifier resTSD = new MgResourceIdentifier("Library://UnitTests/TileSets/Test.TileSetDefinition");
+
+                resSvc.SetResource(resTSD, contentTSD, null);
+
+                string mdf = Resources.UT_BaseMap;
+                mdf = string.Format(mdf, resTSD.ToString());
+                byte[] mdfBytes = Encoding.UTF8.GetBytes(mdf);
+                MgByteSource sourceMDF = new MgByteSource(mdfBytes, mdfBytes.Length);
+                MgByteReader contentMDF = sourceMDF.GetReader();
+                MgResourceIdentifier resMDF = new MgResourceIdentifier("Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
+
+                resSvc.SetResource(resMDF, contentMDF, null);
+
+                //This should throw because making a MgMap from a Map Defintion that links to a XYZ tile set
+                //is not supported
+                MgMapBase map = factory.CreateMap(resMDF);
+
+                Assert.Fail("Expected MgUnsupportedTileProviderException to be thrown");
+            }
+            catch (MgUnsupportedTileProviderException)
+            {
+
+            }
+        }
+    }
+
+    public class TestTicket2538 : ExternalTestBase
+    {
+        public override void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            //For a map definition that links to a default provider tile set and both have the same coordinate
+            //system, it should be using the map definition's extents and we should not have null extents or view
+            //center
+
+            MgCoordinateSystemFactory csFactory = new MgCoordinateSystemFactory();
+            string csWkt = csFactory.ConvertCoordinateSystemCodeToWkt("LL84");
+
+            MgResourceService resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+
+            var root = $"{TestDataRoot.Path}/TileService/";
+            LoadResource(resSvc, "Library://UnitTests/Data/RoadCenterLines.FeatureSource", root + "UT_RoadCenterLines.fs");
+            LoadResourceData(resSvc, "Library://UnitTests/Data/RoadCenterLines.FeatureSource", "UT_RoadCenterLines.sdf", MgResourceDataType.File, root + "UT_RoadCenterLines.sdf");
+            LoadResource(resSvc, "Library://UnitTests/Layers/RoadCenterLines.LayerDefinition", root + "UT_RoadCenterLines.ldf");
+
+            LoadResource(resSvc, "Library://UnitTests/Data/VotingDistricts.FeatureSource", root + "UT_VotingDistricts.fs");
+            LoadResourceData(resSvc, "Library://UnitTests/Data/VotingDistricts.FeatureSource", "UT_VotingDistricts.sdf", MgResourceDataType.File, root + "UT_VotingDistricts.sdf");
+            LoadResource(resSvc, "Library://UnitTests/Layers/VotingDistricts.LayerDefinition", root + "UT_VotingDistricts.ldf");
+
+            LoadResource(resSvc, "Library://UnitTests/Data/Parcels.FeatureSource", root + "UT_Parcels.fs");
+            LoadResourceData(resSvc, "Library://UnitTests/Data/Parcels.FeatureSource", "UT_Parcels.sdf", MgResourceDataType.File, root + "UT_Parcels.sdf");
+            LoadResource(resSvc, "Library://UnitTests/Layers/Parcels.LayerDefinition", root + "UT_Parcels.ldf");
+
+            string tsd = Resources.UT_BaseMapTileSet;
+            tsd = string.Format(tsd, csWkt, -87.5, 43.5, -86.5, 44.5);
+            byte[] tsdBytes = Encoding.UTF8.GetBytes(tsd);
+            MgByteSource sourceTSD = new MgByteSource(tsdBytes, tsdBytes.Length);
+            MgByteReader contentTSD = sourceTSD.GetReader();
+            MgResourceIdentifier resTSD = new MgResourceIdentifier("Library://UnitTests/TileSets/Test.TileSetDefinition");
+
+            resSvc.SetResource(resTSD, contentTSD, null);
+
+            string mdf = Resources.UT_LinkedTileSet;
+            mdf = string.Format(mdf, csWkt, -87.0, 43.0, -86.0, 44.0, resTSD.ToString());
+            byte[] mdfBytes = Encoding.UTF8.GetBytes(mdf);
+            MgByteSource sourceMDF = new MgByteSource(mdfBytes, mdfBytes.Length);
+            MgByteReader contentMDF = sourceMDF.GetReader();
+            MgResourceIdentifier resMDF = new MgResourceIdentifier("Library://UnitTests/Maps/LinkedTileSet.MapDefinition");
+
+            resSvc.SetResource(resMDF, contentMDF, null);
+
+            MgMapBase map = factory.CreateMap(resMDF);
+            MgEnvelope extent = map.GetMapExtent();
+            Assert.IsNotNull(extent);
+            Assert.IsNotNull(map.MapExtent);
+            MgPoint center = map.GetViewCenter();
+            Assert.IsNotNull(center);
+            Assert.IsNotNull(map.ViewCenter);
+
+            MgCoordinate ll = extent.GetLowerLeftCoordinate();
+            MgCoordinate ur = extent.GetUpperRightCoordinate();
+
+            Assert.IsNotNull(ll);
+            Assert.IsNotNull(ur);
+
+            Assert.AreEqual(-87.0, ll.X);
+            Assert.AreEqual(43.0, ll.Y);
+            Assert.AreEqual(-86.0, ur.X);
+            Assert.AreEqual(44.0, ur.Y);
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/RenderingServiceTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/RenderingServiceTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/RenderingServiceTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,131 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+#if !DNXCORE50
+using System.Drawing;
+using System.Drawing.Imaging;
+#endif
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Web.ExternalTests
+{
+    public class RenderTileTest : IExternalTest
+    {
+        private static void LoadResource(MgResourceService resSvc, string resIdStr, string path)
+        {
+            MgResourceIdentifier resId = new MgResourceIdentifier(resIdStr);
+            MgByteSource bs = new MgByteSource(path);
+            MgByteReader br = bs.GetReader();
+            resSvc.SetResource(resId, br, null);
+        }
+
+        private static void LoadResourceData(MgResourceService resSvc, string resIdStr, string dataName, string dataType, string path)
+        {
+            MgResourceIdentifier resId = new MgResourceIdentifier(resIdStr);
+            MgByteSource bs = new MgByteSource(path);
+            MgByteReader br = bs.GetReader();
+            resSvc.SetResourceData(resId, dataName, dataType, br);
+        }
+
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var renderSvc = (MgRenderingService)factory.CreateService(MgServiceType.RenderingService);
+            var root = $"{TestDataRoot.Path}/TileService/";
+
+            LoadResource(resSvc, "Library://UnitTests/Data/RoadCenterLines.FeatureSource", root + "UT_RoadCenterLines.fs");
+            LoadResourceData(resSvc, "Library://UnitTests/Data/RoadCenterLines.FeatureSource", "UT_RoadCenterLines.sdf", MgResourceDataType.File, root + "UT_RoadCenterLines.sdf");
+            LoadResource(resSvc, "Library://UnitTests/Layers/RoadCenterLines.LayerDefinition", root + "UT_RoadCenterLines.ldf");
+
+            LoadResource(resSvc, "Library://UnitTests/Data/VotingDistricts.FeatureSource", root + "UT_VotingDistricts.fs");
+            LoadResourceData(resSvc, "Library://UnitTests/Data/VotingDistricts.FeatureSource", "UT_VotingDistricts.sdf", MgResourceDataType.File, root + "UT_VotingDistricts.sdf");
+            LoadResource(resSvc, "Library://UnitTests/Layers/VotingDistricts.LayerDefinition", root + "UT_VotingDistricts.ldf");
+
+            LoadResource(resSvc, "Library://UnitTests/Data/Parcels.FeatureSource", root + "UT_Parcels.fs");
+            LoadResourceData(resSvc, "Library://UnitTests/Data/Parcels.FeatureSource", "UT_Parcels.sdf", MgResourceDataType.File, root + "UT_Parcels.sdf");
+            LoadResource(resSvc, "Library://UnitTests/Layers/Parcels.LayerDefinition", root + "UT_Parcels.ldf");
+
+            LoadResource(resSvc, "Library://UnitTests/Maps/BaseMap.MapDefinition", root + "UT_BaseMap.mdf");
+
+            var map = (MgMap)factory.CreateMap(new MgResourceIdentifier("Library://UnitTests/Maps/BaseMap.MapDefinition"));
+            var img = renderSvc.RenderTile(map, "BaseLayers", 0, 0);
+            CheckValidImage(img);
+            img = renderSvc.RenderTile(map, "BaseLayers", 0, 0, 256, 256, 96, MgImageFormats.Png);
+            CheckValidImage(img, 256, 256, MgImageFormats.Png);
+            img = renderSvc.RenderTile(map, "BaseLayers", 0, 0, 256, 256, 96, MgImageFormats.Gif);
+            CheckValidImage(img, 256, 256, MgImageFormats.Gif);
+            img = renderSvc.RenderTile(map, "BaseLayers", 0, 0, 256, 256, 96, MgImageFormats.Jpeg);
+            CheckValidImage(img, 256, 256, MgImageFormats.Jpeg);
+            img = renderSvc.RenderTile(map, "BaseLayers", 0, 0, 256, 256, 96, MgImageFormats.Png8);
+            CheckValidImage(img, 256, 256, MgImageFormats.Png8);
+            img = renderSvc.RenderTileXYZ(map, "BaseLayers", 2099, 2985, 13);
+            CheckValidImage(img, 256, 256);
+            img = renderSvc.RenderTileXYZ(map, "BaseLayers", 2099, 2985, 13, 96, MgImageFormats.Png);
+            CheckValidImage(img, 256, 256, MgImageFormats.Png);
+            img = renderSvc.RenderTileXYZ(map, "BaseLayers", 2099, 2985, 13, 96, MgImageFormats.Png8);
+            CheckValidImage(img, 256, 256, MgImageFormats.Png8);
+            img = renderSvc.RenderTileXYZ(map, "BaseLayers", 2099, 2985, 13, 96, MgImageFormats.Gif);
+            CheckValidImage(img, 256, 256, MgImageFormats.Gif);
+            img = renderSvc.RenderTileXYZ(map, "BaseLayers", 2099, 2985, 13, 96, MgImageFormats.Jpeg);
+            CheckValidImage(img, 256, 256, MgImageFormats.Jpeg);
+        }
+
+        private void CheckValidImage(MgByteReader img, int? imageWidth = null, int? imageHeight = null, string format = null)
+        {
+            try
+            {
+                MgByteSink sink = new MgByteSink(img);
+                sink.ToFile("tile.img");
+#if !DNXCORE50
+                using (Image image = Image.FromFile("tile.img"))
+                {
+                    Assert.IsNotNull(image);
+                    if (imageWidth != null)
+                        Assert.Equals(image.Width, imageWidth.Value);
+                    if (imageHeight != null)
+                        Assert.Equals(image.Height, imageHeight.Value);
+
+                    if (format != null)
+                    {
+                        switch(format)
+                        {
+                            case MgImageFormats.Gif:
+                                Assert.Equals(image.RawFormat, ImageFormat.Gif);
+                                break;
+                            case MgImageFormats.Jpeg:
+                                Assert.Equals(image.RawFormat, ImageFormat.Jpeg);
+                                break;
+                            case MgImageFormats.Png:
+                            case MgImageFormats.Png8:
+                                Assert.Equals(image.RawFormat, ImageFormat.Png);
+                                break;
+                            case MgImageFormats.Tiff:
+                                Assert.Equals(image.RawFormat, ImageFormat.Tiff);
+                                break;
+                        }
+                    }
+                }
+#endif
+            }
+            catch (Exception ex)
+            {
+                throw new AssertException("Invalid image found: " + ex.Message);
+            }
+            finally
+            {
+                if (File.Exists("tile.img"))
+                {
+                    try
+                    {
+                        File.Delete("tile.img");
+                    }
+                    catch { }
+                }
+            }
+        }
+    }
+
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/ResourceServiceTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/ResourceServiceTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ExternalTests/ResourceServiceTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,66 @@
+using OSGeo.MapGuide.Test.Common;
+using OSGeo.MapGuide.Test.Common.ExternalTests;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Web.ExternalTests
+{
+    public class ResourceMetadataTest : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            var fsId = new MgResourceIdentifier("Library://UnitTests/Data/Metadata.FeatureSource");
+            try
+            {
+                if (resSvc.ResourceExists(fsId))
+                    resSvc.DeleteResource(fsId);
+
+                string metadata = resSvc.EnumerateResourceDocuments(null, MgResourceType.FeatureSource, MgResourceHeaderProperties.Metadata);
+                File.WriteAllText("metadata.txt", metadata);
+
+                string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+                string headerXml = string.Format(Resources.ResourceHeaderTemplate, "Foo", "Bar");
+                var bytes = Encoding.UTF8.GetBytes(headerXml);
+                var source = new MgByteSource(bytes, bytes.Length);
+                var rdr = source.GetReader();
+
+                resSvc.SetResource(fsId, null, rdr);
+                string metadata2 = resSvc.EnumerateResourceDocuments(null, MgResourceType.FeatureSource, MgResourceHeaderProperties.Metadata);
+                File.WriteAllText("metadata2.txt", metadata2);
+
+                Assert.IsFalse(metadata == metadata2);
+            }
+            finally
+            {
+                if (resSvc.ResourceExists(fsId))
+                    resSvc.DeleteResource(fsId);
+            }
+        }
+    }
+
+    public class ResourceModifiedTest : IExternalTest
+    {
+        public void Execute(IPlatformFactory factory, ITestLogger logger)
+        {
+            var resSvc = (MgResourceService)factory.CreateService(MgServiceType.ResourceService);
+            var featSvc = (MgFeatureService)factory.CreateService(MgServiceType.FeatureService);
+            MgResourceIdentifier fsId = new MgResourceIdentifier("Library://UnitTests/Data/Timestamp.FeatureSource");
+            string className = FeatureServiceTestUtil.CreateTestDataStore(fsId, "OSGeo.SDF", featSvc);
+            MgByteReader content = resSvc.GetResourceContent(fsId);
+            MgDateTime mod1 = resSvc.GetResourceModifiedDate(fsId);
+            Thread.Sleep(1500);
+            resSvc.SetResource(fsId, content, null);
+            MgDateTime mod2 = resSvc.GetResourceModifiedDate(fsId);
+
+            Assert.IsFalse(mod1.ToString() == mod2.ToString());
+        }
+    }
+
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTestExecutorCollection.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTestExecutorCollection.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTestExecutorCollection.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,486 @@
+using OSGeo.MapGuide;
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test
+{
+    public class MapGuideTestExecutorCollection : TestExecutorCollectionBase
+    {
+        private Dictionary<string, ITestExecutor> _executors;
+
+        private MgUserInformation _userInfo;
+        private MgSiteConnection _conn;
+
+        public MapGuideTestExecutorCollection(MgUserInformation userInfo, MgSiteConnection conn)
+        {
+            _userInfo = userInfo;
+            _conn = conn;
+        }
+
+        protected override void SetupExecutors(string dbPath)
+        {
+            //NOTE: We can't share the SqliteVm instance among our executor objects as this messes up query results
+            //we must be able to re-create a new SqliteVm for each executor, so we pass down the db path
+
+            _executors = new Dictionary<string, ITestExecutor>();
+
+            MgResourceService resSvc = (MgResourceService)_conn.CreateService(MgServiceType.ResourceService);
+            MgFeatureService featSvc = (MgFeatureService)_conn.CreateService(MgServiceType.FeatureService);
+            MgDrawingService drawSvc = (MgDrawingService)_conn.CreateService(MgServiceType.DrawingService);
+
+            var site = _conn.GetSite();
+            var admin = new MgServerAdmin();
+            admin.Open(_userInfo);
+            var wlCreator = new MgWebLayoutCreator(resSvc);
+            var creator = new MgMapCreator(_conn, resSvc);
+            var sessionCreator = new MgSessionCreator(_conn);
+            var sessionApply = new MgApplySession(_userInfo);
+            var session = new MgSession();
+
+            //Resource Service
+            _executors[typeof(Operations.ApplyResourcePackage).Name.ToUpper()] = new Operations.ApplyResourcePackage(resSvc, dbPath);
+            _executors[typeof(Operations.ChangeResourceOwner).Name.ToUpper()] = new Operations.ChangeResourceOwner(resSvc, dbPath);
+            _executors[typeof(Operations.CopyResource).Name.ToUpper()] = new Operations.CopyResource(resSvc, dbPath);
+            _executors[typeof(Operations.DeleteResource).Name.ToUpper()] = new Operations.DeleteResource(resSvc, dbPath);
+            _executors[typeof(Operations.DeleteResourceData).Name.ToUpper()] = new Operations.DeleteResourceData(resSvc, dbPath);
+            _executors[typeof(Operations.EnumerateResourceData).Name.ToUpper()] = new Operations.EnumerateResourceData(resSvc, dbPath);
+            _executors[typeof(Operations.EnumerateResourceReferences).Name.ToUpper()] = new Operations.EnumerateResourceReferences(resSvc, dbPath);
+            _executors[typeof(Operations.EnumerateResources).Name.ToUpper()] = new Operations.EnumerateResources(resSvc, dbPath);
+            _executors[typeof(Operations.GetRepositoryContent).Name.ToUpper()] = new Operations.GetRepositoryContent(resSvc, dbPath);
+            _executors[typeof(Operations.GetRepositoryHeader).Name.ToUpper()] = new Operations.GetRepositoryHeader(resSvc, dbPath);
+            _executors[typeof(Operations.GetResourceContent).Name.ToUpper()] = new Operations.GetResourceContent(resSvc, dbPath);
+            _executors[typeof(Operations.GetResourceData).Name.ToUpper()] = new Operations.GetResourceData(resSvc, dbPath);
+            _executors[typeof(Operations.GetResourceHeader).Name.ToUpper()] = new Operations.GetResourceHeader(resSvc, dbPath);
+            _executors[typeof(Operations.InheritPermissionsFrom).Name.ToUpper()] = new Operations.InheritPermissionsFrom(resSvc, dbPath);
+            _executors[typeof(Operations.MoveResource).Name.ToUpper()] = new Operations.MoveResource(resSvc, dbPath);
+            _executors[typeof(Operations.RenameResourceData).Name.ToUpper()] = new Operations.RenameResourceData(resSvc, dbPath);
+            _executors[typeof(Operations.SetResource).Name.ToUpper()] = new Operations.SetResource(resSvc, dbPath);
+            _executors[typeof(Operations.SetResourceData).Name.ToUpper()] = new Operations.SetResourceData(resSvc, dbPath);
+            _executors[typeof(Operations.UpdateRepository).Name.ToUpper()] = new Operations.UpdateRepository(resSvc, dbPath);
+
+            //Feature Service
+            _executors[typeof(Operations.DescribeFeatureSchema).Name.ToUpper()] = new Operations.DescribeFeatureSchema(featSvc, dbPath);
+            _executors[typeof(Operations.ExecuteSqlQuery).Name.ToUpper()] = new Operations.ExecuteSqlQuery(featSvc, dbPath);
+            _executors[typeof(Operations.GetClasses).Name.ToUpper()] = new Operations.GetClasses(featSvc, dbPath);
+            _executors[typeof(Operations.GetConnectionPropertyValues).Name.ToUpper()] = new Operations.GetConnectionPropertyValues(featSvc, dbPath);
+            _executors[typeof(Operations.GetFeatureProviders).Name.ToUpper()] = new Operations.GetFeatureProviders(featSvc, dbPath);
+            _executors[typeof(Operations.GetLongTransactions).Name.ToUpper()] = new Operations.GetLongTransactions(featSvc, dbPath);
+            _executors[typeof(Operations.GetProviderCapabilities).Name.ToUpper()] = new Operations.GetProviderCapabilities(featSvc, dbPath);
+            _executors[typeof(Operations.GetSchemas).Name.ToUpper()] = new Operations.GetSchemas(featSvc, dbPath);
+            _executors[typeof(Operations.GetSpatialContexts).Name.ToUpper()] = new Operations.GetSpatialContexts(featSvc, dbPath);
+            _executors[typeof(Operations.SelectAggregates).Name.ToUpper()] = new Operations.SelectAggregates(featSvc, dbPath);
+            _executors[typeof(Operations.SelectFeatures).Name.ToUpper()] = new Operations.SelectFeatures(featSvc, dbPath);
+            _executors[typeof(Operations.SetLongTransaction).Name.ToUpper()] = new Operations.SetLongTransaction(featSvc, dbPath, sessionCreator, sessionApply);
+            _executors[typeof(Operations.TestConnection).Name.ToUpper()] = new Operations.TestConnection(featSvc, dbPath);
+
+            //Map and Layers
+            _executors[typeof(Operations.AddLayerGroup).Name.ToUpper()] = new Operations.AddLayerGroup(resSvc, dbPath, creator);
+            _executors[typeof(Operations.AddLayer).Name.ToUpper()] = new Operations.AddLayer(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetCoordinateSystem).Name.ToUpper()] = new Operations.GetCoordinateSystem(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetDataExtent).Name.ToUpper()] = new Operations.GetDataExtent(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetDisplayInLegend).Name.ToUpper()] = new Operations.GetDisplayInLegend(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetLayerFeatureClass).Name.ToUpper()] = new Operations.GetLayerFeatureClass(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetLayerFeatureSource).Name.ToUpper()] = new Operations.GetLayerFeatureSource(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetLayerDefinition).Name.ToUpper()] = new Operations.GetLayerDefinition(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetGroups).Name.ToUpper()] = new Operations.GetGroups(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetLayers).Name.ToUpper()] = new Operations.GetLayers(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetLayerVisibility).Name.ToUpper()] = new Operations.GetLayerVisibility(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetLegendLabel).Name.ToUpper()] = new Operations.GetLegendLabel(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetMapExtent).Name.ToUpper()] = new Operations.GetMapExtent(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetMapName).Name.ToUpper()] = new Operations.GetMapName(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetViewCenter).Name.ToUpper()] = new Operations.GetViewCenter(resSvc, dbPath, creator);
+            _executors[typeof(Operations.GetViewScale).Name.ToUpper()] = new Operations.GetViewScale(resSvc, dbPath, creator);
+            _executors[typeof(Operations.HideGroup).Name.ToUpper()] = new Operations.HideGroup(resSvc, dbPath, creator);
+            _executors[typeof(Operations.IsLayerVisible).Name.ToUpper()] = new Operations.IsLayerVisible(resSvc, dbPath, creator);
+            _executors[typeof(Operations.LayerExists).Name.ToUpper()] = new Operations.LayerExists(resSvc, dbPath, creator);
+            _executors[typeof(Operations.RemoveGroup).Name.ToUpper()] = new Operations.RemoveGroup(resSvc, dbPath, creator);
+            _executors[typeof(Operations.ShowGroup).Name.ToUpper()] = new Operations.ShowGroup(resSvc, dbPath, creator);
+
+            //Drawing Service
+            _executors[typeof(Operations.DescribeDrawing).Name.ToUpper()] = new Operations.DescribeDrawing(drawSvc, dbPath);
+            _executors[typeof(Operations.GetDrawing).Name.ToUpper()] = new Operations.GetDrawing(drawSvc, dbPath);
+            _executors[typeof(Operations.EnumerateDrawingLayers).Name.ToUpper()] = new Operations.EnumerateDrawingLayers(drawSvc, dbPath);
+            _executors[typeof(Operations.GetDrawingLayer).Name.ToUpper()] = new Operations.GetDrawingLayer(drawSvc, dbPath);
+            _executors[typeof(Operations.GetDrawingSection).Name.ToUpper()] = new Operations.GetDrawingSection(drawSvc, dbPath);
+            _executors[typeof(Operations.EnumerateDrawingSections).Name.ToUpper()] = new Operations.EnumerateDrawingSections(drawSvc, dbPath);
+            _executors[typeof(Operations.EnumerateDrawingSectionResources).Name.ToUpper()] = new Operations.EnumerateDrawingSectionResources(drawSvc, dbPath);
+            _executors[typeof(Operations.GetDrawingSectionResource).Name.ToUpper()] = new Operations.GetDrawingSectionResource(drawSvc, dbPath);
+
+            //Mapping Service
+
+            //Rendering Service
+
+            //Server Admin
+            _executors[typeof(Operations.Offline).Name.ToUpper()] = new Operations.Offline(admin, dbPath);
+            _executors[typeof(Operations.Online).Name.ToUpper()] = new Operations.Online(admin, dbPath);
+            _executors[typeof(Operations.GetLog).Name.ToUpper()] = new Operations.GetLog(admin, dbPath);
+            _executors[typeof(Operations.GetLogByDate).Name.ToUpper()] = new Operations.GetLogByDate(admin, dbPath);
+            _executors[typeof(Operations.ClearLog).Name.ToUpper()] = new Operations.ClearLog(admin, dbPath);
+            _executors[typeof(Operations.DeleteLog).Name.ToUpper()] = new Operations.DeleteLog(admin, dbPath);
+            _executors[typeof(Operations.RenameLog).Name.ToUpper()] = new Operations.RenameLog(admin, dbPath);
+            _executors[typeof(Operations.EnumeratePackages).Name.ToUpper()] = new Operations.EnumeratePackages(admin, dbPath);
+            _executors[typeof(Operations.DeletePackage).Name.ToUpper()] = new Operations.DeletePackage(admin, dbPath);
+            _executors[typeof(Operations.LoadPackage).Name.ToUpper()] = new Operations.LoadPackage(admin, dbPath);
+            _executors[typeof(Operations.GetPackageStatus).Name.ToUpper()] = new Operations.GetPackageStatus(admin, dbPath);
+            _executors[typeof(Operations.GetPackageLog).Name.ToUpper()] = new Operations.GetPackageLog(admin, dbPath);
+
+            //Site Service
+            _executors[typeof(Operations.CreateSession).Name.ToUpper()] = new Operations.CreateSession(site, dbPath, session);
+            _executors[typeof(Operations.DestroySession).Name.ToUpper()] = new Operations.DestroySession(site, dbPath);
+            _executors[typeof(Operations.GetUserForSession).Name.ToUpper()] = new Operations.GetUserForSession(site, dbPath, session);
+            _executors[typeof(Operations.EnumerateUsers).Name.ToUpper()] = new Operations.EnumerateUsers(site, dbPath);
+            _executors[typeof(Operations.AddUser).Name.ToUpper()] = new Operations.AddUser(site, dbPath);
+            _executors[typeof(Operations.UpdateUser).Name.ToUpper()] = new Operations.UpdateUser(site, dbPath);
+            _executors[typeof(Operations.DeleteUsers).Name.ToUpper()] = new Operations.DeleteUsers(site, dbPath);
+            _executors[typeof(Operations.GrantRoleMembershipsToUsers).Name.ToUpper()] = new Operations.GrantRoleMembershipsToUsers(site, dbPath);
+            _executors[typeof(Operations.RevokeRoleMembershipsFromUsers).Name.ToUpper()] = new Operations.RevokeRoleMembershipsFromUsers(site, dbPath);
+            _executors[typeof(Operations.GrantGroupMembershipsToUsers).Name.ToUpper()] = new Operations.GrantGroupMembershipsToUsers(site, dbPath);
+            _executors[typeof(Operations.RevokeGroupMembershipsFromUsers).Name.ToUpper()] = new Operations.RevokeGroupMembershipsFromUsers(site, dbPath);
+            _executors[typeof(Operations.EnumerateGroups).Name.ToUpper()] = new Operations.EnumerateGroups(site, dbPath);
+            _executors[typeof(Operations.EnumerateGroups2).Name.ToUpper()] = new Operations.EnumerateGroups2(site, dbPath);
+            _executors[typeof(Operations.EnumerateRoles2).Name.ToUpper()] = new Operations.EnumerateRoles2(site, dbPath);
+            _executors[typeof(Operations.AddGroup).Name.ToUpper()] = new Operations.AddGroup(site, dbPath);
+            _executors[typeof(Operations.UpdateGroup).Name.ToUpper()] = new Operations.UpdateGroup(site, dbPath);
+            _executors[typeof(Operations.DeleteGroups).Name.ToUpper()] = new Operations.DeleteGroups(site, dbPath);
+            _executors[typeof(Operations.GrantRoleMembershipsToGroups).Name.ToUpper()] = new Operations.GrantRoleMembershipsToGroups(site, dbPath);
+            _executors[typeof(Operations.RevokeRoleMembershipsFromGroups).Name.ToUpper()] = new Operations.RevokeRoleMembershipsFromGroups(site, dbPath);
+            _executors[typeof(Operations.EnumerateRoles).Name.ToUpper()] = new Operations.EnumerateRoles(site, dbPath);
+            _executors[typeof(Operations.EnumerateServers).Name.ToUpper()] = new Operations.EnumerateServers(site, dbPath);
+            _executors[typeof(Operations.AddServer).Name.ToUpper()] = new Operations.AddServer(site, dbPath);
+            _executors[typeof(Operations.UpdateServer).Name.ToUpper()] = new Operations.UpdateServer(site, dbPath);
+            _executors[typeof(Operations.RemoveServer).Name.ToUpper()] = new Operations.RemoveServer(site, dbPath);
+
+            //Web Layout
+            _executors[typeof(Operations.WL_GetTitle).Name.ToUpper()] = new Operations.WL_GetTitle(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_GetMapDefinition).Name.ToUpper()] = new Operations.WL_GetMapDefinition(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_GetScale).Name.ToUpper()] = new Operations.WL_GetScale(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_GetCenter).Name.ToUpper()] = new Operations.WL_GetCenter(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowToolbar).Name.ToUpper()] = new Operations.WL_ShowToolbar(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowStatusbar).Name.ToUpper()] = new Operations.WL_ShowStatusbar(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowTaskpane).Name.ToUpper()] = new Operations.WL_ShowTaskpane(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowTaskbar).Name.ToUpper()] = new Operations.WL_ShowTaskbar(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowLegend).Name.ToUpper()] = new Operations.WL_ShowLegend(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowProperties).Name.ToUpper()] = new Operations.WL_ShowProperties(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_GetTaskPaneWidth).Name.ToUpper()] = new Operations.WL_GetTaskPaneWidth(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_GetInformationPaneWidth).Name.ToUpper()] = new Operations.WL_GetInformationPaneWidth(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_GetInitialTaskUrl).Name.ToUpper()] = new Operations.WL_GetInitialTaskUrl(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ShowContextMenu).Name.ToUpper()] = new Operations.WL_ShowContextMenu(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_TestUiItem).Name.ToUpper()] = new Operations.WL_TestUiItem(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_HomeTooltip).Name.ToUpper()] = new Operations.WL_HomeTooltip(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_HomeDescription).Name.ToUpper()] = new Operations.WL_HomeDescription(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_BackTooltip).Name.ToUpper()] = new Operations.WL_BackTooltip(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_BackDescription).Name.ToUpper()] = new Operations.WL_BackDescription(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ForwardTooltip).Name.ToUpper()] = new Operations.WL_ForwardTooltip(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_ForwardDescription).Name.ToUpper()] = new Operations.WL_ForwardDescription(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_TasksName).Name.ToUpper()] = new Operations.WL_TasksName(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_TasksTooltip).Name.ToUpper()] = new Operations.WL_TasksTooltip(wlCreator, dbPath);
+            _executors[typeof(Operations.WL_TasksDescription).Name.ToUpper()] = new Operations.WL_TasksDescription(wlCreator, dbPath);
+        }
+
+        class MgWebLayoutCreator : Operations.IWebLayoutCreator
+        {
+            private MgResourceService _resSvc;
+            private MgWebLayout _wl;
+
+            public MgWebLayoutCreator(MgResourceService resSvc)
+            {
+                _resSvc = resSvc;
+            }
+
+            public MgWebLayout CreateWebLayout(MgResourceIdentifier resId)
+            {
+                if (_wl != null)
+                    return _wl;
+
+                _wl = new MgWebLayout(_resSvc, resId);
+                return _wl;
+            }
+        }
+
+        class MgMapCreator : Operations.IMapCreator
+        {
+            private MgSiteConnection _siteConn;
+            private MgMap _map;
+            private MgResourceService _resSvc;
+
+            public MgMapCreator(MgSiteConnection siteConn, MgResourceService resSvc)
+            {
+                _siteConn = siteConn;
+                _resSvc = resSvc;
+            }
+
+            public MgMapBase CreateMap(MgResourceIdentifier resId)
+            {
+                //The test suite relies on the same map and not a new one
+                //re-created on each test of that particular test suite
+                if (_map != null)
+                    return _map;
+
+                _map = new MgMap(_siteConn);
+                _map.Create(resId, resId.GetName());
+                return _map;
+            }
+
+            public MgLayerBase CreateLayer(MgResourceIdentifier resId)
+            {
+                return new MgLayer(resId, _resSvc);
+            }
+        }
+
+        class MgSessionCreator : Operations.ISessionCreator
+        {
+            private MgSiteConnection _siteConn;
+
+            public MgSessionCreator(MgSiteConnection siteConn)
+            {
+                _siteConn = siteConn;
+            }
+
+            public string CreateSession()
+            {
+                var site = _siteConn.GetSite();
+                return site.CreateSession();
+            }
+        }
+
+        class MgApplySession : Operations.IApplySession
+        {
+            private MgUserInformation _userInfo;
+
+            public MgApplySession(MgUserInformation userInfo)
+            {
+                _userInfo = userInfo;
+            }
+
+            public void SetSessionId(string sessionId)
+            {
+                _userInfo.SetMgSessionId(sessionId);
+            }
+        }
+
+        class MgSession : Operations.IMapGuideSession
+        {
+            public string SessionID
+            {
+                get;
+                set;
+            }
+        }
+
+        public override ITestExecutor GetTestExecutor(string opName)
+        {
+            if (_executors.ContainsKey(opName))
+                return _executors[opName];
+            throw new Exception("Executor for " + opName + " not found");
+        }
+
+        public override int ValidateRequest(SqliteDb db, string testName, int paramSetId, string operation, TestResult actualResult, ITestLogger logger)
+        {
+            int exitStatus = 0;
+            string outcome = "pass";
+            SqliteVm vm = new SqliteVm(db, false);
+
+            object expectedResult = null;
+
+            //If we have an exception we need to remove the stack trace because different line numbers will fail the test
+            object resultData = CommonUtility.RemoveStackTraceFromResult(actualResult.ResultData);
+            //Get the mime type based on the content type in the result
+            string mimeType = actualResult.ContentType;
+            //If we have exception message we need to remove any parts that may contain system dependent information
+            //Ex. file paths
+            resultData = CommonUtility.ProcessExceptionMessage(resultData);
+            //Get the file extension that will be used for a dump
+            string actualExtension = CommonUtility.GetExtensionFromMimeType(mimeType);
+
+            //If we have an ALWAYSPASS parameter defined for the operation then skip the whole validation process
+            //This parameter should only be used for clean up operations that are no related with the tests
+            if (vm.Execute("Select ParamValue from Params where ParamName=\"ALWAYSPASS\" and ParamSet={0}", paramSetId) != Sqlite.Row)
+            {
+                //TestName is Test_[ServiceType]
+                string type = testName.Substring(testName.IndexOf("_") + 1);
+                string filePath = CommonUtility.GetPath($"{TestDataRoot.Path}/TestData/{type}/DumpFiles/{type}ApiTest");
+                string fileName = string.Format("{0}_{1}.{2}", filePath, paramSetId, actualExtension);
+
+                if (this.TestExecutionMode == "dump")
+                {
+                    //File.WriteAllText(fileName, resultData);
+                    throw new NotImplementedException("The .net test runner does not support dumping of test results. Please use the PHP test runner for this purpose");
+                }
+                else
+                {
+                    //This section is special case handling for the operations that return different data after each call
+                    resultData = CommonUtility.SpecialDataHandling(operation, resultData, mimeType);
+
+                    if (this.TestExecutionMode == "generate")
+                    {
+                        throw new NotImplementedException("The .net test runner does not support test update/generation. Please use the PHP test runner for this purpose");
+                        /*
+                        //Get the sample result that is stored in the database. If we are using file on disk for validation
+                        //then do not overwrite the filename in the database
+                        //To distinguish between sample data and filename all filenames should be prefixed with "@@"
+                        int status = vm.Execute("Select Result from ApiTestResults where ParamSet={0}", paramSetId);
+                        string sampleResult = vm.GetString("Result");
+
+                        if (!sampleResult.StartsWith("@@"))
+                        {
+                            //Insert the sample data as a BLOB
+                            //Update the row for that param set or create a new row if we do not have it yet
+
+                            string responseBody = "";
+                            if (status == Sqlite.Row)
+                            {
+                                vm.Prepare("update ApiTestResults set Result = :blob where ParamSet={0}", paramSetId);
+                            }
+                            else
+                            {
+                                Console.WriteLine("A new row has been created in ApiTestResults table to store the result for operation {0}", paramSetId);
+                                Console.WriteLine("Please update the description field for that row later");
+                                vm.Prepare("INSERT INTO ApiTestResults(ParamSet, Result) VALUES({0}, :blob)", paramSetId);
+                            }
+
+                            byte[] bytes = Encoding.UTF8.GetBytes(resultData);
+                            vm.BindBlob(":blob", bytes);
+                            vm.Execute();
+
+                            if (mimeType != null)
+                            {
+                                vm.Execute("UPDATE ApiTestResults SET ContentType=\"{0}\" WHERE ParamSet={1}", mimeType, paramSetId);
+                            }
+
+                            File.WriteAllText(fileName, resultData);
+                        }
+                         */
+                    }
+                    else if (this.TestExecutionMode == "validate" || this.TestExecutionMode == "show")
+                    {
+                        string resultContent = "";
+
+                        //Get the sample result and the expected content type from the database
+                        int status = vm.Execute("Select Result, ContentType from ApiTestResults where ParamSet={0}", paramSetId);
+                        string expectedContentType = vm.GetString("ContentType");
+                        string expectedExtension = CommonUtility.GetExtensionFromMimeType(expectedContentType ?? string.Empty);
+                        SqliteGcBlob blob = vm.GetBlob("Result");
+
+                        byte[] b = blob?.Read();
+                        if (b != null)
+                        {
+                            if (expectedExtension == "xml" || expectedExtension == "txt" || expectedExtension == "html")
+                                expectedResult = Encoding.UTF8.GetString(b);
+                            else
+                                expectedResult = b;
+                        }
+                        else
+                        {
+                            if (expectedExtension == "xml" || expectedExtension == "txt" || expectedExtension == "html")
+                                expectedResult = string.Empty;
+                            else
+                                expectedResult = null;
+                        }
+                        string strExpectedResult = expectedResult as string;
+                        //If we are validating from a file then get the contents of that file
+                        //File names should be prefixed with "@@" to distinguish them from BLOB data
+                        if (strExpectedResult != null && strExpectedResult.StartsWith("@@"))
+                        {
+                            string sampleDataFile = strExpectedResult.Substring(2);
+                            sampleDataFile = CommonUtility.GetPath(sampleDataFile);
+                            expectedResult = File.ReadAllText(sampleDataFile);
+                        }
+
+                        if (this.TestExecutionMode == "validate")
+                        {
+                            bool bEqual = false;
+                            byte[] bExpected = expectedResult as byte[];
+                            byte[] bActual = resultData as byte[];
+                            string strResultData = resultData as string;
+
+                            //FIXME: We're not processing DWF content properly to do this check properly. So just
+                            //pass these for now
+                            if (operation == "GETDRAWINGLAYER" || operation == "GETDRAWINGSECTION")
+                            {
+                                bEqual = true;
+                            }
+                            else
+                            {
+                                if (strExpectedResult != null && strResultData != null)
+                                {
+                                    //Normalize line endings on LF before comparsion (in case the SQLite GUI recorded CRLFs)
+                                    string normStrResultData = strResultData.Replace("\r\n", "\n");
+                                    string normStrExpectedResult = strExpectedResult.Replace("\r\n", "\n");
+
+                                    bEqual = normStrResultData.Equals(normStrExpectedResult, StringComparison.OrdinalIgnoreCase);
+                                }
+                                else if (bExpected != null && bActual != null)
+                                {
+                                    bEqual = CommonUtility.ByteArraysEqual(bExpected, bActual, operation, testName);
+                                }
+                                else
+                                {
+                                    System.Diagnostics.Debug.WriteLine(string.Format("[MgTestRunner]: {0} - {1} - Encountered disparate data types between expected and actual results. Expecting test failure :(", testName, operation));
+                                }
+                            }
+                            //If the results are different and special validation fails then the operation failed ->mark it red
+                            if (!bEqual && !CommonUtility.SpecialValidation(operation, resultData, expectedResult))
+                            {
+                                outcome = "fail";
+                                exitStatus = 1;
+
+                                if (expectedExtension != "xml" && expectedExtension != "html" && expectedExtension != "txt")
+                                {
+                                    expectedResult = "Unable to display binary data";
+                                }
+
+                                if (actualExtension != "xml" && actualExtension != "html" && actualExtension != "txt")
+                                {
+                                    resultData = "Unable to display binary data";
+                                }
+                            }
+                        }
+                        else
+                        {
+                            throw new NotImplementedException("The .net test runner does not support the given test execution mode (" + this.TestExecutionMode + "). Please use the PHP test runner for this purpose");
+                            /*
+                            type = testName.Substring(testName.IndexOf("_") + 1);
+                            string showPath = CommonUtility.GetPath(string.Format("../../TestData/{0}/ShowFiles/{0}ApiTest", type));
+                            string showName = string.Format("{0}_{1}.{2}", showPath, paramSetId, actualExtension);
+                            File.WriteAllText(showName, expectedResult);
+                             */
+                        }
+                    }
+                }
+            }
+
+            if (outcome == "fail")
+            {
+                Console.WriteLine("****{0} {1} {2} failed.\n", testName, paramSetId, operation);
+                string str = string.Format("\n****ACTUAL RESULT****\n{0}\n****EXPECTED RESULT****\n{1}\n********\n\n\n", resultData, expectedResult);
+                //Console.WriteLine(str);
+                //Console.WriteLine("<FAIL>");
+                logger.Write(str);
+            }
+
+            vm.SqlFinalize();
+            vm = null;
+
+            return exitStatus;
+        }
+
+        public override void Cleanup()
+        {
+            foreach (var exec in _executors.Values)
+            {
+                exec.Dispose();
+            }
+            _executors.Clear();
+        }
+
+        public override string ApiType
+        {
+            get { return ApiTypes.Platform; }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTests.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTests.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MapGuideTests.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,45 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Reflection;
+
+namespace OSGeo.MapGuide.Test
+{
+    //Defines tests outside of the SQLite-based test suite
+
+    public class MapGuideTests
+    {
+        public static int Execute(IPlatformFactory factory, ITestLogger logger, ref int testsRun)
+        {
+            int failures = 0;
+            var types = typeof(MapGuideTests).GetTypeInfo().Assembly.GetTypes();
+            foreach (var type in types)
+            {
+                if (typeof(IExternalTest).IsAssignableFrom(type) && type.GetTypeInfo().IsClass && !type.GetTypeInfo().IsAbstract)
+                {
+                    var test = (IExternalTest)Activator.CreateInstance(type);
+                    try
+                    {
+                        logger.WriteLine("****** Executing MapGuide test: " + type.Name + " *********");
+                        Console.WriteLine("Executing external MapGuide test: " + type.Name);
+                        test.Execute(factory, logger);
+                    }
+                    catch (AssertException ex)
+                    {
+                        logger.WriteLine("Assertion failure: " + ex.Message);
+                        failures++;
+                    }
+                    catch (Exception ex)
+                    {
+                        logger.WriteLine("General failure: " + ex.ToString());
+                        failures++;
+                    }
+                    finally
+                    {
+                        testsRun++;
+                    }
+                }
+            }
+            return failures;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MappingService/MappingServiceOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MappingService/MappingServiceOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/MappingService/MappingServiceOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,24 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgMappingService
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class MappingServiceOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgMappingService _mappingService;
+
+        protected MappingServiceOperationExecutor(MgMappingService mappingSvc, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _mappingService = mappingSvc;
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Properties/AssemblyInfo.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Properties/AssemblyInfo.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Properties/AssemblyInfo.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TestMapGuideApi")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TestMapGuideApi")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b1f5b09f-febf-436f-8951-d315b603bbf4")]

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/RenderingService/RenderingServiceOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/RenderingService/RenderingServiceOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/RenderingService/RenderingServiceOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,24 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgRenderingService
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class RenderingServiceOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgRenderingService _renderingService;
+
+        protected RenderingServiceOperationExecutor(MgRenderingService renderSvc, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _renderingService = renderSvc;
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.Designer.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.Designer.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.Designer.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,169 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace OSGeo.MapGuide.Test {
+    using System;
+    using System.Reflection;
+    
+    
+    /// <summary>
+    ///    A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///    Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OSGeo.MapGuide.Test.Resources", typeof(Resources).GetTypeInfo().Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///    Overrides the current thread's CurrentUICulture property for all
+        ///    resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to <?xml version="1.0"?>
+        ///<ResourceDocumentHeader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="ResourceDocumentHeader-1.0.0.xsd">
+        ///  <Security>
+        ///    <Inherited>true</Inherited>
+        ///  </Security>
+        ///  <Metadata>
+        ///    <Simple>
+        ///	  <Property>
+        ///	    <Name>{0}</Name>
+        ///		<Value>{1}</Value>
+        ///	  </Property>
+        ///	</Simple>
+        ///  </Metadata>
+        ///</ResourceDocumentHeader>.
+        /// </summary>
+        internal static string ResourceHeaderTemplate {
+            get {
+                return ResourceManager.GetString("ResourceHeaderTemplate", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to  <?xml version="1.0" encoding="UTF-8"?>
+        ///<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MapDefinition-3.0.0.xsd" version="3.0.0">
+        ///  <Name>Base Map</Name>
+        ///  <CoordinateSystem>GEOGCS[&quot;LL84&quot;,DATUM[&quot;WGS 84&quot;,SPHEROID[&quot;WGS 84&quot;,6378137,298.25722293287],TOWGS84[0,0,0,0,0,0,0]],PRIMEM[&quot;Greenwich&quot;,0],UNIT[&quot;Degrees&quot;,0.01745329252]]</CoordinateSystem>
+        ///  <Extents>
+        ///    <MinX>-87.79786601383196</MinX>
+        ///    <MaxX>-87.6 [rest of string was truncated]";.
+        /// </summary>
+        internal static string UT_BaseMap {
+            get {
+                return ResourceManager.GetString("UT_BaseMap", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to  <?xml version="1.0" encoding="UTF-8"?>
+        ///<TileSetDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="TileSetDefinition-3.0.0.xsd">
+        ///  <TileStoreParameters>
+        ///    <TileProvider>Default</TileProvider>
+        ///    <Parameter>
+        ///      <Name>TilePath</Name>
+        ///      <Value>%MG_TILE_CACHE_PATH%</Value>
+        ///    </Parameter>
+        ///    <Parameter>
+        ///      <Name>TileWidth</Name>
+        ///      <Value>256</Value>
+        ///    </Parameter>
+        ///    <Parameter>
+        ///      <Name>TileHeight</Name>
+        ///      <Value>256</Value> [rest of string was truncated]";.
+        /// </summary>
+        internal static string UT_BaseMapTileSet {
+            get {
+                return ResourceManager.GetString("UT_BaseMapTileSet", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to  <?xml version="1.0" encoding="UTF-8"?>
+        ///<MapDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MapDefinition-3.0.0.xsd" version="3.0.0">
+        ///  <Name>Base Map linked to Tile Set</Name>
+        ///  <CoordinateSystem>{0}</CoordinateSystem>
+        ///  <Extents>
+        ///    <MinX>{1}</MinX>
+        ///    <MaxX>{3}</MaxX>
+        ///    <MinY>{2}</MinY>
+        ///    <MaxY>{4}</MaxY>
+        ///  </Extents>
+        ///  <BackgroundColor>FFF7E1D2</BackgroundColor>
+        ///  <TileSetSource>
+        ///    <ResourceId>{5}</ResourceId>
+        ///  </TileSetSource>
+        ///</MapD [rest of string was truncated]";.
+        /// </summary>
+        internal static string UT_LinkedTileSet {
+            get {
+                return ResourceManager.GetString("UT_LinkedTileSet", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to  <?xml version="1.0" encoding="UTF-8"?>
+        ///<TileSetDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="TileSetDefinition-3.0.0.xsd">
+        ///  <TileStoreParameters>
+        ///    <TileProvider>XYZ</TileProvider>
+        ///    <Parameter>
+        ///      <Name>TilePath</Name>
+        ///      <Value>%MG_TILE_CACHE_PATH%</Value>
+        ///    </Parameter>
+        ///    <Parameter>
+        ///      <Name>TileFormat</Name>
+        ///      <Value>PNG</Value>
+        ///    </Parameter>
+        ///  </TileStoreParameters>
+        ///  <Extents>
+        ///    <MinX>-87.79786601383196</MinX>
+        /// [rest of string was truncated]";.
+        /// </summary>
+        internal static string UT_XYZ {
+            get {
+                return ResourceManager.GetString("UT_XYZ", resourceCulture);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.resx
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.resx	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/Resources.resx	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="ResourceHeaderTemplate" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestMapGuideApi\Resources\ResourceHeaderTemplate.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;iso-8859-1</value>
+  </data>
+  <data name="UT_BaseMap" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestMapGuideApi\Resources\Misc\UT_BaseMap.mdf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="UT_BaseMapTileSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestMapGuideApi\Resources\Misc\UT_BaseMap.tsd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="UT_LinkedTileSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestMapGuideApi\Resources\Misc\UT_LinkedTileSet.mdf;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+  <data name="UT_XYZ" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\..\..\DotNet\TestMapGuideApi\Resources\Misc\UT_XYZ.tsd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+  </data>
+</root>
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,370 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /*
+    public class GetProperties : ServerAdminOperationExecutor<GetProperties>
+    {
+        public GetProperties(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+    */
+    public class Offline : ServerAdminOperationExecutor<Offline>
+    {
+        public Offline(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                _serverAdmin.TakeOffline();
+                return new TestResult(CommonUtility.BooleanToString(_serverAdmin.IsOnline()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class Online : ServerAdminOperationExecutor<Online>
+    {
+        public Online(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                _serverAdmin.BringOnline();
+                return new TestResult(CommonUtility.BooleanToString(_serverAdmin.IsOnline()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLog : ServerAdminOperationExecutor<GetLog>
+    {
+        public GetLog(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "LOGTYPE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NUMENTRIES", param);
+
+                MgByteReader reader = null;
+                if (param["NUMENTRIES"] == null)
+                {
+                    reader = _serverAdmin.GetLog(param["LOGTYPE"]);
+                }
+                else
+                {
+                    reader = _serverAdmin.GetLog(param["LOGTYPE"], Convert.ToInt32(param["NUMENTRIES"]));
+                }
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetLogByDate : ServerAdminOperationExecutor<GetLogByDate>
+    {
+        public GetLogByDate(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "LOGTYPE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "FROMDATE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "TODATE", param);
+
+                string[] fromDatePieces = (param["FROMDATE"] ?? "").Split(',');
+                string[] toDatePieces = (param["TODATE"] ?? "").Split(',');
+
+                MgDateTime fromDate = null;
+                MgDateTime toDate = null;
+
+                if (fromDatePieces.Length == 3)
+                {
+                    fromDate = new MgDateTime(Convert.ToInt16(fromDatePieces[0]), Convert.ToInt16(fromDatePieces[1]), Convert.ToInt16(fromDatePieces[2]));
+                }
+                else if (fromDatePieces.Length == 7)
+                {
+                    fromDate = new MgDateTime(Convert.ToInt16(fromDatePieces[0]), Convert.ToInt16(fromDatePieces[1]), Convert.ToInt16(fromDatePieces[2]), Convert.ToInt16(fromDatePieces[3]), Convert.ToInt16(fromDatePieces[4]), Convert.ToInt16(fromDatePieces[5]), Convert.ToInt32(fromDatePieces[6]));
+                }
+
+                if (toDatePieces.Length == 3)
+                {
+                    toDate = new MgDateTime(Convert.ToInt16(toDatePieces[0]), Convert.ToInt16(toDatePieces[1]), Convert.ToInt16(toDatePieces[2]));
+                }
+                else if (toDatePieces.Length == 7)
+                {
+                    toDate = new MgDateTime(Convert.ToInt16(toDatePieces[0]), Convert.ToInt16(toDatePieces[1]), Convert.ToInt16(toDatePieces[2]), Convert.ToInt16(toDatePieces[3]), Convert.ToInt16(toDatePieces[4]), Convert.ToInt16(toDatePieces[5]), Convert.ToInt32(toDatePieces[6]));
+                }
+
+                MgByteReader reader = _serverAdmin.GetLog(param["LOGTYPE"] ?? "", fromDate, toDate);
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class ClearLog : ServerAdminOperationExecutor<ClearLog>
+    {
+        public ClearLog(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "LOGTYPE", param);
+
+                bool cleared = _serverAdmin.ClearLog(param["LOGTYPE"]);
+                return new TestResult(CommonUtility.BooleanToString(cleared), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    /*
+    public class EnumerateLogs : ServerAdminOperationExecutor<EnumerateLogs>
+    {
+        public EnumerateLogs(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+     */
+
+    public class DeleteLog : ServerAdminOperationExecutor<DeleteLog>
+    {
+        public DeleteLog(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "FILENAME", param);
+
+                _serverAdmin.DeleteLog(param["FILENAME"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class RenameLog : ServerAdminOperationExecutor<RenameLog>
+    {
+        public RenameLog(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "OLDFILENAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWFILENAME", param);
+
+                _serverAdmin.RenameLog(param["OLDFILENAME"], param["NEWFILENAME"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumeratePackages : ServerAdminOperationExecutor<EnumeratePackages>
+    {
+        public EnumeratePackages(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var packages = _serverAdmin.EnumeratePackages();
+                return new TestResult(CommonUtility.MgStringCollectionToString(packages), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class DeletePackage : ServerAdminOperationExecutor<DeletePackage>
+    {
+        public DeletePackage(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PACKAGENAME", param);
+
+                _serverAdmin.DeletePackage(param["PACKAGENAME"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class LoadPackage : ServerAdminOperationExecutor<LoadPackage>
+    {
+        public LoadPackage(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PACKAGENAME", param);
+
+                _serverAdmin.LoadPackage(param["PACKAGENAME"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetPackageStatus : ServerAdminOperationExecutor<GetPackageStatus>
+    {
+        public GetPackageStatus(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PACKAGENAME", param);
+
+                MgPackageStatusInformation status = _serverAdmin.GetPackageStatus(param["PACKAGENAME"]);
+                string code = status.GetStatusCode();
+                return new TestResult(code, "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetPackageLog : ServerAdminOperationExecutor<GetPackageLog>
+    {
+        public GetPackageLog(MgServerAdmin admin, string unitTestVm)
+            : base(admin, unitTestVm)
+        {
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "PACKAGENAME", param);
+
+                MgByteReader reader = _serverAdmin.GetPackageLog(param["PACKAGENAME"]);
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/ServerAdminOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/ServerAdminOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/ServerAdmin/ServerAdminOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,24 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgServerAdmin
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class ServerAdminOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgServerAdmin _serverAdmin;
+
+        protected ServerAdminOperationExecutor(MgServerAdmin serverAdmin, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _serverAdmin = serverAdmin;
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,795 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public interface IMapGuideSession
+    {
+        string SessionID { get; set; }
+    }
+
+    public class CreateSession : SiteServiceOperationExecutor<CreateSession>
+    {
+        private IMapGuideSession _session;
+
+        public CreateSession(MgSite site, string unitTestVm, IMapGuideSession session)
+            : base(site, unitTestVm)
+        {
+            _session = session;
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var user = new MgUserInformation();
+                user.SetMgUsernamePassword("Administrator", "admin");
+                user.SetLocale("en");
+
+                var site = new MgSite();
+                site.Open(user);
+
+                string session = site.CreateSession();
+                _session.SessionID = session;
+                site.Close();
+
+                return new TestResult(session, "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class DestroySession : SiteServiceOperationExecutor<DestroySession>
+    {
+        public DestroySession(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                //This is what PHP one is giving us
+                return new TestResult("Not Implemented Yet", "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GetUserForSession : SiteServiceOperationExecutor<GetUserForSession>
+    {
+        private IMapGuideSession _session;
+
+        public GetUserForSession(MgSite site, string unitTestVm, IMapGuideSession session)
+            : base(site, unitTestVm)
+        {
+            _session = session;
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var site = new MgSite();
+                var user = new MgUserInformation();
+                user.SetMgSessionId(_session.SessionID ?? "");
+                site.Open(user);
+                var userId = site.GetUserForSession();
+                site.Close();
+                return new TestResult(userId, "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    /*
+    public class GetSiteServerAddress : SiteServiceOperationExecutor<GetSiteServerAddress>
+    {
+        public GetSiteServerAddress(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var result = _site.GetCurrentSiteAddress();
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+     */
+
+    public class EnumerateUsers : SiteServiceOperationExecutor<EnumerateUsers>
+    {
+        public EnumerateUsers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUP", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "ROLE", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "INCLUDEGROUPS", param);
+
+                MgByteReader reader = null;
+                if (param["ROLE"] != null)
+                {
+                    reader = _site.EnumerateUsers(param["GROUP"] ?? "", param["ROLE"] ?? "", (param["INCLUDEGROUPS"] == "1"));
+                }
+                else
+                {
+                    reader = _site.EnumerateUsers(param["GROUP"] ?? "");
+                }
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class AddUser : SiteServiceOperationExecutor<AddUser>
+    {
+        public AddUser(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USERID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "USERNAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "PASSWORD", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DESCRIPTION", param);
+
+                _site.AddUser(param["USERID"], param["USERNAME"], param["PASSWORD"], param["DESCRIPTION"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class UpdateUser : SiteServiceOperationExecutor<UpdateUser>
+    {
+        public UpdateUser(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USERID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWUSERID", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWUSERNAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWPASSWORD", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWDESCRIPTION", param);
+
+                _site.UpdateUser(param["USERID"], param["NEWUSERID"], param["NEWUSERNAME"], param["NEWPASSWORD"], param["NEWDESCRIPTION"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class DeleteUsers : SiteServiceOperationExecutor<DeleteUsers>
+    {
+        public DeleteUsers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USERS", param);
+
+                MgStringCollection users = CommonUtility.StringToMgStringCollection(param["USERS"]);
+
+                _site.DeleteUsers(users);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GrantRoleMembershipsToUsers : SiteServiceOperationExecutor<GrantRoleMembershipsToUsers>
+    {
+        public GrantRoleMembershipsToUsers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "ROLES", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "USERS", param);
+
+                MgStringCollection roles = CommonUtility.StringToMgStringCollection(param["ROLES"]);
+                MgStringCollection users = CommonUtility.StringToMgStringCollection(param["USERS"]);
+
+                _site.GrantRoleMembershipsToUsers(roles, users);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class RevokeRoleMembershipsFromUsers : SiteServiceOperationExecutor<RevokeRoleMembershipsFromUsers>
+    {
+        public RevokeRoleMembershipsFromUsers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "ROLES", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "USERS", param);
+
+                MgStringCollection roles = CommonUtility.StringToMgStringCollection(param["ROLES"]);
+                MgStringCollection users = CommonUtility.StringToMgStringCollection(param["USERS"]);
+
+                _site.RevokeRoleMembershipsFromUsers(roles, users);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GrantGroupMembershipsToUsers : SiteServiceOperationExecutor<GrantGroupMembershipsToUsers>
+    {
+        public GrantGroupMembershipsToUsers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUPS", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "USERS", param);
+
+                MgStringCollection groups = CommonUtility.StringToMgStringCollection(param["GROUPS"]);
+                MgStringCollection users = CommonUtility.StringToMgStringCollection(param["USERS"]);
+
+                _site.GrantGroupMembershipsToUsers(groups, users);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class RevokeGroupMembershipsFromUsers : SiteServiceOperationExecutor<RevokeGroupMembershipsFromUsers>
+    {
+        public RevokeGroupMembershipsFromUsers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUPS", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "USERS", param);
+
+                MgStringCollection groups = CommonUtility.StringToMgStringCollection(param["GROUPS"]);
+                MgStringCollection users = CommonUtility.StringToMgStringCollection(param["USERS"]);
+
+                _site.RevokeGroupMembershipsFromUsers(groups, users);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateGroups : SiteServiceOperationExecutor<EnumerateGroups>
+    {
+        public EnumerateGroups(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "ROLE", param);
+
+                MgByteReader reader = _site.EnumerateGroups(param["USER"] ?? "", param["ROLE"] ?? "");
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateGroups2 : SiteServiceOperationExecutor<EnumerateGroups2>
+    {
+        public EnumerateGroups2(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "LOGIN", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "PASSWORD", param);
+
+                var userInfo = new MgUserInformation();
+                userInfo.SetMgUsernamePassword(param["LOGIN"], param["PASSWORD"]);
+                userInfo.SetLocale("en");
+
+                var site = new MgSite();
+                site.Open(userInfo);
+
+                MgByteReader reader = site.EnumerateGroups(param["USER"]);
+                site.Close();
+
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateRoles2 : SiteServiceOperationExecutor<EnumerateRoles2>
+    {
+        public EnumerateRoles2(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "LOGIN", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "PASSWORD", param);
+
+                var userInfo = new MgUserInformation();
+                userInfo.SetMgUsernamePassword(param["LOGIN"], param["PASSWORD"]);
+                userInfo.SetLocale("en");
+
+                var site = new MgSite();
+                site.Open(userInfo);
+
+                MgStringCollection roles = site.EnumerateRoles(param["USER"]);
+                site.Close();
+
+                return new TestResult(CommonUtility.MgStringCollectionToString(roles), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class AddGroup : SiteServiceOperationExecutor<AddGroup>
+    {
+        public AddGroup(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUP", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DESCRIPTION", param);
+
+                _site.AddGroup(param["GROUP"] ?? "", param["DESCRIPTION"] ?? "");
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class UpdateGroup : SiteServiceOperationExecutor<UpdateGroup>
+    {
+        public UpdateGroup(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUP", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWGROUP", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWDESCRIPTION", param);
+
+                _site.UpdateGroup(param["GROUP"] ?? "", param["NEWGROUP"] ?? "", param["NEWDESCRIPTION"] ?? "");
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class DeleteGroups : SiteServiceOperationExecutor<DeleteGroups>
+    {
+        public DeleteGroups(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUPS", param);
+
+                MgStringCollection groups = CommonUtility.StringToMgStringCollection(param["GROUPS"]);
+                _site.DeleteGroups(groups);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class GrantRoleMembershipsToGroups : SiteServiceOperationExecutor<GrantRoleMembershipsToGroups>
+    {
+        public GrantRoleMembershipsToGroups(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "ROLES", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUPS", param);
+
+                MgStringCollection roles = CommonUtility.StringToMgStringCollection(param["ROLES"]);
+                MgStringCollection groups = CommonUtility.StringToMgStringCollection(param["GROUPS"]);
+
+                _site.GrantRoleMembershipsToGroups(roles, groups);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class RevokeRoleMembershipsFromGroups : SiteServiceOperationExecutor<RevokeRoleMembershipsFromGroups>
+    {
+        public RevokeRoleMembershipsFromGroups(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "ROLES", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUPS", param);
+
+                MgStringCollection roles = CommonUtility.StringToMgStringCollection(param["ROLES"]);
+                MgStringCollection groups = CommonUtility.StringToMgStringCollection(param["GROUPS"]);
+
+                _site.RevokeRoleMembershipsFromGroups(roles, groups);
+
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateRoles : SiteServiceOperationExecutor<EnumerateRoles>
+    {
+        public EnumerateRoles(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "USER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "GROUP", param);
+
+                MgStringCollection roles = _site.EnumerateRoles(param["USER"], param["GROUP"]);
+
+                return new TestResult(CommonUtility.MgStringCollectionToString(roles), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class EnumerateServers : SiteServiceOperationExecutor<EnumerateServers>
+    {
+        public EnumerateServers(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                MgByteReader reader = _site.EnumerateServers();
+                return TestResult.FromByteReader(reader);
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class AddServer : SiteServiceOperationExecutor<AddServer>
+    {
+        public AddServer(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "NAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "DESCRIPTION", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "ADDRESS", param);
+
+                _site.AddServer(param["NAME"], param["DESCRIPTION"], param["ADDRESS"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class UpdateServer : SiteServiceOperationExecutor<UpdateServer>
+    {
+        public UpdateServer(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "OLDNAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWNAME", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWDESCRIPTION", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "NEWADDRESS", param);
+
+                _site.UpdateServer(param["OLDNAME"], param["NEWNAME"], param["NEWDESCRIPTION"], param["NEWADDRESS"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class RemoveServer : SiteServiceOperationExecutor<RemoveServer>
+    {
+        public RemoveServer(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "NAME", param);
+
+                _site.RemoveServer(param["NAME"]);
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    /*
+    public class EnumerateServicesOnServer : SiteServiceOperationExecutor<EnumerateServicesOnServer>
+    {
+        public EnumerateServicesOnServer(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class AddServicesToServer : SiteServiceOperationExecutor<AddServicesToServer>
+    {
+        public AddServicesToServer(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+    
+    public class RemoveServicesFromServer : SiteServiceOperationExecutor<RemoveServicesFromServer>
+    {
+        public RemoveServicesFromServer(MgSite site, string unitTestVm)
+            : base(site, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                return new TestResult();
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+     */
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/SiteServiceOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/SiteServiceOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/SiteService/SiteServiceOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,24 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    /// <summary>
+    /// The base class of all test executors using the MgSite
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class SiteServiceOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgSite _site;
+
+        protected SiteServiceOperationExecutor(MgSite site, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _site = site;
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/TestMapGuideApi.xproj
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/TestMapGuideApi.xproj	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/TestMapGuideApi.xproj	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>b1f5b09f-febf-436f-8951-d315b603bbf4</ProjectGuid>
+    <RootNamespace>OSGeo.MapGuide.Test</RootNamespace>
+    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
+    <OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SchemaVersion>2.0</SchemaVersion>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
+</Project>
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/Operations.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/Operations.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/Operations.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,621 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public class WL_GetTitle : WebLayoutOperationExecutor<WL_GetTitle>
+    {
+        public WL_GetTitle(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                return new TestResult(_wl.GetTitle(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);   
+            }
+        }
+    }
+
+    public class WL_GetMapDefinition : WebLayoutOperationExecutor<WL_GetMapDefinition>
+    {
+        public WL_GetMapDefinition(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                return new TestResult(_wl.GetMapDefinition(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_GetScale : WebLayoutOperationExecutor<WL_GetScale>
+    {
+        public WL_GetScale(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                return new TestResult(_wl.GetScale().ToString(CultureInfo.InvariantCulture), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_GetCenter : WebLayoutOperationExecutor<WL_GetCenter>
+    {
+        public WL_GetCenter(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var center = _wl.GetCenter();
+                if (center == null)
+                {
+                    return new TestResult("", "text/plain");
+                }
+                else
+                {
+                    var coord = center.Coordinate;
+                    return new TestResult(coord.GetX() + "/" + coord.GetY(), "text/plain");
+                }
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowToolbar : WebLayoutOperationExecutor<WL_ShowToolbar>
+    {
+        public WL_ShowToolbar(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tb = _wl.GetToolBar();
+                return new TestResult(CommonUtility.BooleanToString(tb.IsVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowStatusbar : WebLayoutOperationExecutor<WL_ShowStatusbar>
+    {
+        public WL_ShowStatusbar(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var sb = _wl.GetStatusBar();
+                return new TestResult(CommonUtility.BooleanToString(sb.IsVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowTaskpane : WebLayoutOperationExecutor<WL_ShowTaskpane>
+    {
+        public WL_ShowTaskpane(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                return new TestResult(CommonUtility.BooleanToString(tp.IsVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowTaskbar : WebLayoutOperationExecutor<WL_ShowTaskbar>
+    {
+        public WL_ShowTaskbar(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tb = tp.GetTaskBar();
+                return new TestResult(CommonUtility.BooleanToString(tb.IsVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowLegend : WebLayoutOperationExecutor<WL_ShowLegend>
+    {
+        public WL_ShowLegend(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var ip = _wl.GetInformationPane();
+                return new TestResult(CommonUtility.BooleanToString(ip.IsLegendBandVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowProperties : WebLayoutOperationExecutor<WL_ShowProperties>
+    {
+        public WL_ShowProperties(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var ip = _wl.GetInformationPane();
+                return new TestResult(CommonUtility.BooleanToString(ip.IsPropertiesBandVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_GetTaskPaneWidth : WebLayoutOperationExecutor<WL_GetTaskPaneWidth>
+    {
+        public WL_GetTaskPaneWidth(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                return new TestResult(tp.GetWidth().ToString(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_GetInformationPaneWidth : WebLayoutOperationExecutor<WL_GetInformationPaneWidth>
+    {
+        public WL_GetInformationPaneWidth(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var ip = _wl.GetInformationPane();
+                return new TestResult(ip.GetWidth().ToString(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_GetInitialTaskUrl : WebLayoutOperationExecutor<WL_GetInitialTaskUrl>
+    {
+        public WL_GetInitialTaskUrl(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                return new TestResult(tp.GetInitialTaskUrl(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ShowContextMenu : WebLayoutOperationExecutor<WL_ShowContextMenu>
+    {
+        public WL_ShowContextMenu(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var ctx = _wl.GetContextMenu();
+                return new TestResult(CommonUtility.BooleanToString(ctx.IsVisible()), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_TestUiItem : WebLayoutOperationExecutor<WL_TestUiItem>
+    {
+        public WL_TestUiItem(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+
+                MgWebWidgetCollection coll = null;
+                var param = new NameValueCollection();
+                _unitTestVm.ReadParameterValue(paramSetId, "CONTAINER", param);
+                _unitTestVm.ReadParameterValue(paramSetId, "INDEX", param);
+
+                switch (param["CONTAINER"])
+                {
+                    case "toolbar":
+                        var tb = _wl.GetToolBar();
+                        coll = tb.GetWidgets();
+                        break;
+                    case "tasklist":
+                        var tp = _wl.GetTaskPane();
+                        var tbar = tp.GetTaskBar();
+                        coll = tbar.GetTaskList();
+                        break;
+                    case "contextmenu":
+                        coll = _wl.GetContextMenu();
+                        break;
+                }
+
+                var widget = coll.GetWidget(Convert.ToInt32(param["INDEX"]));
+                if (widget == null)
+                    return new TestResult("Null widget", "text/plain");
+                else
+                    return new TestResult(FormatProperties(widget), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_HomeTooltip : WebLayoutOperationExecutor<WL_HomeTooltip>
+    {
+        public WL_HomeTooltip(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var home = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Home);
+                return new TestResult(home.GetTooltip(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_HomeDescription : WebLayoutOperationExecutor<WL_HomeDescription>
+    {
+        public WL_HomeDescription(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var home = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Home);
+                return new TestResult(home.GetDescription(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_BackTooltip : WebLayoutOperationExecutor<WL_BackTooltip>
+    {
+        public WL_BackTooltip(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var back = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Back);
+                return new TestResult(back.GetTooltip(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_BackDescription : WebLayoutOperationExecutor<WL_BackDescription>
+    {
+        public WL_BackDescription(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var back = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Back);
+                return new TestResult(back.GetDescription(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ForwardTooltip : WebLayoutOperationExecutor<WL_ForwardTooltip>
+    {
+        public WL_ForwardTooltip(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var fwd = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Forward);
+                return new TestResult(fwd.GetTooltip(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_ForwardDescription : WebLayoutOperationExecutor<WL_ForwardDescription>
+    {
+        public WL_ForwardDescription(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var fwd = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Forward);
+                return new TestResult(fwd.GetDescription(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_TasksName : WebLayoutOperationExecutor<WL_TasksName>
+    {
+        public WL_TasksName(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var tasks = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Tasks);
+                return new TestResult(tasks.GetName(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_TasksTooltip : WebLayoutOperationExecutor<WL_TasksTooltip>
+    {
+        public WL_TasksTooltip(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var tasks = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Tasks);
+                return new TestResult(tasks.GetTooltip(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+
+    public class WL_TasksDescription : WebLayoutOperationExecutor<WL_TasksDescription>
+    {
+        public WL_TasksDescription(IWebLayoutCreator layout, string unitTestVm)
+            : base(layout, unitTestVm)
+        {
+
+        }
+
+        public override TestResult Execute(int paramSetId)
+        {
+            try
+            {
+                CreateWebLayoutFromResource(paramSetId);
+                var tp = _wl.GetTaskPane();
+                var tbar = tp.GetTaskBar();
+                var tbuttons = tbar.GetTaskButtons();
+                var tasks = (MgWebTaskBarWidget)tbuttons.GetWidget(MgWebTaskButtonType.Tasks);
+                return new TestResult(tasks.GetDescription(), "text/plain");
+            }
+            catch (MgException ex)
+            {
+                return TestResult.FromMgException(ex);
+            }
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/WebLayoutOperationExecutor.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/WebLayoutOperationExecutor.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/WebLayout/WebLayoutOperationExecutor.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,92 @@
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSGeo.MapGuide.Test.Operations
+{
+    public interface IWebLayoutCreator
+    {
+        MgWebLayout CreateWebLayout(MgResourceIdentifier resId);
+    }
+
+    /// <summary>
+    /// The base class of all test executors using the MgWebLayout
+    /// </summary>
+    /// <typeparam name="T">The test executor subclass type</typeparam>
+    public abstract class WebLayoutOperationExecutor<T> : PlatformApiTestExecutor
+    {
+        protected MgWebLayout _wl;
+        protected IWebLayoutCreator _creator;
+
+        protected WebLayoutOperationExecutor(IWebLayoutCreator wl, string unitTestVm)
+            : base(typeof(T).Name.ToUpper(), ApiTypes.Platform, unitTestVm)
+        {
+            _creator = wl;
+        }
+
+        protected void CreateWebLayoutFromResource(int paramSetId)
+        {
+            if (_wl != null)
+                return;
+
+            _unitTestVm.Execute("Select ParamValue from Params WHERE ParamSet={0} AND ParamName=\"WEBLAYOUT\"", paramSetId);
+            string wlId = _unitTestVm.GetString("ParamValue");
+            if (string.IsNullOrEmpty(wlId))
+            {
+                wlId = "Library://UnitTest/layouts/Test.WebLayout";
+            }
+            MgResourceIdentifier resId = new MgResourceIdentifier(wlId);
+            _wl = _creator.CreateWebLayout(resId);
+        }
+
+        protected string FormatProperties(MgWebWidget it)
+        {
+            string name = "";
+            switch (it.GetType())
+            { 
+                case MgWebWidgetType.Separator:
+                    name = "";
+                    break;
+                case MgWebWidgetType.Command:
+                    var cmd = ((MgWebCommandWidget)it).GetCommand();
+                    name = cmd.GetLabel();
+                    break;
+                case MgWebWidgetType.Flyout:
+                    name = ((MgWebFlyoutWidget)it).GetLabel();
+                    break;
+            }
+
+            string str = "[" + name + "/" + it.GetType();
+            if (it.GetType() == MgWebWidgetType.Separator)
+            {
+                return str + "]";
+            }
+            else if (it.GetType() == MgWebWidgetType.Command)
+            {
+                var cmd = ((MgWebCommandWidget)it).GetCommand();
+                return str + "/" + cmd.GetName() + "]";
+            }
+            else if (it.GetType() == MgWebWidgetType.Flyout)
+            {
+                var fly = ((MgWebFlyoutWidget)it);
+                str = str + "/" + fly.GetIconUrl();
+                var coll = fly.GetSubItems();
+                for (int i = 0; i < coll.GetCount(); i++)
+                {
+                    var widget = coll.GetWidget(i);
+                    str = str + "/" + FormatProperties(widget);
+                }
+                str = str + "]";
+            }
+            else
+            {
+                return "[** error **]";
+            }
+
+            return str;
+        }
+    }
+}
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,26 @@
+{
+    "version": "1.0.0-*",
+    "description": "TestMapGuideApi Class Library",
+    "authors": [ "OSGeo" ],
+    "tags": [ "" ],
+    "projectUrl": "",
+    "licenseUrl": "",
+    "frameworks": {
+        "dnxcore50": {
+            "dependencies": {
+                "Microsoft.CSharp": "4.0.1-beta-23516",
+                "System.Collections": "4.0.11-beta-23516",
+                "System.Linq": "4.0.1-beta-23516",
+                "System.Runtime": "4.0.21-beta-23516",
+                "System.Threading": "4.0.11-beta-23516",
+                "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+                "MapGuideDotNetCoreApi": "3.1.0"
+            }
+        }
+    },
+    "dependencies": {
+        "System.Reflection": "4.1.0-beta-23516",
+        "System.Threading.Thread": "4.0.0-beta-23516",
+        "TestCommon": "1.0.0-*"
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.lock.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.lock.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestMapGuideApi/project.lock.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,3704 @@
+{
+  "locked": false,
+  "version": 2,
+  "targets": {
+    "DNXCore,Version=v5.0": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Threading.Thread/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Threading.Thread.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Thread.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Collections.Specialized": "4.0.1-beta-23516",
+          "System.Console": "4.0.0-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Xml.XmlDocument": "4.0.1-beta-23516"
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x86": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x86/native/ACE.dll": {},
+          "runtimes/win7-x86/native/GEOS.dll": {},
+          "runtimes/win7-x86/native/lib_json.dll": {},
+          "runtimes/win7-x86/native/MapGuideDotNetCoreUnmanagedApi.dll": {},
+          "runtimes/win7-x86/native/MgFoundation.dll": {},
+          "runtimes/win7-x86/native/MgGeometry.dll": {},
+          "runtimes/win7-x86/native/MgHttpHandler.dll": {},
+          "runtimes/win7-x86/native/MgMapGuideCommon.dll": {},
+          "runtimes/win7-x86/native/MgMdfModel.dll": {},
+          "runtimes/win7-x86/native/MgMdfParser.dll": {},
+          "runtimes/win7-x86/native/MgPlatformBase.dll": {},
+          "runtimes/win7-x86/native/MgWebApp.dll": {},
+          "runtimes/win7-x86/native/MgWebSupport.dll": {},
+          "runtimes/win7-x86/native/readme.txt": {},
+          "runtimes/win7-x86/native/xerces-c_3_1mg.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x86/native/sqlite3.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Overlapped": "4.0.0",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Overlapped/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Overlapped.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Overlapped.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Threading.Thread/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Threading.Thread.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Thread.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Collections.Specialized": "4.0.1-beta-23516",
+          "System.Console": "4.0.0-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Xml.XmlDocument": "4.0.1-beta-23516"
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x64": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x64/native/ACE.dll": {},
+          "runtimes/win7-x64/native/GEOS.dll": {},
+          "runtimes/win7-x64/native/lib_json.dll": {},
+          "runtimes/win7-x64/native/MapGuideDotNetCoreUnmanagedApi.dll": {},
+          "runtimes/win7-x64/native/MgFoundation.dll": {},
+          "runtimes/win7-x64/native/MgGeometry.dll": {},
+          "runtimes/win7-x64/native/MgHttpHandler.dll": {},
+          "runtimes/win7-x64/native/MgMapGuideCommon.dll": {},
+          "runtimes/win7-x64/native/MgMdfModel.dll": {},
+          "runtimes/win7-x64/native/MgMdfParser.dll": {},
+          "runtimes/win7-x64/native/MgPlatformBase.dll": {},
+          "runtimes/win7-x64/native/MgWebApp.dll": {},
+          "runtimes/win7-x64/native/MgWebSupport.dll": {},
+          "runtimes/win7-x64/native/readme.txt": {},
+          "runtimes/win7-x64/native/xerces-c_3_1mg.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x64/native/sqlite3.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Overlapped": "4.0.0",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Overlapped/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Overlapped.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Overlapped.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Threading.Thread/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Threading.Thread.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Thread.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Collections.Specialized": "4.0.1-beta-23516",
+          "System.Console": "4.0.0-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Xml.XmlDocument": "4.0.1-beta-23516"
+        }
+      }
+    }
+  },
+  "libraries": {
+    "TestCommon/1.0.0": {
+      "type": "project",
+      "path": "../TestCommon/project.json"
+    },
+    "MapGuideDotNetCoreApi/3.1.0": {
+      "type": "package",
+      "sha512": "A1bl+WWyigH83cWV45k3HeqE8i3BTcN36YGVbaXByTQOOFZz14CYDoiApZjXYTN4lqQpT2RDEZ4VUWHCtMrsqA==",
+      "files": [
+        "lib/dnxcore50/MapGuideDotNetCoreApi.dll",
+        "lib/dnxcore50/MapGuideDotNetCoreApi.xml",
+        "MapGuideDotNetCoreApi.3.1.0.nupkg",
+        "MapGuideDotNetCoreApi.3.1.0.nupkg.sha512",
+        "MapGuideDotNetCoreApi.nuspec",
+        "runtimes/win7-x64/native/ACE.dll",
+        "runtimes/win7-x64/native/GEOS.dll",
+        "runtimes/win7-x64/native/lib_json.dll",
+        "runtimes/win7-x64/native/MapGuideDotNetCoreUnmanagedApi.dll",
+        "runtimes/win7-x64/native/MgFoundation.dll",
+        "runtimes/win7-x64/native/MgGeometry.dll",
+        "runtimes/win7-x64/native/MgHttpHandler.dll",
+        "runtimes/win7-x64/native/MgMapGuideCommon.dll",
+        "runtimes/win7-x64/native/MgMdfModel.dll",
+        "runtimes/win7-x64/native/MgMdfParser.dll",
+        "runtimes/win7-x64/native/MgPlatformBase.dll",
+        "runtimes/win7-x64/native/MgWebApp.dll",
+        "runtimes/win7-x64/native/MgWebSupport.dll",
+        "runtimes/win7-x64/native/readme.txt",
+        "runtimes/win7-x64/native/xerces-c_3_1mg.dll",
+        "runtimes/win7-x86/native/ACE.dll",
+        "runtimes/win7-x86/native/GEOS.dll",
+        "runtimes/win7-x86/native/lib_json.dll",
+        "runtimes/win7-x86/native/MapGuideDotNetCoreUnmanagedApi.dll",
+        "runtimes/win7-x86/native/MgFoundation.dll",
+        "runtimes/win7-x86/native/MgGeometry.dll",
+        "runtimes/win7-x86/native/MgHttpHandler.dll",
+        "runtimes/win7-x86/native/MgMapGuideCommon.dll",
+        "runtimes/win7-x86/native/MgMdfModel.dll",
+        "runtimes/win7-x86/native/MgMdfParser.dll",
+        "runtimes/win7-x86/native/MgPlatformBase.dll",
+        "runtimes/win7-x86/native/MgWebApp.dll",
+        "runtimes/win7-x86/native/MgWebSupport.dll",
+        "runtimes/win7-x86/native/readme.txt",
+        "runtimes/win7-x86/native/xerces-c_3_1mg.dll"
+      ]
+    },
+    "Microsoft.CSharp/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fb+HO3nIjHao9lqsVVM0ne3GM/+1EfRQUoM58cxEOt+5biy/8DQ1nxIahZ9VaJKw7Wgb6XhRhsdwg8DkePEOJA==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.CSharp.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/Microsoft.CSharp.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg.sha512",
+        "Microsoft.CSharp.nuspec",
+        "ref/dotnet5.1/de/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/es/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/fr/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/it/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ja/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ko/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/Microsoft.CSharp.dll",
+        "ref/dotnet5.1/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ru/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hans/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hant/Microsoft.CSharp.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/Microsoft.CSharp.xml",
+        "ref/netcore50/es/Microsoft.CSharp.xml",
+        "ref/netcore50/fr/Microsoft.CSharp.xml",
+        "ref/netcore50/it/Microsoft.CSharp.xml",
+        "ref/netcore50/ja/Microsoft.CSharp.xml",
+        "ref/netcore50/ko/Microsoft.CSharp.xml",
+        "ref/netcore50/Microsoft.CSharp.dll",
+        "ref/netcore50/Microsoft.CSharp.xml",
+        "ref/netcore50/ru/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hans/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hant/Microsoft.CSharp.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._"
+      ]
+    },
+    "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "54F32OBWIWMIpeKggCMEX+Bp/TiAiKzBaQ4z+IRr61eNSnJhxMnLE/QWDs5YbCtbDlWIB4+VBC1rnT8PFGCtdw==",
+      "files": [
+        "build/net451/Microsoft.Data.Sqlite.props",
+        "build/netcore50/Microsoft.Data.Sqlite.targets",
+        "build/netcore50/win10-arm/native/sqlite3.dll",
+        "build/netcore50/win10-x64/native/sqlite3.dll",
+        "build/netcore50/win10-x86/native/sqlite3.dll",
+        "lib/dotnet5.4/Microsoft.Data.Sqlite.dll",
+        "lib/dotnet5.4/Microsoft.Data.Sqlite.xml",
+        "lib/net451/Microsoft.Data.Sqlite.dll",
+        "lib/net451/Microsoft.Data.Sqlite.xml",
+        "lib/netcore50/Microsoft.Data.Sqlite.dll",
+        "lib/netcore50/Microsoft.Data.Sqlite.xml",
+        "Microsoft.Data.Sqlite.1.0.0-rc1-final.nupkg",
+        "Microsoft.Data.Sqlite.1.0.0-rc1-final.nupkg.sha512",
+        "Microsoft.Data.Sqlite.nuspec",
+        "runtimes/win7-x64/native/sqlite3.dll",
+        "runtimes/win7-x86/native/sqlite3.dll"
+      ]
+    },
+    "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "26HS4c6MBisN+D7XUr8HObOI/JJvSJQYQR//Bfw/hi9UqhqK3lFpNKjOuYHI+gTxYdXT46HqZiz4D+k7d+ob3A==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll",
+        "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.xml",
+        "lib/net451/Microsoft.Extensions.PlatformAbstractions.dll",
+        "lib/net451/Microsoft.Extensions.PlatformAbstractions.xml",
+        "Microsoft.Extensions.PlatformAbstractions.1.0.0-rc1-final.nupkg",
+        "Microsoft.Extensions.PlatformAbstractions.1.0.0-rc1-final.nupkg.sha512",
+        "Microsoft.Extensions.PlatformAbstractions.nuspec"
+      ]
+    },
+    "runtime.win7.System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "pfQrTtnYcWOtI3RrpqjAzwT3I55ivTVZFpbKYG59dYTTvaLFGbs2njc/mrXHij6GylyJ2YjekS/9r6I8X3LV1A==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Console.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.Console.dll",
+        "runtimes/win7/lib/net/_._"
+      ]
+    },
+    "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TxSgeP23B6bPfE0QFX8u4/1p1jP6Ugn993npTRf3e9F3y61BIQeCkt5Im0gGdjz0dxioHkuTr+C2m4ELsMos8Q==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Diagnostics.Debug.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll",
+        "runtimes/win7/lib/netcore50/System.Diagnostics.Debug.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll"
+      ]
+    },
+    "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "UOHEVg3jQwsvy3b+8zhDk7BQ9GhHY1KcjHSuqArzIl7oemcM/+D7OfS5iOA96ydjEv9FmIKV3knkXMge+cUD0Q==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.IO.FileSystem.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll",
+        "runtimes/win7/lib/net/_._",
+        "runtimes/win7/lib/netcore50/System.IO.FileSystem.dll",
+        "runtimes/win7/lib/win8/_._",
+        "runtimes/win7/lib/wp8/_._",
+        "runtimes/win7/lib/wpa81/_._"
+      ]
+    },
+    "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HphDhue34J/4+1rIMtInY1FWK1oLEMpxIpxGeNnhIlQf7hv5QDf05aWEC6180qbgkPBCFwyGnwWRBnONApwbBQ==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Private.Uri.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll",
+        "runtimes/win7/lib/netcore50/System.Private.Uri.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll"
+      ]
+    },
+    "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Jm+LAzN7CZl1BZSxz4TsMBNy1rHNqyY/1+jxZf3BpF7vkPlWRXa/vSfY0lZJZdy4Doxa893bmcCf9pZNsJU16Q==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Extensions.dll",
+        "lib/netcore50/System.Runtime.Extensions.dll",
+        "ref/dotnet/_._",
+        "runtime.win7.System.Runtime.Extensions.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Runtime.Extensions.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Runtime.Extensions.nuspec",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll"
+      ]
+    },
+    "runtime.win7.System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "paSNXQ5Y6Exu3OpekooyMJFQ8mitn69fGO5Br3XLIfQ1KiMYVmRf+o6dMprC0SpPROVCiCxdUaJx5XkDEVL3uA==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Threading.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Threading.dll",
+        "runtimes/win7/lib/netcore50/System.Threading.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.dll"
+      ]
+    },
+    "System.Collections/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TDca4OETV0kkXdpkyivMw1/EKKD1Sa/NVAjirw+fA0LZ37jLDYX+KhPPUQxgkvhCe/SVvxETD5Viiudza2k7OQ==",
+      "files": [
+        "lib/DNXCore50/System.Collections.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Collections.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.xml",
+        "ref/dotnet5.1/es/System.Collections.xml",
+        "ref/dotnet5.1/fr/System.Collections.xml",
+        "ref/dotnet5.1/it/System.Collections.xml",
+        "ref/dotnet5.1/ja/System.Collections.xml",
+        "ref/dotnet5.1/ko/System.Collections.xml",
+        "ref/dotnet5.1/ru/System.Collections.xml",
+        "ref/dotnet5.1/System.Collections.dll",
+        "ref/dotnet5.1/System.Collections.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.xml",
+        "ref/dotnet5.4/de/System.Collections.xml",
+        "ref/dotnet5.4/es/System.Collections.xml",
+        "ref/dotnet5.4/fr/System.Collections.xml",
+        "ref/dotnet5.4/it/System.Collections.xml",
+        "ref/dotnet5.4/ja/System.Collections.xml",
+        "ref/dotnet5.4/ko/System.Collections.xml",
+        "ref/dotnet5.4/ru/System.Collections.xml",
+        "ref/dotnet5.4/System.Collections.dll",
+        "ref/dotnet5.4/System.Collections.xml",
+        "ref/dotnet5.4/zh-hans/System.Collections.xml",
+        "ref/dotnet5.4/zh-hant/System.Collections.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Collections.xml",
+        "ref/netcore50/es/System.Collections.xml",
+        "ref/netcore50/fr/System.Collections.xml",
+        "ref/netcore50/it/System.Collections.xml",
+        "ref/netcore50/ja/System.Collections.xml",
+        "ref/netcore50/ko/System.Collections.xml",
+        "ref/netcore50/ru/System.Collections.xml",
+        "ref/netcore50/System.Collections.dll",
+        "ref/netcore50/System.Collections.xml",
+        "ref/netcore50/zh-hans/System.Collections.xml",
+        "ref/netcore50/zh-hant/System.Collections.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Collections.dll",
+        "System.Collections.4.0.11-beta-23516.nupkg",
+        "System.Collections.4.0.11-beta-23516.nupkg.sha512",
+        "System.Collections.nuspec"
+      ]
+    },
+    "System.Collections.NonGeneric/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "rVgwrFBMkmp8LI6GhAYd6Bx+2uLIXjRfNg6Ie+ASfX8ESuh9e2HNxFy2yh1MPIXZq3OAYa+0mmULVwpnEC6UDA==",
+      "files": [
+        "lib/dotnet/System.Collections.NonGeneric.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Collections.NonGeneric.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Collections.NonGeneric.xml",
+        "ref/dotnet/es/System.Collections.NonGeneric.xml",
+        "ref/dotnet/fr/System.Collections.NonGeneric.xml",
+        "ref/dotnet/it/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ja/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ko/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ru/System.Collections.NonGeneric.xml",
+        "ref/dotnet/System.Collections.NonGeneric.dll",
+        "ref/dotnet/System.Collections.NonGeneric.xml",
+        "ref/dotnet/zh-hans/System.Collections.NonGeneric.xml",
+        "ref/dotnet/zh-hant/System.Collections.NonGeneric.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Collections.NonGeneric.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Collections.NonGeneric.4.0.0.nupkg",
+        "System.Collections.NonGeneric.4.0.0.nupkg.sha512",
+        "System.Collections.NonGeneric.nuspec"
+      ]
+    },
+    "System.Collections.Specialized/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "h/PM3mqxwZzhClFW7vxdgIoT/4TBqBqHNzIphgpvqisGhe0jpE5XiBVqhZwx2QMkZO7+LJpUmIv8W3gMkPr1fg==",
+      "files": [
+        "lib/dotnet5.4/System.Collections.Specialized.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Collections.Specialized.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/es/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/fr/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/it/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ja/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ko/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ru/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/System.Collections.Specialized.dll",
+        "ref/dotnet5.1/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.Specialized.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Collections.Specialized.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Collections.Specialized.4.0.1-beta-23516.nupkg",
+        "System.Collections.Specialized.4.0.1-beta-23516.nupkg.sha512",
+        "System.Collections.Specialized.nuspec"
+      ]
+    },
+    "System.ComponentModel/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "PdAC1M7yT9EBtLpXICbOtPDpDjYSlV2RXyQ7AiKyBD7mV1DNTIK7tcM1056GIOlMoJDDdxU5Z3otBeAM8v5PAg==",
+      "files": [
+        "lib/dotnet5.4/System.ComponentModel.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.ComponentModel.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.ComponentModel.xml",
+        "ref/dotnet5.1/es/System.ComponentModel.xml",
+        "ref/dotnet5.1/fr/System.ComponentModel.xml",
+        "ref/dotnet5.1/it/System.ComponentModel.xml",
+        "ref/dotnet5.1/ja/System.ComponentModel.xml",
+        "ref/dotnet5.1/ko/System.ComponentModel.xml",
+        "ref/dotnet5.1/ru/System.ComponentModel.xml",
+        "ref/dotnet5.1/System.ComponentModel.dll",
+        "ref/dotnet5.1/System.ComponentModel.xml",
+        "ref/dotnet5.1/zh-hans/System.ComponentModel.xml",
+        "ref/dotnet5.1/zh-hant/System.ComponentModel.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.ComponentModel.xml",
+        "ref/netcore50/es/System.ComponentModel.xml",
+        "ref/netcore50/fr/System.ComponentModel.xml",
+        "ref/netcore50/it/System.ComponentModel.xml",
+        "ref/netcore50/ja/System.ComponentModel.xml",
+        "ref/netcore50/ko/System.ComponentModel.xml",
+        "ref/netcore50/ru/System.ComponentModel.xml",
+        "ref/netcore50/System.ComponentModel.dll",
+        "ref/netcore50/System.ComponentModel.xml",
+        "ref/netcore50/zh-hans/System.ComponentModel.xml",
+        "ref/netcore50/zh-hant/System.ComponentModel.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.ComponentModel.4.0.1-beta-23516.nupkg",
+        "System.ComponentModel.4.0.1-beta-23516.nupkg.sha512",
+        "System.ComponentModel.nuspec"
+      ]
+    },
+    "System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0YTzoNamTU+6qfZEYtMuGjtkJHB1MEDyFsZ5L/x97GkZO3Bw91uwdPh0DkFwQ6E8KaQTgZAecSXoboUHAcdSLA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Console.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Console.xml",
+        "ref/dotnet5.1/es/System.Console.xml",
+        "ref/dotnet5.1/fr/System.Console.xml",
+        "ref/dotnet5.1/it/System.Console.xml",
+        "ref/dotnet5.1/ja/System.Console.xml",
+        "ref/dotnet5.1/ko/System.Console.xml",
+        "ref/dotnet5.1/ru/System.Console.xml",
+        "ref/dotnet5.1/System.Console.dll",
+        "ref/dotnet5.1/System.Console.xml",
+        "ref/dotnet5.1/zh-hans/System.Console.xml",
+        "ref/dotnet5.1/zh-hant/System.Console.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Console.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Console.4.0.0-beta-23516.nupkg",
+        "System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "System.Console.nuspec"
+      ]
+    },
+    "System.Data.Common/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fMYiiL3/cXaozWH08y/kB25BZf6eBf5EWxBZnjDECNBRkaJgsa4/0S6543NK11UpsWYYHBUFsX4roSq8GddkpA==",
+      "files": [
+        "lib/dotnet5.4/System.Data.Common.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Data.Common.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Data.Common.xml",
+        "ref/dotnet5.1/es/System.Data.Common.xml",
+        "ref/dotnet5.1/fr/System.Data.Common.xml",
+        "ref/dotnet5.1/it/System.Data.Common.xml",
+        "ref/dotnet5.1/ja/System.Data.Common.xml",
+        "ref/dotnet5.1/ko/System.Data.Common.xml",
+        "ref/dotnet5.1/ru/System.Data.Common.xml",
+        "ref/dotnet5.1/System.Data.Common.dll",
+        "ref/dotnet5.1/System.Data.Common.xml",
+        "ref/dotnet5.1/zh-hans/System.Data.Common.xml",
+        "ref/dotnet5.1/zh-hant/System.Data.Common.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Data.Common.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Data.Common.4.0.1-beta-23516.nupkg",
+        "System.Data.Common.4.0.1-beta-23516.nupkg.sha512",
+        "System.Data.Common.nuspec"
+      ]
+    },
+    "System.Diagnostics.Debug/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "wK52HdO2OW7P6hVk/Q9FCnKE9WcTDA3Yio1D8xmeE+6nfOqwWw6d+jVjgn5TSuDghudJK9xq77wseiGa6i7OTQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/System.Diagnostics.Debug.dll",
+        "ref/dotnet5.1/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/System.Diagnostics.Debug.dll",
+        "ref/dotnet5.4/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Diagnostics.Debug.xml",
+        "ref/netcore50/es/System.Diagnostics.Debug.xml",
+        "ref/netcore50/fr/System.Diagnostics.Debug.xml",
+        "ref/netcore50/it/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ja/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ko/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ru/System.Diagnostics.Debug.xml",
+        "ref/netcore50/System.Diagnostics.Debug.dll",
+        "ref/netcore50/System.Diagnostics.Debug.xml",
+        "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Diagnostics.Debug.4.0.11-beta-23516.nupkg",
+        "System.Diagnostics.Debug.4.0.11-beta-23516.nupkg.sha512",
+        "System.Diagnostics.Debug.nuspec"
+      ]
+    },
+    "System.Dynamic.Runtime/4.0.0": {
+      "type": "package",
+      "sha512": "33os71rQUCLjM5pbhQqCopq9/YcqBHPBQ8WylrzNk3oJmfAR0SFwzZIKJRN2JcrkBYdzC/NtWrYVU8oroyZieA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Dynamic.Runtime.xml",
+        "ref/dotnet/es/System.Dynamic.Runtime.xml",
+        "ref/dotnet/fr/System.Dynamic.Runtime.xml",
+        "ref/dotnet/it/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ja/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ko/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ru/System.Dynamic.Runtime.xml",
+        "ref/dotnet/System.Dynamic.Runtime.dll",
+        "ref/dotnet/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Dynamic.Runtime.xml",
+        "ref/netcore50/es/System.Dynamic.Runtime.xml",
+        "ref/netcore50/fr/System.Dynamic.Runtime.xml",
+        "ref/netcore50/it/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ja/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ko/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ru/System.Dynamic.Runtime.xml",
+        "ref/netcore50/System.Dynamic.Runtime.dll",
+        "ref/netcore50/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Dynamic.Runtime.4.0.0.nupkg",
+        "System.Dynamic.Runtime.4.0.0.nupkg.sha512",
+        "System.Dynamic.Runtime.nuspec"
+      ]
+    },
+    "System.Globalization/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "htoF4cS3WhCkU3HloMj3mz+h2FHnF8Hz0po/26otT5e46LlJ8p7LpFpxckxVviyYg9Fab9gr8aIB0ZDN9Cjpig==",
+      "files": [
+        "lib/DNXCore50/System.Globalization.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Globalization.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Globalization.xml",
+        "ref/dotnet5.1/es/System.Globalization.xml",
+        "ref/dotnet5.1/fr/System.Globalization.xml",
+        "ref/dotnet5.1/it/System.Globalization.xml",
+        "ref/dotnet5.1/ja/System.Globalization.xml",
+        "ref/dotnet5.1/ko/System.Globalization.xml",
+        "ref/dotnet5.1/ru/System.Globalization.xml",
+        "ref/dotnet5.1/System.Globalization.dll",
+        "ref/dotnet5.1/System.Globalization.xml",
+        "ref/dotnet5.1/zh-hans/System.Globalization.xml",
+        "ref/dotnet5.1/zh-hant/System.Globalization.xml",
+        "ref/dotnet5.4/de/System.Globalization.xml",
+        "ref/dotnet5.4/es/System.Globalization.xml",
+        "ref/dotnet5.4/fr/System.Globalization.xml",
+        "ref/dotnet5.4/it/System.Globalization.xml",
+        "ref/dotnet5.4/ja/System.Globalization.xml",
+        "ref/dotnet5.4/ko/System.Globalization.xml",
+        "ref/dotnet5.4/ru/System.Globalization.xml",
+        "ref/dotnet5.4/System.Globalization.dll",
+        "ref/dotnet5.4/System.Globalization.xml",
+        "ref/dotnet5.4/zh-hans/System.Globalization.xml",
+        "ref/dotnet5.4/zh-hant/System.Globalization.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Globalization.xml",
+        "ref/netcore50/es/System.Globalization.xml",
+        "ref/netcore50/fr/System.Globalization.xml",
+        "ref/netcore50/it/System.Globalization.xml",
+        "ref/netcore50/ja/System.Globalization.xml",
+        "ref/netcore50/ko/System.Globalization.xml",
+        "ref/netcore50/ru/System.Globalization.xml",
+        "ref/netcore50/System.Globalization.dll",
+        "ref/netcore50/System.Globalization.xml",
+        "ref/netcore50/zh-hans/System.Globalization.xml",
+        "ref/netcore50/zh-hant/System.Globalization.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Globalization.dll",
+        "System.Globalization.4.0.11-beta-23516.nupkg",
+        "System.Globalization.4.0.11-beta-23516.nupkg.sha512",
+        "System.Globalization.nuspec"
+      ]
+    },
+    "System.Globalization.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "rqbUXiwpBCvJ18ySCsjh20zleazO+6fr3s5GihC2sVwhyS0MUl6+oc5Rzk0z6CKkS4kmxbZQSeZLsK7cFSO0ng==",
+      "files": [
+        "lib/dotnet/System.Globalization.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Globalization.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Globalization.Extensions.xml",
+        "ref/dotnet/es/System.Globalization.Extensions.xml",
+        "ref/dotnet/fr/System.Globalization.Extensions.xml",
+        "ref/dotnet/it/System.Globalization.Extensions.xml",
+        "ref/dotnet/ja/System.Globalization.Extensions.xml",
+        "ref/dotnet/ko/System.Globalization.Extensions.xml",
+        "ref/dotnet/ru/System.Globalization.Extensions.xml",
+        "ref/dotnet/System.Globalization.Extensions.dll",
+        "ref/dotnet/System.Globalization.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Globalization.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Globalization.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Globalization.Extensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Globalization.Extensions.4.0.0.nupkg",
+        "System.Globalization.Extensions.4.0.0.nupkg.sha512",
+        "System.Globalization.Extensions.nuspec"
+      ]
+    },
+    "System.IO/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dR1DaWrF0zsV2z/GVs8xVvMds6xu0ykuwv+VPou8wbpJ1XxGBK9g6v5F84DWL8Q1qi+6Kyb56wbZYdYQO8OMew==",
+      "files": [
+        "lib/DNXCore50/System.IO.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.IO.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.IO.xml",
+        "ref/dotnet5.1/es/System.IO.xml",
+        "ref/dotnet5.1/fr/System.IO.xml",
+        "ref/dotnet5.1/it/System.IO.xml",
+        "ref/dotnet5.1/ja/System.IO.xml",
+        "ref/dotnet5.1/ko/System.IO.xml",
+        "ref/dotnet5.1/ru/System.IO.xml",
+        "ref/dotnet5.1/System.IO.dll",
+        "ref/dotnet5.1/System.IO.xml",
+        "ref/dotnet5.1/zh-hans/System.IO.xml",
+        "ref/dotnet5.1/zh-hant/System.IO.xml",
+        "ref/dotnet5.4/de/System.IO.xml",
+        "ref/dotnet5.4/es/System.IO.xml",
+        "ref/dotnet5.4/fr/System.IO.xml",
+        "ref/dotnet5.4/it/System.IO.xml",
+        "ref/dotnet5.4/ja/System.IO.xml",
+        "ref/dotnet5.4/ko/System.IO.xml",
+        "ref/dotnet5.4/ru/System.IO.xml",
+        "ref/dotnet5.4/System.IO.dll",
+        "ref/dotnet5.4/System.IO.xml",
+        "ref/dotnet5.4/zh-hans/System.IO.xml",
+        "ref/dotnet5.4/zh-hant/System.IO.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.IO.xml",
+        "ref/netcore50/es/System.IO.xml",
+        "ref/netcore50/fr/System.IO.xml",
+        "ref/netcore50/it/System.IO.xml",
+        "ref/netcore50/ja/System.IO.xml",
+        "ref/netcore50/ko/System.IO.xml",
+        "ref/netcore50/ru/System.IO.xml",
+        "ref/netcore50/System.IO.dll",
+        "ref/netcore50/System.IO.xml",
+        "ref/netcore50/zh-hans/System.IO.xml",
+        "ref/netcore50/zh-hant/System.IO.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.IO.dll",
+        "System.IO.4.0.11-beta-23516.nupkg",
+        "System.IO.4.0.11-beta-23516.nupkg.sha512",
+        "System.IO.nuspec"
+      ]
+    },
+    "System.IO.FileSystem/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "KOYNQ6FeLQh0HdHVlp6IRjRGPCjyFvZRKfhYSDFi7DR0EHY3cC2rvfVj5HWJEW5KlSaa01Ct25m06yVnqSxwOQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.4/de/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/es/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/fr/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/it/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ja/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ko/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ru/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/System.IO.FileSystem.dll",
+        "ref/dotnet5.4/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/zh-hans/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/zh-hant/System.IO.FileSystem.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.IO.FileSystem.4.0.1-beta-23516.nupkg",
+        "System.IO.FileSystem.4.0.1-beta-23516.nupkg.sha512",
+        "System.IO.FileSystem.nuspec"
+      ]
+    },
+    "System.IO.FileSystem.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "7pJUvYi/Yq3A5nagqCCiOw3+aJp3xXc/Cjr8dnJDnER3/6kX3LEencfqmXUcPl9+7OvRNyPMNhqsLAcMK6K/KA==",
+      "files": [
+        "lib/dotnet/System.IO.FileSystem.Primitives.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.Primitives.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/es/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/fr/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/it/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ja/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ko/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ru/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/System.IO.FileSystem.Primitives.dll",
+        "ref/dotnet/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hans/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hant/System.IO.FileSystem.Primitives.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.Primitives.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg.sha512",
+        "System.IO.FileSystem.Primitives.nuspec"
+      ]
+    },
+    "System.Linq/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "uNxm2RB+kMeiKnY26iPvOtJLzTzNaAF4A2qqyzev6j8x8w2Dr+gg7LF7BHCwC55N7OirhHrAWUb3C0n4oi9qYw==",
+      "files": [
+        "lib/dotnet5.4/System.Linq.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Linq.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Linq.xml",
+        "ref/dotnet5.1/es/System.Linq.xml",
+        "ref/dotnet5.1/fr/System.Linq.xml",
+        "ref/dotnet5.1/it/System.Linq.xml",
+        "ref/dotnet5.1/ja/System.Linq.xml",
+        "ref/dotnet5.1/ko/System.Linq.xml",
+        "ref/dotnet5.1/ru/System.Linq.xml",
+        "ref/dotnet5.1/System.Linq.dll",
+        "ref/dotnet5.1/System.Linq.xml",
+        "ref/dotnet5.1/zh-hans/System.Linq.xml",
+        "ref/dotnet5.1/zh-hant/System.Linq.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.xml",
+        "ref/netcore50/es/System.Linq.xml",
+        "ref/netcore50/fr/System.Linq.xml",
+        "ref/netcore50/it/System.Linq.xml",
+        "ref/netcore50/ja/System.Linq.xml",
+        "ref/netcore50/ko/System.Linq.xml",
+        "ref/netcore50/ru/System.Linq.xml",
+        "ref/netcore50/System.Linq.dll",
+        "ref/netcore50/System.Linq.xml",
+        "ref/netcore50/zh-hans/System.Linq.xml",
+        "ref/netcore50/zh-hant/System.Linq.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.Linq.4.0.1-beta-23516.nupkg",
+        "System.Linq.4.0.1-beta-23516.nupkg.sha512",
+        "System.Linq.nuspec"
+      ]
+    },
+    "System.Linq.Expressions/4.0.0": {
+      "type": "package",
+      "sha512": "wlfVllrKi+evu4Hi8yoJP1dSOVXbvsy7Hs1+oz4Cykfdf6MQTPlD3LI4WKWhprn8FpU5MS3spPSbcMX5sAoJSw==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Linq.Expressions.xml",
+        "ref/dotnet/es/System.Linq.Expressions.xml",
+        "ref/dotnet/fr/System.Linq.Expressions.xml",
+        "ref/dotnet/it/System.Linq.Expressions.xml",
+        "ref/dotnet/ja/System.Linq.Expressions.xml",
+        "ref/dotnet/ko/System.Linq.Expressions.xml",
+        "ref/dotnet/ru/System.Linq.Expressions.xml",
+        "ref/dotnet/System.Linq.Expressions.dll",
+        "ref/dotnet/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hans/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hant/System.Linq.Expressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.Expressions.xml",
+        "ref/netcore50/es/System.Linq.Expressions.xml",
+        "ref/netcore50/fr/System.Linq.Expressions.xml",
+        "ref/netcore50/it/System.Linq.Expressions.xml",
+        "ref/netcore50/ja/System.Linq.Expressions.xml",
+        "ref/netcore50/ko/System.Linq.Expressions.xml",
+        "ref/netcore50/ru/System.Linq.Expressions.xml",
+        "ref/netcore50/System.Linq.Expressions.dll",
+        "ref/netcore50/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hans/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hant/System.Linq.Expressions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Linq.Expressions.4.0.0.nupkg",
+        "System.Linq.Expressions.4.0.0.nupkg.sha512",
+        "System.Linq.Expressions.nuspec"
+      ]
+    },
+    "System.ObjectModel/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Djn1wb0vP662zxbe+c3mOhvC4vkQGicsFs1Wi0/GJJpp3Eqp+oxbJ+p2Sx3O0efYueggAI5SW+BqEoczjfr1cA==",
+      "files": [
+        "lib/dotnet/System.ObjectModel.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.ObjectModel.xml",
+        "ref/dotnet/es/System.ObjectModel.xml",
+        "ref/dotnet/fr/System.ObjectModel.xml",
+        "ref/dotnet/it/System.ObjectModel.xml",
+        "ref/dotnet/ja/System.ObjectModel.xml",
+        "ref/dotnet/ko/System.ObjectModel.xml",
+        "ref/dotnet/ru/System.ObjectModel.xml",
+        "ref/dotnet/System.ObjectModel.dll",
+        "ref/dotnet/System.ObjectModel.xml",
+        "ref/dotnet/zh-hans/System.ObjectModel.xml",
+        "ref/dotnet/zh-hant/System.ObjectModel.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.ObjectModel.4.0.10.nupkg",
+        "System.ObjectModel.4.0.10.nupkg.sha512",
+        "System.ObjectModel.nuspec"
+      ]
+    },
+    "System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "sha512": "MG79ArOc8KhfAkjrimI5GFH4tML7XFo+Z1sEQGLPxrBlwfbITwrrNfYb3YoH6CpAlJHc4pcs/gZrUas/pEkTdg==",
+      "files": [
+        "ref/dnxcore50/_._",
+        "ref/netcore50/_._",
+        "runtime.json",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "System.Private.Uri.nuspec"
+      ]
+    },
+    "System.Reflection/4.1.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "wfrnDfk8p2cqJQY3TTHsJRmf3cE3wa6BacncCn4dO58lVwQNNe9ASdLrLJZlMviAjx8+1fUpj6NX7leIOyaBJA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/net46/System.Reflection.dll",
+        "lib/netcore50/System.Reflection.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Reflection.xml",
+        "ref/dotnet5.1/es/System.Reflection.xml",
+        "ref/dotnet5.1/fr/System.Reflection.xml",
+        "ref/dotnet5.1/it/System.Reflection.xml",
+        "ref/dotnet5.1/ja/System.Reflection.xml",
+        "ref/dotnet5.1/ko/System.Reflection.xml",
+        "ref/dotnet5.1/ru/System.Reflection.xml",
+        "ref/dotnet5.1/System.Reflection.dll",
+        "ref/dotnet5.1/System.Reflection.xml",
+        "ref/dotnet5.1/zh-hans/System.Reflection.xml",
+        "ref/dotnet5.1/zh-hant/System.Reflection.xml",
+        "ref/dotnet5.4/de/System.Reflection.xml",
+        "ref/dotnet5.4/es/System.Reflection.xml",
+        "ref/dotnet5.4/fr/System.Reflection.xml",
+        "ref/dotnet5.4/it/System.Reflection.xml",
+        "ref/dotnet5.4/ja/System.Reflection.xml",
+        "ref/dotnet5.4/ko/System.Reflection.xml",
+        "ref/dotnet5.4/ru/System.Reflection.xml",
+        "ref/dotnet5.4/System.Reflection.dll",
+        "ref/dotnet5.4/System.Reflection.xml",
+        "ref/dotnet5.4/zh-hans/System.Reflection.xml",
+        "ref/dotnet5.4/zh-hant/System.Reflection.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/net46/System.Reflection.dll",
+        "ref/netcore50/de/System.Reflection.xml",
+        "ref/netcore50/es/System.Reflection.xml",
+        "ref/netcore50/fr/System.Reflection.xml",
+        "ref/netcore50/it/System.Reflection.xml",
+        "ref/netcore50/ja/System.Reflection.xml",
+        "ref/netcore50/ko/System.Reflection.xml",
+        "ref/netcore50/ru/System.Reflection.xml",
+        "ref/netcore50/System.Reflection.dll",
+        "ref/netcore50/System.Reflection.xml",
+        "ref/netcore50/zh-hans/System.Reflection.xml",
+        "ref/netcore50/zh-hant/System.Reflection.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.dll",
+        "System.Reflection.4.1.0-beta-23516.nupkg",
+        "System.Reflection.4.1.0-beta-23516.nupkg.sha512",
+        "System.Reflection.nuspec"
+      ]
+    },
+    "System.Reflection.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dbYaZWCyFAu1TGYUqR2n+Q+1casSHPR2vVW0WVNkXpZbrd2BXcZ7cpvpu9C98CTHtNmyfMWCLpCclDqly23t6A==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Extensions.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Extensions.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Extensions.xml",
+        "ref/dotnet/es/System.Reflection.Extensions.xml",
+        "ref/dotnet/fr/System.Reflection.Extensions.xml",
+        "ref/dotnet/it/System.Reflection.Extensions.xml",
+        "ref/dotnet/ja/System.Reflection.Extensions.xml",
+        "ref/dotnet/ko/System.Reflection.Extensions.xml",
+        "ref/dotnet/ru/System.Reflection.Extensions.xml",
+        "ref/dotnet/System.Reflection.Extensions.dll",
+        "ref/dotnet/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Extensions.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Extensions.dll",
+        "ref/netcore50/System.Reflection.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll",
+        "System.Reflection.Extensions.4.0.0.nupkg",
+        "System.Reflection.Extensions.4.0.0.nupkg.sha512",
+        "System.Reflection.Extensions.nuspec"
+      ]
+    },
+    "System.Reflection.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "n9S0XpKv2ruc17FSnaiX6nV47VfHTZ1wLjKZlAirUZCvDQCH71mVp+Ohabn0xXLh5pK2PKp45HCxkqu5Fxn/lA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Primitives.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Primitives.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Primitives.xml",
+        "ref/dotnet/es/System.Reflection.Primitives.xml",
+        "ref/dotnet/fr/System.Reflection.Primitives.xml",
+        "ref/dotnet/it/System.Reflection.Primitives.xml",
+        "ref/dotnet/ja/System.Reflection.Primitives.xml",
+        "ref/dotnet/ko/System.Reflection.Primitives.xml",
+        "ref/dotnet/ru/System.Reflection.Primitives.xml",
+        "ref/dotnet/System.Reflection.Primitives.dll",
+        "ref/dotnet/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Primitives.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Primitives.dll",
+        "ref/netcore50/System.Reflection.Primitives.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll",
+        "System.Reflection.Primitives.4.0.0.nupkg",
+        "System.Reflection.Primitives.4.0.0.nupkg.sha512",
+        "System.Reflection.Primitives.nuspec"
+      ]
+    },
+    "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "vA+eepDQ8ZFRodTHc+w8nBTkUqD+rEgirRR38tW6Z/uCDTzBPHGg6TqhqBhmY4wdWsT8/7fjwFPb7/dxldQW7g==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.TypeExtensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Reflection.TypeExtensions.dll",
+        "lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/es/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/fr/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/it/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ja/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ko/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ru/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/System.Reflection.TypeExtensions.dll",
+        "ref/dotnet5.1/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/zh-hans/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/zh-hant/System.Reflection.TypeExtensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Reflection.TypeExtensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "System.Reflection.TypeExtensions.4.1.0-beta-23516.nupkg",
+        "System.Reflection.TypeExtensions.4.1.0-beta-23516.nupkg.sha512",
+        "System.Reflection.TypeExtensions.nuspec"
+      ]
+    },
+    "System.Resources.ResourceManager/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "d1PiB1k57GP5EJZJKnJ+LgrOQCgHPnn5oySQAy4pL2MpEDDpTyTPKv+q9aRWUA25ICXaHkWJzeTkj898ePteWQ==",
+      "files": [
+        "lib/DNXCore50/System.Resources.ResourceManager.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Resources.ResourceManager.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/es/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/fr/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/it/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ja/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ko/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ru/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/System.Resources.ResourceManager.dll",
+        "ref/dotnet5.1/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Resources.ResourceManager.xml",
+        "ref/netcore50/es/System.Resources.ResourceManager.xml",
+        "ref/netcore50/fr/System.Resources.ResourceManager.xml",
+        "ref/netcore50/it/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ja/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ko/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ru/System.Resources.ResourceManager.xml",
+        "ref/netcore50/System.Resources.ResourceManager.dll",
+        "ref/netcore50/System.Resources.ResourceManager.xml",
+        "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll",
+        "System.Resources.ResourceManager.4.0.1-beta-23516.nupkg",
+        "System.Resources.ResourceManager.4.0.1-beta-23516.nupkg.sha512",
+        "System.Resources.ResourceManager.nuspec"
+      ]
+    },
+    "System.Runtime/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "R174ctQjJnCIVxA2Yzp1v68wfLfPSROZWrbaSBcnEzHAQbOjprBQi37aWdr5y05Pq2J/O7h6SjTsYhVOLdiRYQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.xml",
+        "ref/dotnet5.1/es/System.Runtime.xml",
+        "ref/dotnet5.1/fr/System.Runtime.xml",
+        "ref/dotnet5.1/it/System.Runtime.xml",
+        "ref/dotnet5.1/ja/System.Runtime.xml",
+        "ref/dotnet5.1/ko/System.Runtime.xml",
+        "ref/dotnet5.1/ru/System.Runtime.xml",
+        "ref/dotnet5.1/System.Runtime.dll",
+        "ref/dotnet5.1/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.3/de/System.Runtime.xml",
+        "ref/dotnet5.3/es/System.Runtime.xml",
+        "ref/dotnet5.3/fr/System.Runtime.xml",
+        "ref/dotnet5.3/it/System.Runtime.xml",
+        "ref/dotnet5.3/ja/System.Runtime.xml",
+        "ref/dotnet5.3/ko/System.Runtime.xml",
+        "ref/dotnet5.3/ru/System.Runtime.xml",
+        "ref/dotnet5.3/System.Runtime.dll",
+        "ref/dotnet5.3/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.4/de/System.Runtime.xml",
+        "ref/dotnet5.4/es/System.Runtime.xml",
+        "ref/dotnet5.4/fr/System.Runtime.xml",
+        "ref/dotnet5.4/it/System.Runtime.xml",
+        "ref/dotnet5.4/ja/System.Runtime.xml",
+        "ref/dotnet5.4/ko/System.Runtime.xml",
+        "ref/dotnet5.4/ru/System.Runtime.xml",
+        "ref/dotnet5.4/System.Runtime.dll",
+        "ref/dotnet5.4/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.xml",
+        "ref/netcore50/es/System.Runtime.xml",
+        "ref/netcore50/fr/System.Runtime.xml",
+        "ref/netcore50/it/System.Runtime.xml",
+        "ref/netcore50/ja/System.Runtime.xml",
+        "ref/netcore50/ko/System.Runtime.xml",
+        "ref/netcore50/ru/System.Runtime.xml",
+        "ref/netcore50/System.Runtime.dll",
+        "ref/netcore50/System.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.dll",
+        "System.Runtime.4.0.21-beta-23516.nupkg",
+        "System.Runtime.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.nuspec"
+      ]
+    },
+    "System.Runtime.Extensions/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HX4wNPrcCV9D+jpbsJCRPuVJbcDM+JobSotQWKq40lCq0WJbJi+0lNQ/T1zHEdWcf4W2PmtMkug1rW7yKW9PiQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/es/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/it/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/System.Runtime.Extensions.dll",
+        "ref/dotnet5.1/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/de/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/es/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/it/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/System.Runtime.Extensions.dll",
+        "ref/dotnet5.4/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.Extensions.xml",
+        "ref/netcore50/es/System.Runtime.Extensions.xml",
+        "ref/netcore50/fr/System.Runtime.Extensions.xml",
+        "ref/netcore50/it/System.Runtime.Extensions.xml",
+        "ref/netcore50/ja/System.Runtime.Extensions.xml",
+        "ref/netcore50/ko/System.Runtime.Extensions.xml",
+        "ref/netcore50/ru/System.Runtime.Extensions.xml",
+        "ref/netcore50/System.Runtime.Extensions.dll",
+        "ref/netcore50/System.Runtime.Extensions.xml",
+        "ref/netcore50/zh-hans/System.Runtime.Extensions.xml",
+        "ref/netcore50/zh-hant/System.Runtime.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Runtime.Extensions.4.0.11-beta-23516.nupkg",
+        "System.Runtime.Extensions.4.0.11-beta-23516.nupkg.sha512",
+        "System.Runtime.Extensions.nuspec"
+      ]
+    },
+    "System.Runtime.Handles/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "QD37drGPHLLPSf8iZx4wyUx7niFU3D8U79GQ56CkRW4qZJ1qSAmZU9AqLuBdLoQWLRmniy9panML6bly4ob6qw==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Handles.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Runtime.Handles.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.4/de/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/es/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/fr/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/it/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ja/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ko/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ru/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/System.Runtime.Handles.dll",
+        "ref/dotnet5.4/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.Handles.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll",
+        "System.Runtime.Handles.4.0.1-beta-23516.nupkg",
+        "System.Runtime.Handles.4.0.1-beta-23516.nupkg.sha512",
+        "System.Runtime.Handles.nuspec"
+      ]
+    },
+    "System.Runtime.InteropServices/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "XRWX4yFPKQ3t3hbPReLB9d2ViTuGqMLYHGcuWteIYgoIaKtHp7Uae2xHjiUG/QZbVN6vUp+KnL04aIi5dOj8lQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.InteropServices.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.InteropServices.dll",
+        "lib/win8/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.2/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.2/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.3/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.4/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.InteropServices.xml",
+        "ref/netcore50/es/System.Runtime.InteropServices.xml",
+        "ref/netcore50/fr/System.Runtime.InteropServices.xml",
+        "ref/netcore50/it/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ja/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ko/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ru/System.Runtime.InteropServices.xml",
+        "ref/netcore50/System.Runtime.InteropServices.dll",
+        "ref/netcore50/System.Runtime.InteropServices.xml",
+        "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/win8/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll",
+        "System.Runtime.InteropServices.4.0.21-beta-23516.nupkg",
+        "System.Runtime.InteropServices.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.InteropServices.nuspec"
+      ]
+    },
+    "System.Text.Encoding/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "gk4da/Y3VReZpIeQ3UDTCknbkO/FuYKOJtP+5+Vtc07mTcPHvhgbZLXEGTTneP6yWPDWTTh20nZZMF/19YsRtA==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Text.Encoding.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Text.Encoding.xml",
+        "ref/dotnet5.1/es/System.Text.Encoding.xml",
+        "ref/dotnet5.1/fr/System.Text.Encoding.xml",
+        "ref/dotnet5.1/it/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ja/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ko/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ru/System.Text.Encoding.xml",
+        "ref/dotnet5.1/System.Text.Encoding.dll",
+        "ref/dotnet5.1/System.Text.Encoding.xml",
+        "ref/dotnet5.1/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet5.1/zh-hant/System.Text.Encoding.xml",
+        "ref/dotnet5.4/de/System.Text.Encoding.xml",
+        "ref/dotnet5.4/es/System.Text.Encoding.xml",
+        "ref/dotnet5.4/fr/System.Text.Encoding.xml",
+        "ref/dotnet5.4/it/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ja/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ko/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ru/System.Text.Encoding.xml",
+        "ref/dotnet5.4/System.Text.Encoding.dll",
+        "ref/dotnet5.4/System.Text.Encoding.xml",
+        "ref/dotnet5.4/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet5.4/zh-hant/System.Text.Encoding.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Text.Encoding.xml",
+        "ref/netcore50/es/System.Text.Encoding.xml",
+        "ref/netcore50/fr/System.Text.Encoding.xml",
+        "ref/netcore50/it/System.Text.Encoding.xml",
+        "ref/netcore50/ja/System.Text.Encoding.xml",
+        "ref/netcore50/ko/System.Text.Encoding.xml",
+        "ref/netcore50/ru/System.Text.Encoding.xml",
+        "ref/netcore50/System.Text.Encoding.dll",
+        "ref/netcore50/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hans/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hant/System.Text.Encoding.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll",
+        "System.Text.Encoding.4.0.11-beta-23516.nupkg",
+        "System.Text.Encoding.4.0.11-beta-23516.nupkg.sha512",
+        "System.Text.Encoding.nuspec"
+      ]
+    },
+    "System.Text.Encoding.Extensions/4.0.10": {
+      "type": "package",
+      "sha512": "TZvlwXMxKo3bSRIcsWZLCIzIhLbvlz+mGeKYRZv/zUiSoQzGOwkYeBu6hOw2XPQgKqT0F4Rv8zqKdvmp2fWKYg==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/es/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/fr/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/it/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ja/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ko/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ru/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/System.Text.Encoding.Extensions.dll",
+        "ref/dotnet/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Text.Encoding.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg.sha512",
+        "System.Text.Encoding.Extensions.nuspec"
+      ]
+    },
+    "System.Text.RegularExpressions/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0vDuHXJePpfMCecWBNOabOKCvzfTbFMNcGgklt3l5+RqHV5SzmF7RUVpuet8V0rJX30ROlL66xdehw2Rdsn2DA==",
+      "files": [
+        "lib/dotnet/System.Text.RegularExpressions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.RegularExpressions.xml",
+        "ref/dotnet/es/System.Text.RegularExpressions.xml",
+        "ref/dotnet/fr/System.Text.RegularExpressions.xml",
+        "ref/dotnet/it/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ja/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ko/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ru/System.Text.RegularExpressions.xml",
+        "ref/dotnet/System.Text.RegularExpressions.dll",
+        "ref/dotnet/System.Text.RegularExpressions.xml",
+        "ref/dotnet/zh-hans/System.Text.RegularExpressions.xml",
+        "ref/dotnet/zh-hant/System.Text.RegularExpressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Text.RegularExpressions.4.0.10.nupkg",
+        "System.Text.RegularExpressions.4.0.10.nupkg.sha512",
+        "System.Text.RegularExpressions.nuspec"
+      ]
+    },
+    "System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "AiuvOzOo6CZpIIw3yGJZcs3IhiCZcy0P/ThubazmWExERHJZoOnD/jB+Bn2gxTAD0rc/ytrRdBur9PuX6DvvvA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.xml",
+        "ref/dotnet5.1/es/System.Threading.xml",
+        "ref/dotnet5.1/fr/System.Threading.xml",
+        "ref/dotnet5.1/it/System.Threading.xml",
+        "ref/dotnet5.1/ja/System.Threading.xml",
+        "ref/dotnet5.1/ko/System.Threading.xml",
+        "ref/dotnet5.1/ru/System.Threading.xml",
+        "ref/dotnet5.1/System.Threading.dll",
+        "ref/dotnet5.1/System.Threading.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.xml",
+        "ref/dotnet5.4/de/System.Threading.xml",
+        "ref/dotnet5.4/es/System.Threading.xml",
+        "ref/dotnet5.4/fr/System.Threading.xml",
+        "ref/dotnet5.4/it/System.Threading.xml",
+        "ref/dotnet5.4/ja/System.Threading.xml",
+        "ref/dotnet5.4/ko/System.Threading.xml",
+        "ref/dotnet5.4/ru/System.Threading.xml",
+        "ref/dotnet5.4/System.Threading.dll",
+        "ref/dotnet5.4/System.Threading.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.xml",
+        "ref/netcore50/es/System.Threading.xml",
+        "ref/netcore50/fr/System.Threading.xml",
+        "ref/netcore50/it/System.Threading.xml",
+        "ref/netcore50/ja/System.Threading.xml",
+        "ref/netcore50/ko/System.Threading.xml",
+        "ref/netcore50/ru/System.Threading.xml",
+        "ref/netcore50/System.Threading.dll",
+        "ref/netcore50/System.Threading.xml",
+        "ref/netcore50/zh-hans/System.Threading.xml",
+        "ref/netcore50/zh-hant/System.Threading.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Threading.4.0.11-beta-23516.nupkg",
+        "System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.nuspec"
+      ]
+    },
+    "System.Threading.Overlapped/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "X5LuQFhM5FTqaez3eXKJ9CbfSGZ7wj6j4hSVtxct3zmwQXLqG95qoWdvILcgN7xtrDOBIFtpiyDg0vmoI0jE2A==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Overlapped.dll",
+        "lib/net46/System.Threading.Overlapped.dll",
+        "lib/netcore50/System.Threading.Overlapped.dll",
+        "ref/dotnet/de/System.Threading.Overlapped.xml",
+        "ref/dotnet/es/System.Threading.Overlapped.xml",
+        "ref/dotnet/fr/System.Threading.Overlapped.xml",
+        "ref/dotnet/it/System.Threading.Overlapped.xml",
+        "ref/dotnet/ja/System.Threading.Overlapped.xml",
+        "ref/dotnet/ko/System.Threading.Overlapped.xml",
+        "ref/dotnet/ru/System.Threading.Overlapped.xml",
+        "ref/dotnet/System.Threading.Overlapped.dll",
+        "ref/dotnet/System.Threading.Overlapped.xml",
+        "ref/dotnet/zh-hans/System.Threading.Overlapped.xml",
+        "ref/dotnet/zh-hant/System.Threading.Overlapped.xml",
+        "ref/net46/System.Threading.Overlapped.dll",
+        "System.Threading.Overlapped.4.0.0.nupkg",
+        "System.Threading.Overlapped.4.0.0.nupkg.sha512",
+        "System.Threading.Overlapped.nuspec"
+      ]
+    },
+    "System.Threading.Tasks/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "xjN0l+GsHEdV3G2lKF7DnH7kEM2OXoWq56jcvByNaiirrs1om5RyI6gwX7F4rTbkf8eZk1pjg01l4CI3nLyTKg==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Tasks.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Threading.Tasks.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/es/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/fr/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/it/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ja/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ko/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ru/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/System.Threading.Tasks.dll",
+        "ref/dotnet5.1/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/de/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/es/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/fr/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/it/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ja/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ko/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ru/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/System.Threading.Tasks.dll",
+        "ref/dotnet5.4/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.Tasks.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.Tasks.xml",
+        "ref/netcore50/es/System.Threading.Tasks.xml",
+        "ref/netcore50/fr/System.Threading.Tasks.xml",
+        "ref/netcore50/it/System.Threading.Tasks.xml",
+        "ref/netcore50/ja/System.Threading.Tasks.xml",
+        "ref/netcore50/ko/System.Threading.Tasks.xml",
+        "ref/netcore50/ru/System.Threading.Tasks.xml",
+        "ref/netcore50/System.Threading.Tasks.dll",
+        "ref/netcore50/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll",
+        "System.Threading.Tasks.4.0.11-beta-23516.nupkg",
+        "System.Threading.Tasks.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.Tasks.nuspec"
+      ]
+    },
+    "System.Threading.Thread/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "2a5k/EmBXNiIoQZ8hk32KjoCVs1E5OdQtqJCHcW4qThmk+m/siQgB7zYamlRBeQ5zJs7c1l4oN/y5+YRq8oQ2Q==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Thread.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Threading.Thread.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.Thread.xml",
+        "ref/dotnet5.1/es/System.Threading.Thread.xml",
+        "ref/dotnet5.1/fr/System.Threading.Thread.xml",
+        "ref/dotnet5.1/it/System.Threading.Thread.xml",
+        "ref/dotnet5.1/ja/System.Threading.Thread.xml",
+        "ref/dotnet5.1/ko/System.Threading.Thread.xml",
+        "ref/dotnet5.1/ru/System.Threading.Thread.xml",
+        "ref/dotnet5.1/System.Threading.Thread.dll",
+        "ref/dotnet5.1/System.Threading.Thread.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.Thread.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.Thread.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Threading.Thread.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Threading.Thread.4.0.0-beta-23516.nupkg",
+        "System.Threading.Thread.4.0.0-beta-23516.nupkg.sha512",
+        "System.Threading.Thread.nuspec"
+      ]
+    },
+    "System.Xml.ReaderWriter/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "VdmWWMH7otrYV7D+cviUo7XjX0jzDnD/lTGSZTlZqfIQ5PhXk85j+6P0TK9od3PnOd5ZIM+pOk01G/J+3nh9/w==",
+      "files": [
+        "lib/dotnet/System.Xml.ReaderWriter.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/es/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/fr/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/it/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ja/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ko/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ru/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/System.Xml.ReaderWriter.dll",
+        "ref/dotnet/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/zh-hans/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/zh-hant/System.Xml.ReaderWriter.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Xml.ReaderWriter.4.0.10.nupkg",
+        "System.Xml.ReaderWriter.4.0.10.nupkg.sha512",
+        "System.Xml.ReaderWriter.nuspec"
+      ]
+    },
+    "System.Xml.XmlDocument/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Al+MOyRvCL9SlJYzInF9cH9Sxlf4eBLtD1AadyZVaRqhmcTYDst/AEf6GerqQ4hHfrGmeCflfxWPc2BYBJ2nug==",
+      "files": [
+        "lib/dotnet5.4/System.Xml.XmlDocument.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Xml.XmlDocument.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/es/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/fr/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/it/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ja/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ko/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ru/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/System.Xml.XmlDocument.dll",
+        "ref/dotnet5.1/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/zh-hans/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/zh-hant/System.Xml.XmlDocument.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Xml.XmlDocument.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Xml.XmlDocument.4.0.1-beta-23516.nupkg",
+        "System.Xml.XmlDocument.4.0.1-beta-23516.nupkg.sha512",
+        "System.Xml.XmlDocument.nuspec"
+      ]
+    }
+  },
+  "projectFileDependencyGroups": {
+    "": [
+      "System.Reflection >= 4.1.0-beta-23516",
+      "System.Threading.Thread >= 4.0.0-beta-23516",
+      "TestCommon >= 1.0.0-*"
+    ],
+    "DNXCore,Version=v5.0": [
+      "Microsoft.CSharp >= 4.0.1-beta-23516",
+      "System.Collections >= 4.0.11-beta-23516",
+      "System.Linq >= 4.0.1-beta-23516",
+      "System.Runtime >= 4.0.21-beta-23516",
+      "System.Threading >= 4.0.11-beta-23516",
+      "Microsoft.Data.Sqlite >= 1.0.0-rc1-final",
+      "MapGuideDotNetCoreApi >= 3.1.0"
+    ]
+  }
+}
\ No newline at end of file


Property changes on: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner
___________________________________________________________________
Added: svn:ignore
   + Logs
metadata.txt
TestRunner.xproj.user
UnitTests.log


Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Program.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Program.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Program.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,150 @@
+using OSGeo.MapGuide;
+using OSGeo.MapGuide.Test;
+using OSGeo.MapGuide.Test.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TestRunner
+{
+    //TODO: This test runner does not support generation/update mode yet. Please use the existing PHP test runner for doing this.
+
+    public class Program
+    {
+        static MgUserInformation userInfo;
+        static MgSiteConnection siteConn;
+
+        class PlatformFactory : IPlatformFactory
+        {
+            private MgSiteConnection _siteConn;
+
+            public PlatformFactory(MgSiteConnection siteConn)
+            {
+                _siteConn = siteConn;
+            }
+
+            public MgService CreateService(int serviceType)
+            {
+                return _siteConn.CreateService(serviceType);
+            }
+
+            public MgMapBase CreateMap(MgResourceIdentifier mapDefinition)
+            {
+                var map = new MgMap(_siteConn);
+                map.Create(mapDefinition, mapDefinition.Name);
+                return map;
+            }
+
+            public MgMapBase CreateMap(string coordSys, MgEnvelope env, string name)
+            {
+                var map = new MgMap(_siteConn);
+                map.Create(coordSys, env, name);
+                return map;
+            }
+
+            public MgLayerBase CreateLayer(MgResourceIdentifier resId)
+            {
+                MgResourceService resSvc = (MgResourceService)_siteConn.CreateService(MgServiceType.ResourceService);
+                return new MgLayer(resId, resSvc);
+            }
+        }
+
+        //Usage: MgTestRunner.exe <webconfig.ini path> <MENTOR_DICTIONARY_PATH> [test log path]
+#if DNXCORE50
+        static int Main(string[] args)
+#else
+        static void Main(string[] args)
+#endif
+        {
+            if (args.Length >= 2 && args.Length <= 3)
+            {
+                string webconfig = args[0];
+                string logFile = "UnitTests.log";
+                if (args.Length == 3)
+                    logFile = args[2];
+
+                int failures = 0;
+                using (var logger = new TestLoggerFile(logFile, false))
+                {
+#if DNXCORE50
+                    try
+                    {
+#endif
+
+                        logger.Write("Run started: {0}\n\n", DateTime.Now.ToString());
+
+#if DNXCORE50
+                        Environment.SetEnvironmentVariable("MENTOR_DICTIONARY_PATH", args[1]);
+#else
+                        Environment.SetEnvironmentVariable("MENTOR_DICTIONARY_PATH", args[1], EnvironmentVariableTarget.Process);
+#endif
+
+                        MapGuideApi.MgInitializeWebTier(args[0]);
+                        userInfo = new MgUserInformation("Administrator", "admin");
+                        siteConn = new MgSiteConnection();
+                        siteConn.Open(userInfo);
+
+                        var factory = new PlatformFactory(siteConn);
+
+                        int testsRun = 0;
+                        bool isEnterprise = false;
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/ResourceService/ResourceServiceTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/DrawingService/DrawingServiceTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/FeatureService/FeatureServiceTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/SiteService/SiteServiceTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/MappingService/MappingServiceTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/ServerAdmin/ServerAdminTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/MapLayer/MapLayerTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/WebLayout/WebLayoutTest.dump", ref testsRun, logger, isEnterprise);
+                        failures += ExecuteTest(ApiTypes.Platform, $"{TestDataRoot.Path}/Unicode/UnicodeTest.dump", ref testsRun, logger, isEnterprise);
+                        //Run auxillary tests not part of the SQLite-defined suite
+                        failures += CommonTests.Execute(factory, logger, ref testsRun);
+                        failures += MapGuideTests.Execute(factory, logger, ref testsRun);
+                        logger.Write("\n\nTests failed/run: {0}/{1}\n", failures, testsRun);
+                        Console.Write("\n\nTests failed/run: {0}/{1}\n", failures, testsRun);
+                        logger.Write("Run ended: {0}\n\n", DateTime.Now.ToString());
+
+#if DNXCORE50
+                    }
+                    catch (Exception ex)
+                    {
+                        Environment.FailFast("Exception occurred", ex);
+                    }
+#endif
+                }
+#if DNXCORE50
+                return failures;
+#else
+                Environment.ExitCode = failures;
+#endif
+            }
+            else
+            {
+                Console.WriteLine("Usage: MgTestRunner.exe <webconfig.ini path> <MENTOR_DICTIONARY_PATH> [test log path]");
+#if DNXCORE50
+                return 1;
+#else
+                Environment.ExitCode = 1;
+#endif
+            }
+        }
+
+        private static int ExecuteTest(string apiType, string dumpFile, ref int testsRun, TestLoggerFile logger, bool isEnterprise)
+        {
+            ITestExecutorCollection exec = null;
+            if (apiType == ApiTypes.Platform)
+                exec = new MapGuideTestExecutorCollection(userInfo, siteConn);
+
+            int ret = 0;
+            if (exec != null)
+            {
+                //"validate" is currently the only test execution mode supported
+                exec.Initialize("validate", dumpFile);
+                ret += exec.Execute(ref testsRun, logger, isEnterprise);
+                exec.Cleanup();
+            }
+            return ret;
+        }
+    }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/AssemblyInfo.cs
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/AssemblyInfo.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/AssemblyInfo.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,23 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TestRunner")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TestRunner")]
+[assembly: AssemblyCopyright("Copyright ©  2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4dcfcfdb-3698-45b6-908e-19da1cff56fd")]

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/launchSettings.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/launchSettings.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/Properties/launchSettings.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,8 @@
+{
+  "profiles": {
+    "TestRunner": {
+      "commandName": "TestRunner",
+      "commandLineArgs": "\"C:\\Program Files\\OSGeo\\MapGuide\\Web\\www\\webconfig.ini\" \"C:\\Program Files\\OSGeo\\MapGuide\\CS-Map\\Dictionaries\""
+    }
+  }
+}
\ No newline at end of file

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/TestRunner.xproj
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/TestRunner.xproj	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/TestRunner.xproj	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+  </PropertyGroup>
+
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>4dcfcfdb-3698-45b6-908e-19da1cff56fd</ProjectGuid>
+    <RootNamespace>TestRunner</RootNamespace>
+    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
+    <OutputPath Condition="'$(OutputPath)'=='' ">..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <SchemaVersion>2.0</SchemaVersion>
+  </PropertyGroup>
+  <Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
+</Project>

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,35 @@
+{
+  "version": "1.0.0-*",
+  "description": "TestRunner Console Application",
+    "authors": [ "OSGeo" ],
+  "tags": [ "" ],
+  "projectUrl": "",
+  "licenseUrl": "",
+
+  "compilationOptions": {
+    "emitEntryPoint": true
+  },
+
+    "dependencies": {
+        "TestCommon": "1.0.0-*",
+        "TestMapGuideApi": "1.0.0-*"
+    },
+
+  "commands": {
+    "TestRunner": "TestRunner"
+  },
+
+  "frameworks": {
+    "dnxcore50": {
+      "dependencies": {
+        "Microsoft.CSharp": "4.0.1-beta-23516",
+        "System.Collections": "4.0.11-beta-23516",
+        "System.Console": "4.0.0-beta-23516",
+        "System.Linq": "4.0.1-beta-23516",
+        "System.Threading": "4.0.11-beta-23516",
+        "System.Runtime.Extensions": "4.0.11-beta-23516",
+        "MapGuideDotNetCoreApi": "3.1.0"
+      }
+    }
+  }
+}

Added: sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.lock.json
===================================================================
--- sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.lock.json	                        (rev 0)
+++ sandbox/jng/aspnet50/UnitTest/WebTier/Dnx/src/TestRunner/project.lock.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,3755 @@
+{
+  "locked": false,
+  "version": 2,
+  "targets": {
+    "DNXCore,Version=v5.0": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Threading.Thread/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Threading.Thread.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Thread.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Collections.Specialized": "4.0.1-beta-23516",
+          "System.Console": "4.0.0-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Xml.XmlDocument": "4.0.1-beta-23516"
+        }
+      },
+      "TestMapGuideApi/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Threading.Thread": "4.0.0-beta-23516",
+          "TestCommon": "1.0.0"
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x86": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x86/native/ACE.dll": {},
+          "runtimes/win7-x86/native/GEOS.dll": {},
+          "runtimes/win7-x86/native/lib_json.dll": {},
+          "runtimes/win7-x86/native/MapGuideDotNetCoreUnmanagedApi.dll": {},
+          "runtimes/win7-x86/native/MgFoundation.dll": {},
+          "runtimes/win7-x86/native/MgGeometry.dll": {},
+          "runtimes/win7-x86/native/MgHttpHandler.dll": {},
+          "runtimes/win7-x86/native/MgMapGuideCommon.dll": {},
+          "runtimes/win7-x86/native/MgMdfModel.dll": {},
+          "runtimes/win7-x86/native/MgMdfParser.dll": {},
+          "runtimes/win7-x86/native/MgPlatformBase.dll": {},
+          "runtimes/win7-x86/native/MgWebApp.dll": {},
+          "runtimes/win7-x86/native/MgWebSupport.dll": {},
+          "runtimes/win7-x86/native/readme.txt": {},
+          "runtimes/win7-x86/native/xerces-c_3_1mg.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x86/native/sqlite3.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Overlapped": "4.0.0",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Overlapped/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Overlapped.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Overlapped.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Threading.Thread/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Threading.Thread.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Thread.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Collections.Specialized": "4.0.1-beta-23516",
+          "System.Console": "4.0.0-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Xml.XmlDocument": "4.0.1-beta-23516"
+        }
+      },
+      "TestMapGuideApi/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Threading.Thread": "4.0.0-beta-23516",
+          "TestCommon": "1.0.0"
+        }
+      }
+    },
+    "DNXCore,Version=v5.0/win7-x64": {
+      "MapGuideDotNetCoreApi/3.1.0": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.CSharp": "4.0.1-beta-23409",
+          "System.Collections": "4.0.11-beta-23409",
+          "System.Linq": "4.0.1-beta-23409",
+          "System.Runtime": "4.0.21-beta-23409",
+          "System.Runtime.Extensions": "4.0.11-beta-23409",
+          "System.Runtime.InteropServices": "4.0.21-beta-23409",
+          "System.Threading": "4.0.11-beta-23409"
+        },
+        "compile": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "runtime": {
+          "lib/dnxcore50/MapGuideDotNetCoreApi.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x64/native/ACE.dll": {},
+          "runtimes/win7-x64/native/GEOS.dll": {},
+          "runtimes/win7-x64/native/lib_json.dll": {},
+          "runtimes/win7-x64/native/MapGuideDotNetCoreUnmanagedApi.dll": {},
+          "runtimes/win7-x64/native/MgFoundation.dll": {},
+          "runtimes/win7-x64/native/MgGeometry.dll": {},
+          "runtimes/win7-x64/native/MgHttpHandler.dll": {},
+          "runtimes/win7-x64/native/MgMapGuideCommon.dll": {},
+          "runtimes/win7-x64/native/MgMdfModel.dll": {},
+          "runtimes/win7-x64/native/MgMdfParser.dll": {},
+          "runtimes/win7-x64/native/MgPlatformBase.dll": {},
+          "runtimes/win7-x64/native/MgWebApp.dll": {},
+          "runtimes/win7-x64/native/MgWebSupport.dll": {},
+          "runtimes/win7-x64/native/readme.txt": {},
+          "runtimes/win7-x64/native/xerces-c_3_1mg.dll": {}
+        }
+      },
+      "Microsoft.CSharp/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Dynamic.Runtime": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Linq": "4.0.0",
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.10",
+          "System.Reflection": "4.0.10",
+          "System.Reflection.Extensions": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Reflection.TypeExtensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/Microsoft.CSharp.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.CSharp.dll": {}
+        }
+      },
+      "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.Data.Common": "4.0.1-beta-23516",
+          "System.Diagnostics.Debug": "4.0.11-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO.FileSystem": "4.0.1-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Resources.ResourceManager": "4.0.1-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Runtime.Handles": "4.0.1-beta-23516",
+          "System.Runtime.InteropServices": "4.0.21-beta-23516",
+          "System.Text.Encoding": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Data.Sqlite.dll": {}
+        },
+        "native": {
+          "runtimes/win7-x64/native/sqlite3.dll": {}
+        }
+      },
+      "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.11-beta-23516",
+          "System.ComponentModel": "4.0.1-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23225",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Runtime.Extensions": "4.0.11-beta-23516",
+          "System.Threading.Tasks": "4.0.11-beta-23516"
+        },
+        "compile": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll": {}
+        }
+      },
+      "runtime.win7.System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.Console.dll": {}
+        }
+      },
+      "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Threading.Overlapped": "4.0.0",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll": {}
+        }
+      },
+      "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "runtime.win7.System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dotnet/_._": {}
+        },
+        "runtime": {
+          "runtimes/win7/lib/DNXCore50/System.Threading.dll": {}
+        }
+      },
+      "System.Collections/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.21-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Collections.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Collections.dll": {}
+        }
+      },
+      "System.Collections.NonGeneric/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Collections.NonGeneric.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Collections.NonGeneric.dll": {}
+        }
+      },
+      "System.Collections.Specialized/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.Globalization.Extensions": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Collections.Specialized.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Collections.Specialized.dll": {}
+        }
+      },
+      "System.ComponentModel/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.ComponentModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.ComponentModel.dll": {}
+        }
+      },
+      "System.Console/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Console.dll": {}
+        }
+      },
+      "System.Data.Common/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Collections.NonGeneric": "4.0.0",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Data.Common.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Data.Common.dll": {}
+        }
+      },
+      "System.Diagnostics.Debug/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Diagnostics.Debug.dll": {}
+        }
+      },
+      "System.Dynamic.Runtime/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Linq.Expressions": "4.0.0",
+          "System.ObjectModel": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Dynamic.Runtime.dll": {}
+        }
+      },
+      "System.Globalization/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Globalization.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Globalization.dll": {}
+        }
+      },
+      "System.Globalization.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.Globalization.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Globalization.Extensions.dll": {}
+        }
+      },
+      "System.IO/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.IO.dll": {}
+        }
+      },
+      "System.IO.FileSystem/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0",
+          "System.Text.Encoding": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.IO.FileSystem.dll": {}
+        }
+      },
+      "System.IO.FileSystem.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.IO.FileSystem.Primitives.dll": {}
+        }
+      },
+      "System.Linq/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Linq.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Linq.dll": {}
+        }
+      },
+      "System.Linq.Expressions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Linq.Expressions.dll": {}
+        }
+      },
+      "System.ObjectModel/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.ObjectModel.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.ObjectModel.dll": {}
+        }
+      },
+      "System.Private.Uri/4.0.1-beta-23516": {
+        "type": "package",
+        "compile": {
+          "ref/dnxcore50/_._": {}
+        }
+      },
+      "System.Reflection/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.IO": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Reflection.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.dll": {}
+        }
+      },
+      "System.Reflection.Extensions/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Extensions.dll": {}
+        }
+      },
+      "System.Reflection.Primitives/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Reflection.Primitives.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.Primitives.dll": {}
+        }
+      },
+      "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Reflection.TypeExtensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Reflection.TypeExtensions.dll": {}
+        }
+      },
+      "System.Resources.ResourceManager/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Globalization": "4.0.0",
+          "System.Reflection": "4.0.0",
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Resources.ResourceManager.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Resources.ResourceManager.dll": {}
+        }
+      },
+      "System.Runtime/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Private.Uri": "4.0.1-beta-23516"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.dll": {}
+        }
+      },
+      "System.Runtime.Extensions/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.20"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Extensions.dll": {}
+        }
+      },
+      "System.Runtime.Handles/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.Handles.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.Handles.dll": {}
+        }
+      },
+      "System.Runtime.InteropServices/4.0.21-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Reflection": "4.0.0",
+          "System.Reflection.Primitives": "4.0.0",
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Runtime.InteropServices.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Runtime.InteropServices.dll": {}
+        }
+      },
+      "System.Text.Encoding/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Text.Encoding.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.dll": {}
+        }
+      },
+      "System.Text.Encoding.Extensions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Text.Encoding": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.Encoding.Extensions.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Text.Encoding.Extensions.dll": {}
+        }
+      },
+      "System.Text.RegularExpressions/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Threading": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Text.RegularExpressions.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Text.RegularExpressions.dll": {}
+        }
+      },
+      "System.Threading/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Threading.Tasks": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.dll": {}
+        }
+      },
+      "System.Threading.Overlapped/4.0.0": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0",
+          "System.Runtime.Handles": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet/System.Threading.Overlapped.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Overlapped.dll": {}
+        }
+      },
+      "System.Threading.Tasks/4.0.11-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.4/System.Threading.Tasks.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Tasks.dll": {}
+        }
+      },
+      "System.Threading.Thread/4.0.0-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Runtime": "4.0.0"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Threading.Thread.dll": {}
+        },
+        "runtime": {
+          "lib/DNXCore50/System.Threading.Thread.dll": {}
+        }
+      },
+      "System.Xml.ReaderWriter/4.0.10": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.IO.FileSystem": "4.0.0",
+          "System.IO.FileSystem.Primitives": "4.0.0",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Runtime.InteropServices": "4.0.20",
+          "System.Text.Encoding": "4.0.10",
+          "System.Text.Encoding.Extensions": "4.0.10",
+          "System.Text.RegularExpressions": "4.0.10",
+          "System.Threading.Tasks": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet/System.Xml.ReaderWriter.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet/System.Xml.ReaderWriter.dll": {}
+        }
+      },
+      "System.Xml.XmlDocument/4.0.1-beta-23516": {
+        "type": "package",
+        "dependencies": {
+          "System.Collections": "4.0.10",
+          "System.Diagnostics.Debug": "4.0.10",
+          "System.Globalization": "4.0.10",
+          "System.IO": "4.0.10",
+          "System.Resources.ResourceManager": "4.0.0",
+          "System.Runtime": "4.0.20",
+          "System.Runtime.Extensions": "4.0.10",
+          "System.Text.Encoding": "4.0.10",
+          "System.Threading": "4.0.10",
+          "System.Xml.ReaderWriter": "4.0.10"
+        },
+        "compile": {
+          "ref/dotnet5.1/System.Xml.XmlDocument.dll": {}
+        },
+        "runtime": {
+          "lib/dotnet5.4/System.Xml.XmlDocument.dll": {}
+        }
+      },
+      "TestCommon/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Collections.Specialized": "4.0.1-beta-23516",
+          "System.Console": "4.0.0-beta-23516",
+          "System.Globalization": "4.0.11-beta-23516",
+          "System.IO": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Reflection.TypeExtensions": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Xml.XmlDocument": "4.0.1-beta-23516"
+        }
+      },
+      "TestMapGuideApi/1.0.0": {
+        "type": "project",
+        "framework": "DNXCore,Version=v5.0",
+        "dependencies": {
+          "MapGuideDotNetCoreApi": "3.1.0",
+          "Microsoft.CSharp": "4.0.1-beta-23516",
+          "Microsoft.Data.Sqlite": "1.0.0-rc1-final",
+          "System.Collections": "4.0.11-beta-23516",
+          "System.Linq": "4.0.1-beta-23516",
+          "System.Reflection": "4.1.0-beta-23516",
+          "System.Runtime": "4.0.21-beta-23516",
+          "System.Threading": "4.0.11-beta-23516",
+          "System.Threading.Thread": "4.0.0-beta-23516",
+          "TestCommon": "1.0.0"
+        }
+      }
+    }
+  },
+  "libraries": {
+    "TestCommon/1.0.0": {
+      "type": "project",
+      "path": "../TestCommon/project.json"
+    },
+    "TestMapGuideApi/1.0.0": {
+      "type": "project",
+      "path": "../TestMapGuideApi/project.json"
+    },
+    "MapGuideDotNetCoreApi/3.1.0": {
+      "type": "package",
+      "sha512": "A1bl+WWyigH83cWV45k3HeqE8i3BTcN36YGVbaXByTQOOFZz14CYDoiApZjXYTN4lqQpT2RDEZ4VUWHCtMrsqA==",
+      "files": [
+        "lib/dnxcore50/MapGuideDotNetCoreApi.dll",
+        "lib/dnxcore50/MapGuideDotNetCoreApi.xml",
+        "MapGuideDotNetCoreApi.3.1.0.nupkg",
+        "MapGuideDotNetCoreApi.3.1.0.nupkg.sha512",
+        "MapGuideDotNetCoreApi.nuspec",
+        "runtimes/win7-x64/native/ACE.dll",
+        "runtimes/win7-x64/native/GEOS.dll",
+        "runtimes/win7-x64/native/lib_json.dll",
+        "runtimes/win7-x64/native/MapGuideDotNetCoreUnmanagedApi.dll",
+        "runtimes/win7-x64/native/MgFoundation.dll",
+        "runtimes/win7-x64/native/MgGeometry.dll",
+        "runtimes/win7-x64/native/MgHttpHandler.dll",
+        "runtimes/win7-x64/native/MgMapGuideCommon.dll",
+        "runtimes/win7-x64/native/MgMdfModel.dll",
+        "runtimes/win7-x64/native/MgMdfParser.dll",
+        "runtimes/win7-x64/native/MgPlatformBase.dll",
+        "runtimes/win7-x64/native/MgWebApp.dll",
+        "runtimes/win7-x64/native/MgWebSupport.dll",
+        "runtimes/win7-x64/native/readme.txt",
+        "runtimes/win7-x64/native/xerces-c_3_1mg.dll",
+        "runtimes/win7-x86/native/ACE.dll",
+        "runtimes/win7-x86/native/GEOS.dll",
+        "runtimes/win7-x86/native/lib_json.dll",
+        "runtimes/win7-x86/native/MapGuideDotNetCoreUnmanagedApi.dll",
+        "runtimes/win7-x86/native/MgFoundation.dll",
+        "runtimes/win7-x86/native/MgGeometry.dll",
+        "runtimes/win7-x86/native/MgHttpHandler.dll",
+        "runtimes/win7-x86/native/MgMapGuideCommon.dll",
+        "runtimes/win7-x86/native/MgMdfModel.dll",
+        "runtimes/win7-x86/native/MgMdfParser.dll",
+        "runtimes/win7-x86/native/MgPlatformBase.dll",
+        "runtimes/win7-x86/native/MgWebApp.dll",
+        "runtimes/win7-x86/native/MgWebSupport.dll",
+        "runtimes/win7-x86/native/readme.txt",
+        "runtimes/win7-x86/native/xerces-c_3_1mg.dll"
+      ]
+    },
+    "Microsoft.CSharp/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fb+HO3nIjHao9lqsVVM0ne3GM/+1EfRQUoM58cxEOt+5biy/8DQ1nxIahZ9VaJKw7Wgb6XhRhsdwg8DkePEOJA==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.CSharp.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/Microsoft.CSharp.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg",
+        "Microsoft.CSharp.4.0.1-beta-23516.nupkg.sha512",
+        "Microsoft.CSharp.nuspec",
+        "ref/dotnet5.1/de/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/es/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/fr/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/it/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ja/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ko/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/Microsoft.CSharp.dll",
+        "ref/dotnet5.1/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/ru/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hans/Microsoft.CSharp.xml",
+        "ref/dotnet5.1/zh-hant/Microsoft.CSharp.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/Microsoft.CSharp.xml",
+        "ref/netcore50/es/Microsoft.CSharp.xml",
+        "ref/netcore50/fr/Microsoft.CSharp.xml",
+        "ref/netcore50/it/Microsoft.CSharp.xml",
+        "ref/netcore50/ja/Microsoft.CSharp.xml",
+        "ref/netcore50/ko/Microsoft.CSharp.xml",
+        "ref/netcore50/Microsoft.CSharp.dll",
+        "ref/netcore50/Microsoft.CSharp.xml",
+        "ref/netcore50/ru/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hans/Microsoft.CSharp.xml",
+        "ref/netcore50/zh-hant/Microsoft.CSharp.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._"
+      ]
+    },
+    "Microsoft.Data.Sqlite/1.0.0-rc1-final": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "54F32OBWIWMIpeKggCMEX+Bp/TiAiKzBaQ4z+IRr61eNSnJhxMnLE/QWDs5YbCtbDlWIB4+VBC1rnT8PFGCtdw==",
+      "files": [
+        "build/net451/Microsoft.Data.Sqlite.props",
+        "build/netcore50/Microsoft.Data.Sqlite.targets",
+        "build/netcore50/win10-arm/native/sqlite3.dll",
+        "build/netcore50/win10-x64/native/sqlite3.dll",
+        "build/netcore50/win10-x86/native/sqlite3.dll",
+        "lib/dotnet5.4/Microsoft.Data.Sqlite.dll",
+        "lib/dotnet5.4/Microsoft.Data.Sqlite.xml",
+        "lib/net451/Microsoft.Data.Sqlite.dll",
+        "lib/net451/Microsoft.Data.Sqlite.xml",
+        "lib/netcore50/Microsoft.Data.Sqlite.dll",
+        "lib/netcore50/Microsoft.Data.Sqlite.xml",
+        "Microsoft.Data.Sqlite.1.0.0-rc1-final.nupkg",
+        "Microsoft.Data.Sqlite.1.0.0-rc1-final.nupkg.sha512",
+        "Microsoft.Data.Sqlite.nuspec",
+        "runtimes/win7-x64/native/sqlite3.dll",
+        "runtimes/win7-x86/native/sqlite3.dll"
+      ]
+    },
+    "Microsoft.Extensions.PlatformAbstractions/1.0.0-rc1-final": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "26HS4c6MBisN+D7XUr8HObOI/JJvSJQYQR//Bfw/hi9UqhqK3lFpNKjOuYHI+gTxYdXT46HqZiz4D+k7d+ob3A==",
+      "files": [
+        "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.dll",
+        "lib/dotnet5.4/Microsoft.Extensions.PlatformAbstractions.xml",
+        "lib/net451/Microsoft.Extensions.PlatformAbstractions.dll",
+        "lib/net451/Microsoft.Extensions.PlatformAbstractions.xml",
+        "Microsoft.Extensions.PlatformAbstractions.1.0.0-rc1-final.nupkg",
+        "Microsoft.Extensions.PlatformAbstractions.1.0.0-rc1-final.nupkg.sha512",
+        "Microsoft.Extensions.PlatformAbstractions.nuspec"
+      ]
+    },
+    "runtime.win7.System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "pfQrTtnYcWOtI3RrpqjAzwT3I55ivTVZFpbKYG59dYTTvaLFGbs2njc/mrXHij6GylyJ2YjekS/9r6I8X3LV1A==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg",
+        "runtime.win7.System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Console.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.Console.dll",
+        "runtimes/win7/lib/net/_._"
+      ]
+    },
+    "runtime.win7.System.Diagnostics.Debug/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TxSgeP23B6bPfE0QFX8u4/1p1jP6Ugn993npTRf3e9F3y61BIQeCkt5Im0gGdjz0dxioHkuTr+C2m4ELsMos8Q==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Diagnostics.Debug.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Diagnostics.Debug.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Diagnostics.Debug.dll",
+        "runtimes/win7/lib/netcore50/System.Diagnostics.Debug.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Diagnostics.Debug.dll"
+      ]
+    },
+    "runtime.win7.System.IO.FileSystem/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "UOHEVg3jQwsvy3b+8zhDk7BQ9GhHY1KcjHSuqArzIl7oemcM/+D7OfS5iOA96ydjEv9FmIKV3knkXMge+cUD0Q==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.IO.FileSystem.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.IO.FileSystem.nuspec",
+        "runtimes/win7/lib/dotnet5.4/System.IO.FileSystem.dll",
+        "runtimes/win7/lib/net/_._",
+        "runtimes/win7/lib/netcore50/System.IO.FileSystem.dll",
+        "runtimes/win7/lib/win8/_._",
+        "runtimes/win7/lib/wp8/_._",
+        "runtimes/win7/lib/wpa81/_._"
+      ]
+    },
+    "runtime.win7.System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HphDhue34J/4+1rIMtInY1FWK1oLEMpxIpxGeNnhIlQf7hv5QDf05aWEC6180qbgkPBCFwyGnwWRBnONApwbBQ==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "runtime.win7.System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Private.Uri.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Private.Uri.dll",
+        "runtimes/win7/lib/netcore50/System.Private.Uri.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Private.Uri.dll"
+      ]
+    },
+    "runtime.win7.System.Runtime.Extensions/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Jm+LAzN7CZl1BZSxz4TsMBNy1rHNqyY/1+jxZf3BpF7vkPlWRXa/vSfY0lZJZdy4Doxa893bmcCf9pZNsJU16Q==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Extensions.dll",
+        "lib/netcore50/System.Runtime.Extensions.dll",
+        "ref/dotnet/_._",
+        "runtime.win7.System.Runtime.Extensions.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Runtime.Extensions.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Runtime.Extensions.nuspec",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Extensions.dll"
+      ]
+    },
+    "runtime.win7.System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "paSNXQ5Y6Exu3OpekooyMJFQ8mitn69fGO5Br3XLIfQ1KiMYVmRf+o6dMprC0SpPROVCiCxdUaJx5XkDEVL3uA==",
+      "files": [
+        "ref/dotnet/_._",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg",
+        "runtime.win7.System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "runtime.win7.System.Threading.nuspec",
+        "runtimes/win7/lib/DNXCore50/System.Threading.dll",
+        "runtimes/win7/lib/netcore50/System.Threading.dll",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.dll"
+      ]
+    },
+    "System.Collections/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "TDca4OETV0kkXdpkyivMw1/EKKD1Sa/NVAjirw+fA0LZ37jLDYX+KhPPUQxgkvhCe/SVvxETD5Viiudza2k7OQ==",
+      "files": [
+        "lib/DNXCore50/System.Collections.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Collections.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.xml",
+        "ref/dotnet5.1/es/System.Collections.xml",
+        "ref/dotnet5.1/fr/System.Collections.xml",
+        "ref/dotnet5.1/it/System.Collections.xml",
+        "ref/dotnet5.1/ja/System.Collections.xml",
+        "ref/dotnet5.1/ko/System.Collections.xml",
+        "ref/dotnet5.1/ru/System.Collections.xml",
+        "ref/dotnet5.1/System.Collections.dll",
+        "ref/dotnet5.1/System.Collections.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.xml",
+        "ref/dotnet5.4/de/System.Collections.xml",
+        "ref/dotnet5.4/es/System.Collections.xml",
+        "ref/dotnet5.4/fr/System.Collections.xml",
+        "ref/dotnet5.4/it/System.Collections.xml",
+        "ref/dotnet5.4/ja/System.Collections.xml",
+        "ref/dotnet5.4/ko/System.Collections.xml",
+        "ref/dotnet5.4/ru/System.Collections.xml",
+        "ref/dotnet5.4/System.Collections.dll",
+        "ref/dotnet5.4/System.Collections.xml",
+        "ref/dotnet5.4/zh-hans/System.Collections.xml",
+        "ref/dotnet5.4/zh-hant/System.Collections.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Collections.xml",
+        "ref/netcore50/es/System.Collections.xml",
+        "ref/netcore50/fr/System.Collections.xml",
+        "ref/netcore50/it/System.Collections.xml",
+        "ref/netcore50/ja/System.Collections.xml",
+        "ref/netcore50/ko/System.Collections.xml",
+        "ref/netcore50/ru/System.Collections.xml",
+        "ref/netcore50/System.Collections.dll",
+        "ref/netcore50/System.Collections.xml",
+        "ref/netcore50/zh-hans/System.Collections.xml",
+        "ref/netcore50/zh-hant/System.Collections.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Collections.dll",
+        "System.Collections.4.0.11-beta-23516.nupkg",
+        "System.Collections.4.0.11-beta-23516.nupkg.sha512",
+        "System.Collections.nuspec"
+      ]
+    },
+    "System.Collections.NonGeneric/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "rVgwrFBMkmp8LI6GhAYd6Bx+2uLIXjRfNg6Ie+ASfX8ESuh9e2HNxFy2yh1MPIXZq3OAYa+0mmULVwpnEC6UDA==",
+      "files": [
+        "lib/dotnet/System.Collections.NonGeneric.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Collections.NonGeneric.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Collections.NonGeneric.xml",
+        "ref/dotnet/es/System.Collections.NonGeneric.xml",
+        "ref/dotnet/fr/System.Collections.NonGeneric.xml",
+        "ref/dotnet/it/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ja/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ko/System.Collections.NonGeneric.xml",
+        "ref/dotnet/ru/System.Collections.NonGeneric.xml",
+        "ref/dotnet/System.Collections.NonGeneric.dll",
+        "ref/dotnet/System.Collections.NonGeneric.xml",
+        "ref/dotnet/zh-hans/System.Collections.NonGeneric.xml",
+        "ref/dotnet/zh-hant/System.Collections.NonGeneric.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Collections.NonGeneric.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Collections.NonGeneric.4.0.0.nupkg",
+        "System.Collections.NonGeneric.4.0.0.nupkg.sha512",
+        "System.Collections.NonGeneric.nuspec"
+      ]
+    },
+    "System.Collections.Specialized/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "h/PM3mqxwZzhClFW7vxdgIoT/4TBqBqHNzIphgpvqisGhe0jpE5XiBVqhZwx2QMkZO7+LJpUmIv8W3gMkPr1fg==",
+      "files": [
+        "lib/dotnet5.4/System.Collections.Specialized.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Collections.Specialized.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/es/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/fr/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/it/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ja/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ko/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/ru/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/System.Collections.Specialized.dll",
+        "ref/dotnet5.1/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/zh-hans/System.Collections.Specialized.xml",
+        "ref/dotnet5.1/zh-hant/System.Collections.Specialized.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Collections.Specialized.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Collections.Specialized.4.0.1-beta-23516.nupkg",
+        "System.Collections.Specialized.4.0.1-beta-23516.nupkg.sha512",
+        "System.Collections.Specialized.nuspec"
+      ]
+    },
+    "System.ComponentModel/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "PdAC1M7yT9EBtLpXICbOtPDpDjYSlV2RXyQ7AiKyBD7mV1DNTIK7tcM1056GIOlMoJDDdxU5Z3otBeAM8v5PAg==",
+      "files": [
+        "lib/dotnet5.4/System.ComponentModel.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.ComponentModel.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.ComponentModel.xml",
+        "ref/dotnet5.1/es/System.ComponentModel.xml",
+        "ref/dotnet5.1/fr/System.ComponentModel.xml",
+        "ref/dotnet5.1/it/System.ComponentModel.xml",
+        "ref/dotnet5.1/ja/System.ComponentModel.xml",
+        "ref/dotnet5.1/ko/System.ComponentModel.xml",
+        "ref/dotnet5.1/ru/System.ComponentModel.xml",
+        "ref/dotnet5.1/System.ComponentModel.dll",
+        "ref/dotnet5.1/System.ComponentModel.xml",
+        "ref/dotnet5.1/zh-hans/System.ComponentModel.xml",
+        "ref/dotnet5.1/zh-hant/System.ComponentModel.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.ComponentModel.xml",
+        "ref/netcore50/es/System.ComponentModel.xml",
+        "ref/netcore50/fr/System.ComponentModel.xml",
+        "ref/netcore50/it/System.ComponentModel.xml",
+        "ref/netcore50/ja/System.ComponentModel.xml",
+        "ref/netcore50/ko/System.ComponentModel.xml",
+        "ref/netcore50/ru/System.ComponentModel.xml",
+        "ref/netcore50/System.ComponentModel.dll",
+        "ref/netcore50/System.ComponentModel.xml",
+        "ref/netcore50/zh-hans/System.ComponentModel.xml",
+        "ref/netcore50/zh-hant/System.ComponentModel.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.ComponentModel.4.0.1-beta-23516.nupkg",
+        "System.ComponentModel.4.0.1-beta-23516.nupkg.sha512",
+        "System.ComponentModel.nuspec"
+      ]
+    },
+    "System.Console/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0YTzoNamTU+6qfZEYtMuGjtkJHB1MEDyFsZ5L/x97GkZO3Bw91uwdPh0DkFwQ6E8KaQTgZAecSXoboUHAcdSLA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Console.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Console.xml",
+        "ref/dotnet5.1/es/System.Console.xml",
+        "ref/dotnet5.1/fr/System.Console.xml",
+        "ref/dotnet5.1/it/System.Console.xml",
+        "ref/dotnet5.1/ja/System.Console.xml",
+        "ref/dotnet5.1/ko/System.Console.xml",
+        "ref/dotnet5.1/ru/System.Console.xml",
+        "ref/dotnet5.1/System.Console.dll",
+        "ref/dotnet5.1/System.Console.xml",
+        "ref/dotnet5.1/zh-hans/System.Console.xml",
+        "ref/dotnet5.1/zh-hant/System.Console.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Console.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Console.4.0.0-beta-23516.nupkg",
+        "System.Console.4.0.0-beta-23516.nupkg.sha512",
+        "System.Console.nuspec"
+      ]
+    },
+    "System.Data.Common/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "fMYiiL3/cXaozWH08y/kB25BZf6eBf5EWxBZnjDECNBRkaJgsa4/0S6543NK11UpsWYYHBUFsX4roSq8GddkpA==",
+      "files": [
+        "lib/dotnet5.4/System.Data.Common.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Data.Common.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Data.Common.xml",
+        "ref/dotnet5.1/es/System.Data.Common.xml",
+        "ref/dotnet5.1/fr/System.Data.Common.xml",
+        "ref/dotnet5.1/it/System.Data.Common.xml",
+        "ref/dotnet5.1/ja/System.Data.Common.xml",
+        "ref/dotnet5.1/ko/System.Data.Common.xml",
+        "ref/dotnet5.1/ru/System.Data.Common.xml",
+        "ref/dotnet5.1/System.Data.Common.dll",
+        "ref/dotnet5.1/System.Data.Common.xml",
+        "ref/dotnet5.1/zh-hans/System.Data.Common.xml",
+        "ref/dotnet5.1/zh-hant/System.Data.Common.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Data.Common.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Data.Common.4.0.1-beta-23516.nupkg",
+        "System.Data.Common.4.0.1-beta-23516.nupkg.sha512",
+        "System.Data.Common.nuspec"
+      ]
+    },
+    "System.Diagnostics.Debug/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "wK52HdO2OW7P6hVk/Q9FCnKE9WcTDA3Yio1D8xmeE+6nfOqwWw6d+jVjgn5TSuDghudJK9xq77wseiGa6i7OTQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/System.Diagnostics.Debug.dll",
+        "ref/dotnet5.1/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.1/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/de/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/es/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/fr/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/it/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ja/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ko/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/ru/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/System.Diagnostics.Debug.dll",
+        "ref/dotnet5.4/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/dotnet5.4/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Diagnostics.Debug.xml",
+        "ref/netcore50/es/System.Diagnostics.Debug.xml",
+        "ref/netcore50/fr/System.Diagnostics.Debug.xml",
+        "ref/netcore50/it/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ja/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ko/System.Diagnostics.Debug.xml",
+        "ref/netcore50/ru/System.Diagnostics.Debug.xml",
+        "ref/netcore50/System.Diagnostics.Debug.dll",
+        "ref/netcore50/System.Diagnostics.Debug.xml",
+        "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml",
+        "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Diagnostics.Debug.4.0.11-beta-23516.nupkg",
+        "System.Diagnostics.Debug.4.0.11-beta-23516.nupkg.sha512",
+        "System.Diagnostics.Debug.nuspec"
+      ]
+    },
+    "System.Dynamic.Runtime/4.0.0": {
+      "type": "package",
+      "sha512": "33os71rQUCLjM5pbhQqCopq9/YcqBHPBQ8WylrzNk3oJmfAR0SFwzZIKJRN2JcrkBYdzC/NtWrYVU8oroyZieA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Dynamic.Runtime.xml",
+        "ref/dotnet/es/System.Dynamic.Runtime.xml",
+        "ref/dotnet/fr/System.Dynamic.Runtime.xml",
+        "ref/dotnet/it/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ja/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ko/System.Dynamic.Runtime.xml",
+        "ref/dotnet/ru/System.Dynamic.Runtime.xml",
+        "ref/dotnet/System.Dynamic.Runtime.dll",
+        "ref/dotnet/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/dotnet/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Dynamic.Runtime.xml",
+        "ref/netcore50/es/System.Dynamic.Runtime.xml",
+        "ref/netcore50/fr/System.Dynamic.Runtime.xml",
+        "ref/netcore50/it/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ja/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ko/System.Dynamic.Runtime.xml",
+        "ref/netcore50/ru/System.Dynamic.Runtime.xml",
+        "ref/netcore50/System.Dynamic.Runtime.dll",
+        "ref/netcore50/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Dynamic.Runtime.4.0.0.nupkg",
+        "System.Dynamic.Runtime.4.0.0.nupkg.sha512",
+        "System.Dynamic.Runtime.nuspec"
+      ]
+    },
+    "System.Globalization/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "htoF4cS3WhCkU3HloMj3mz+h2FHnF8Hz0po/26otT5e46LlJ8p7LpFpxckxVviyYg9Fab9gr8aIB0ZDN9Cjpig==",
+      "files": [
+        "lib/DNXCore50/System.Globalization.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Globalization.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Globalization.xml",
+        "ref/dotnet5.1/es/System.Globalization.xml",
+        "ref/dotnet5.1/fr/System.Globalization.xml",
+        "ref/dotnet5.1/it/System.Globalization.xml",
+        "ref/dotnet5.1/ja/System.Globalization.xml",
+        "ref/dotnet5.1/ko/System.Globalization.xml",
+        "ref/dotnet5.1/ru/System.Globalization.xml",
+        "ref/dotnet5.1/System.Globalization.dll",
+        "ref/dotnet5.1/System.Globalization.xml",
+        "ref/dotnet5.1/zh-hans/System.Globalization.xml",
+        "ref/dotnet5.1/zh-hant/System.Globalization.xml",
+        "ref/dotnet5.4/de/System.Globalization.xml",
+        "ref/dotnet5.4/es/System.Globalization.xml",
+        "ref/dotnet5.4/fr/System.Globalization.xml",
+        "ref/dotnet5.4/it/System.Globalization.xml",
+        "ref/dotnet5.4/ja/System.Globalization.xml",
+        "ref/dotnet5.4/ko/System.Globalization.xml",
+        "ref/dotnet5.4/ru/System.Globalization.xml",
+        "ref/dotnet5.4/System.Globalization.dll",
+        "ref/dotnet5.4/System.Globalization.xml",
+        "ref/dotnet5.4/zh-hans/System.Globalization.xml",
+        "ref/dotnet5.4/zh-hant/System.Globalization.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Globalization.xml",
+        "ref/netcore50/es/System.Globalization.xml",
+        "ref/netcore50/fr/System.Globalization.xml",
+        "ref/netcore50/it/System.Globalization.xml",
+        "ref/netcore50/ja/System.Globalization.xml",
+        "ref/netcore50/ko/System.Globalization.xml",
+        "ref/netcore50/ru/System.Globalization.xml",
+        "ref/netcore50/System.Globalization.dll",
+        "ref/netcore50/System.Globalization.xml",
+        "ref/netcore50/zh-hans/System.Globalization.xml",
+        "ref/netcore50/zh-hant/System.Globalization.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Globalization.dll",
+        "System.Globalization.4.0.11-beta-23516.nupkg",
+        "System.Globalization.4.0.11-beta-23516.nupkg.sha512",
+        "System.Globalization.nuspec"
+      ]
+    },
+    "System.Globalization.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "rqbUXiwpBCvJ18ySCsjh20zleazO+6fr3s5GihC2sVwhyS0MUl6+oc5Rzk0z6CKkS4kmxbZQSeZLsK7cFSO0ng==",
+      "files": [
+        "lib/dotnet/System.Globalization.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Globalization.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Globalization.Extensions.xml",
+        "ref/dotnet/es/System.Globalization.Extensions.xml",
+        "ref/dotnet/fr/System.Globalization.Extensions.xml",
+        "ref/dotnet/it/System.Globalization.Extensions.xml",
+        "ref/dotnet/ja/System.Globalization.Extensions.xml",
+        "ref/dotnet/ko/System.Globalization.Extensions.xml",
+        "ref/dotnet/ru/System.Globalization.Extensions.xml",
+        "ref/dotnet/System.Globalization.Extensions.dll",
+        "ref/dotnet/System.Globalization.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Globalization.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Globalization.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Globalization.Extensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Globalization.Extensions.4.0.0.nupkg",
+        "System.Globalization.Extensions.4.0.0.nupkg.sha512",
+        "System.Globalization.Extensions.nuspec"
+      ]
+    },
+    "System.IO/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dR1DaWrF0zsV2z/GVs8xVvMds6xu0ykuwv+VPou8wbpJ1XxGBK9g6v5F84DWL8Q1qi+6Kyb56wbZYdYQO8OMew==",
+      "files": [
+        "lib/DNXCore50/System.IO.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.IO.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.IO.xml",
+        "ref/dotnet5.1/es/System.IO.xml",
+        "ref/dotnet5.1/fr/System.IO.xml",
+        "ref/dotnet5.1/it/System.IO.xml",
+        "ref/dotnet5.1/ja/System.IO.xml",
+        "ref/dotnet5.1/ko/System.IO.xml",
+        "ref/dotnet5.1/ru/System.IO.xml",
+        "ref/dotnet5.1/System.IO.dll",
+        "ref/dotnet5.1/System.IO.xml",
+        "ref/dotnet5.1/zh-hans/System.IO.xml",
+        "ref/dotnet5.1/zh-hant/System.IO.xml",
+        "ref/dotnet5.4/de/System.IO.xml",
+        "ref/dotnet5.4/es/System.IO.xml",
+        "ref/dotnet5.4/fr/System.IO.xml",
+        "ref/dotnet5.4/it/System.IO.xml",
+        "ref/dotnet5.4/ja/System.IO.xml",
+        "ref/dotnet5.4/ko/System.IO.xml",
+        "ref/dotnet5.4/ru/System.IO.xml",
+        "ref/dotnet5.4/System.IO.dll",
+        "ref/dotnet5.4/System.IO.xml",
+        "ref/dotnet5.4/zh-hans/System.IO.xml",
+        "ref/dotnet5.4/zh-hant/System.IO.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.IO.xml",
+        "ref/netcore50/es/System.IO.xml",
+        "ref/netcore50/fr/System.IO.xml",
+        "ref/netcore50/it/System.IO.xml",
+        "ref/netcore50/ja/System.IO.xml",
+        "ref/netcore50/ko/System.IO.xml",
+        "ref/netcore50/ru/System.IO.xml",
+        "ref/netcore50/System.IO.dll",
+        "ref/netcore50/System.IO.xml",
+        "ref/netcore50/zh-hans/System.IO.xml",
+        "ref/netcore50/zh-hant/System.IO.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.IO.dll",
+        "System.IO.4.0.11-beta-23516.nupkg",
+        "System.IO.4.0.11-beta-23516.nupkg.sha512",
+        "System.IO.nuspec"
+      ]
+    },
+    "System.IO.FileSystem/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "KOYNQ6FeLQh0HdHVlp6IRjRGPCjyFvZRKfhYSDFi7DR0EHY3cC2rvfVj5HWJEW5KlSaa01Ct25m06yVnqSxwOQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.4/de/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/es/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/fr/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/it/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ja/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ko/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/ru/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/System.IO.FileSystem.dll",
+        "ref/dotnet5.4/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/zh-hans/System.IO.FileSystem.xml",
+        "ref/dotnet5.4/zh-hant/System.IO.FileSystem.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.IO.FileSystem.4.0.1-beta-23516.nupkg",
+        "System.IO.FileSystem.4.0.1-beta-23516.nupkg.sha512",
+        "System.IO.FileSystem.nuspec"
+      ]
+    },
+    "System.IO.FileSystem.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "7pJUvYi/Yq3A5nagqCCiOw3+aJp3xXc/Cjr8dnJDnER3/6kX3LEencfqmXUcPl9+7OvRNyPMNhqsLAcMK6K/KA==",
+      "files": [
+        "lib/dotnet/System.IO.FileSystem.Primitives.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.IO.FileSystem.Primitives.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/es/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/fr/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/it/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ja/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ko/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/ru/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/System.IO.FileSystem.Primitives.dll",
+        "ref/dotnet/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hans/System.IO.FileSystem.Primitives.xml",
+        "ref/dotnet/zh-hant/System.IO.FileSystem.Primitives.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.IO.FileSystem.Primitives.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg",
+        "System.IO.FileSystem.Primitives.4.0.0.nupkg.sha512",
+        "System.IO.FileSystem.Primitives.nuspec"
+      ]
+    },
+    "System.Linq/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "uNxm2RB+kMeiKnY26iPvOtJLzTzNaAF4A2qqyzev6j8x8w2Dr+gg7LF7BHCwC55N7OirhHrAWUb3C0n4oi9qYw==",
+      "files": [
+        "lib/dotnet5.4/System.Linq.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Linq.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Linq.xml",
+        "ref/dotnet5.1/es/System.Linq.xml",
+        "ref/dotnet5.1/fr/System.Linq.xml",
+        "ref/dotnet5.1/it/System.Linq.xml",
+        "ref/dotnet5.1/ja/System.Linq.xml",
+        "ref/dotnet5.1/ko/System.Linq.xml",
+        "ref/dotnet5.1/ru/System.Linq.xml",
+        "ref/dotnet5.1/System.Linq.dll",
+        "ref/dotnet5.1/System.Linq.xml",
+        "ref/dotnet5.1/zh-hans/System.Linq.xml",
+        "ref/dotnet5.1/zh-hant/System.Linq.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.xml",
+        "ref/netcore50/es/System.Linq.xml",
+        "ref/netcore50/fr/System.Linq.xml",
+        "ref/netcore50/it/System.Linq.xml",
+        "ref/netcore50/ja/System.Linq.xml",
+        "ref/netcore50/ko/System.Linq.xml",
+        "ref/netcore50/ru/System.Linq.xml",
+        "ref/netcore50/System.Linq.dll",
+        "ref/netcore50/System.Linq.xml",
+        "ref/netcore50/zh-hans/System.Linq.xml",
+        "ref/netcore50/zh-hant/System.Linq.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "System.Linq.4.0.1-beta-23516.nupkg",
+        "System.Linq.4.0.1-beta-23516.nupkg.sha512",
+        "System.Linq.nuspec"
+      ]
+    },
+    "System.Linq.Expressions/4.0.0": {
+      "type": "package",
+      "sha512": "wlfVllrKi+evu4Hi8yoJP1dSOVXbvsy7Hs1+oz4Cykfdf6MQTPlD3LI4WKWhprn8FpU5MS3spPSbcMX5sAoJSw==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "License.rtf",
+        "ref/dotnet/de/System.Linq.Expressions.xml",
+        "ref/dotnet/es/System.Linq.Expressions.xml",
+        "ref/dotnet/fr/System.Linq.Expressions.xml",
+        "ref/dotnet/it/System.Linq.Expressions.xml",
+        "ref/dotnet/ja/System.Linq.Expressions.xml",
+        "ref/dotnet/ko/System.Linq.Expressions.xml",
+        "ref/dotnet/ru/System.Linq.Expressions.xml",
+        "ref/dotnet/System.Linq.Expressions.dll",
+        "ref/dotnet/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hans/System.Linq.Expressions.xml",
+        "ref/dotnet/zh-hant/System.Linq.Expressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Linq.Expressions.xml",
+        "ref/netcore50/es/System.Linq.Expressions.xml",
+        "ref/netcore50/fr/System.Linq.Expressions.xml",
+        "ref/netcore50/it/System.Linq.Expressions.xml",
+        "ref/netcore50/ja/System.Linq.Expressions.xml",
+        "ref/netcore50/ko/System.Linq.Expressions.xml",
+        "ref/netcore50/ru/System.Linq.Expressions.xml",
+        "ref/netcore50/System.Linq.Expressions.dll",
+        "ref/netcore50/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hans/System.Linq.Expressions.xml",
+        "ref/netcore50/zh-hant/System.Linq.Expressions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Linq.Expressions.4.0.0.nupkg",
+        "System.Linq.Expressions.4.0.0.nupkg.sha512",
+        "System.Linq.Expressions.nuspec"
+      ]
+    },
+    "System.ObjectModel/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Djn1wb0vP662zxbe+c3mOhvC4vkQGicsFs1Wi0/GJJpp3Eqp+oxbJ+p2Sx3O0efYueggAI5SW+BqEoczjfr1cA==",
+      "files": [
+        "lib/dotnet/System.ObjectModel.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.ObjectModel.xml",
+        "ref/dotnet/es/System.ObjectModel.xml",
+        "ref/dotnet/fr/System.ObjectModel.xml",
+        "ref/dotnet/it/System.ObjectModel.xml",
+        "ref/dotnet/ja/System.ObjectModel.xml",
+        "ref/dotnet/ko/System.ObjectModel.xml",
+        "ref/dotnet/ru/System.ObjectModel.xml",
+        "ref/dotnet/System.ObjectModel.dll",
+        "ref/dotnet/System.ObjectModel.xml",
+        "ref/dotnet/zh-hans/System.ObjectModel.xml",
+        "ref/dotnet/zh-hant/System.ObjectModel.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.ObjectModel.4.0.10.nupkg",
+        "System.ObjectModel.4.0.10.nupkg.sha512",
+        "System.ObjectModel.nuspec"
+      ]
+    },
+    "System.Private.Uri/4.0.1-beta-23516": {
+      "type": "package",
+      "sha512": "MG79ArOc8KhfAkjrimI5GFH4tML7XFo+Z1sEQGLPxrBlwfbITwrrNfYb3YoH6CpAlJHc4pcs/gZrUas/pEkTdg==",
+      "files": [
+        "ref/dnxcore50/_._",
+        "ref/netcore50/_._",
+        "runtime.json",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg",
+        "System.Private.Uri.4.0.1-beta-23516.nupkg.sha512",
+        "System.Private.Uri.nuspec"
+      ]
+    },
+    "System.Reflection/4.1.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "wfrnDfk8p2cqJQY3TTHsJRmf3cE3wa6BacncCn4dO58lVwQNNe9ASdLrLJZlMviAjx8+1fUpj6NX7leIOyaBJA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/net46/System.Reflection.dll",
+        "lib/netcore50/System.Reflection.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Reflection.xml",
+        "ref/dotnet5.1/es/System.Reflection.xml",
+        "ref/dotnet5.1/fr/System.Reflection.xml",
+        "ref/dotnet5.1/it/System.Reflection.xml",
+        "ref/dotnet5.1/ja/System.Reflection.xml",
+        "ref/dotnet5.1/ko/System.Reflection.xml",
+        "ref/dotnet5.1/ru/System.Reflection.xml",
+        "ref/dotnet5.1/System.Reflection.dll",
+        "ref/dotnet5.1/System.Reflection.xml",
+        "ref/dotnet5.1/zh-hans/System.Reflection.xml",
+        "ref/dotnet5.1/zh-hant/System.Reflection.xml",
+        "ref/dotnet5.4/de/System.Reflection.xml",
+        "ref/dotnet5.4/es/System.Reflection.xml",
+        "ref/dotnet5.4/fr/System.Reflection.xml",
+        "ref/dotnet5.4/it/System.Reflection.xml",
+        "ref/dotnet5.4/ja/System.Reflection.xml",
+        "ref/dotnet5.4/ko/System.Reflection.xml",
+        "ref/dotnet5.4/ru/System.Reflection.xml",
+        "ref/dotnet5.4/System.Reflection.dll",
+        "ref/dotnet5.4/System.Reflection.xml",
+        "ref/dotnet5.4/zh-hans/System.Reflection.xml",
+        "ref/dotnet5.4/zh-hant/System.Reflection.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/net46/System.Reflection.dll",
+        "ref/netcore50/de/System.Reflection.xml",
+        "ref/netcore50/es/System.Reflection.xml",
+        "ref/netcore50/fr/System.Reflection.xml",
+        "ref/netcore50/it/System.Reflection.xml",
+        "ref/netcore50/ja/System.Reflection.xml",
+        "ref/netcore50/ko/System.Reflection.xml",
+        "ref/netcore50/ru/System.Reflection.xml",
+        "ref/netcore50/System.Reflection.dll",
+        "ref/netcore50/System.Reflection.xml",
+        "ref/netcore50/zh-hans/System.Reflection.xml",
+        "ref/netcore50/zh-hant/System.Reflection.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.dll",
+        "System.Reflection.4.1.0-beta-23516.nupkg",
+        "System.Reflection.4.1.0-beta-23516.nupkg.sha512",
+        "System.Reflection.nuspec"
+      ]
+    },
+    "System.Reflection.Extensions/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "dbYaZWCyFAu1TGYUqR2n+Q+1casSHPR2vVW0WVNkXpZbrd2BXcZ7cpvpu9C98CTHtNmyfMWCLpCclDqly23t6A==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Extensions.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Extensions.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Extensions.xml",
+        "ref/dotnet/es/System.Reflection.Extensions.xml",
+        "ref/dotnet/fr/System.Reflection.Extensions.xml",
+        "ref/dotnet/it/System.Reflection.Extensions.xml",
+        "ref/dotnet/ja/System.Reflection.Extensions.xml",
+        "ref/dotnet/ko/System.Reflection.Extensions.xml",
+        "ref/dotnet/ru/System.Reflection.Extensions.xml",
+        "ref/dotnet/System.Reflection.Extensions.dll",
+        "ref/dotnet/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Extensions.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Extensions.dll",
+        "ref/netcore50/System.Reflection.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Extensions.dll",
+        "System.Reflection.Extensions.4.0.0.nupkg",
+        "System.Reflection.Extensions.4.0.0.nupkg.sha512",
+        "System.Reflection.Extensions.nuspec"
+      ]
+    },
+    "System.Reflection.Primitives/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "n9S0XpKv2ruc17FSnaiX6nV47VfHTZ1wLjKZlAirUZCvDQCH71mVp+Ohabn0xXLh5pK2PKp45HCxkqu5Fxn/lA==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.Primitives.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Reflection.Primitives.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet/de/System.Reflection.Primitives.xml",
+        "ref/dotnet/es/System.Reflection.Primitives.xml",
+        "ref/dotnet/fr/System.Reflection.Primitives.xml",
+        "ref/dotnet/it/System.Reflection.Primitives.xml",
+        "ref/dotnet/ja/System.Reflection.Primitives.xml",
+        "ref/dotnet/ko/System.Reflection.Primitives.xml",
+        "ref/dotnet/ru/System.Reflection.Primitives.xml",
+        "ref/dotnet/System.Reflection.Primitives.dll",
+        "ref/dotnet/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hans/System.Reflection.Primitives.xml",
+        "ref/dotnet/zh-hant/System.Reflection.Primitives.xml",
+        "ref/net45/_._",
+        "ref/netcore50/System.Reflection.Primitives.dll",
+        "ref/netcore50/System.Reflection.Primitives.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.Primitives.dll",
+        "System.Reflection.Primitives.4.0.0.nupkg",
+        "System.Reflection.Primitives.4.0.0.nupkg.sha512",
+        "System.Reflection.Primitives.nuspec"
+      ]
+    },
+    "System.Reflection.TypeExtensions/4.1.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "vA+eepDQ8ZFRodTHc+w8nBTkUqD+rEgirRR38tW6Z/uCDTzBPHGg6TqhqBhmY4wdWsT8/7fjwFPb7/dxldQW7g==",
+      "files": [
+        "lib/DNXCore50/System.Reflection.TypeExtensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Reflection.TypeExtensions.dll",
+        "lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/es/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/fr/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/it/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ja/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ko/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/ru/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/System.Reflection.TypeExtensions.dll",
+        "ref/dotnet5.1/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/zh-hans/System.Reflection.TypeExtensions.xml",
+        "ref/dotnet5.1/zh-hant/System.Reflection.TypeExtensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Reflection.TypeExtensions.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Reflection.TypeExtensions.dll",
+        "System.Reflection.TypeExtensions.4.1.0-beta-23516.nupkg",
+        "System.Reflection.TypeExtensions.4.1.0-beta-23516.nupkg.sha512",
+        "System.Reflection.TypeExtensions.nuspec"
+      ]
+    },
+    "System.Resources.ResourceManager/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "d1PiB1k57GP5EJZJKnJ+LgrOQCgHPnn5oySQAy4pL2MpEDDpTyTPKv+q9aRWUA25ICXaHkWJzeTkj898ePteWQ==",
+      "files": [
+        "lib/DNXCore50/System.Resources.ResourceManager.dll",
+        "lib/net45/_._",
+        "lib/netcore50/System.Resources.ResourceManager.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "ref/dotnet5.1/de/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/es/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/fr/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/it/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ja/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ko/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/ru/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/System.Resources.ResourceManager.dll",
+        "ref/dotnet5.1/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/dotnet5.1/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Resources.ResourceManager.xml",
+        "ref/netcore50/es/System.Resources.ResourceManager.xml",
+        "ref/netcore50/fr/System.Resources.ResourceManager.xml",
+        "ref/netcore50/it/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ja/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ko/System.Resources.ResourceManager.xml",
+        "ref/netcore50/ru/System.Resources.ResourceManager.xml",
+        "ref/netcore50/System.Resources.ResourceManager.dll",
+        "ref/netcore50/System.Resources.ResourceManager.xml",
+        "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml",
+        "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Resources.ResourceManager.dll",
+        "System.Resources.ResourceManager.4.0.1-beta-23516.nupkg",
+        "System.Resources.ResourceManager.4.0.1-beta-23516.nupkg.sha512",
+        "System.Resources.ResourceManager.nuspec"
+      ]
+    },
+    "System.Runtime/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "R174ctQjJnCIVxA2Yzp1v68wfLfPSROZWrbaSBcnEzHAQbOjprBQi37aWdr5y05Pq2J/O7h6SjTsYhVOLdiRYQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.xml",
+        "ref/dotnet5.1/es/System.Runtime.xml",
+        "ref/dotnet5.1/fr/System.Runtime.xml",
+        "ref/dotnet5.1/it/System.Runtime.xml",
+        "ref/dotnet5.1/ja/System.Runtime.xml",
+        "ref/dotnet5.1/ko/System.Runtime.xml",
+        "ref/dotnet5.1/ru/System.Runtime.xml",
+        "ref/dotnet5.1/System.Runtime.dll",
+        "ref/dotnet5.1/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.3/de/System.Runtime.xml",
+        "ref/dotnet5.3/es/System.Runtime.xml",
+        "ref/dotnet5.3/fr/System.Runtime.xml",
+        "ref/dotnet5.3/it/System.Runtime.xml",
+        "ref/dotnet5.3/ja/System.Runtime.xml",
+        "ref/dotnet5.3/ko/System.Runtime.xml",
+        "ref/dotnet5.3/ru/System.Runtime.xml",
+        "ref/dotnet5.3/System.Runtime.dll",
+        "ref/dotnet5.3/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.xml",
+        "ref/dotnet5.4/de/System.Runtime.xml",
+        "ref/dotnet5.4/es/System.Runtime.xml",
+        "ref/dotnet5.4/fr/System.Runtime.xml",
+        "ref/dotnet5.4/it/System.Runtime.xml",
+        "ref/dotnet5.4/ja/System.Runtime.xml",
+        "ref/dotnet5.4/ko/System.Runtime.xml",
+        "ref/dotnet5.4/ru/System.Runtime.xml",
+        "ref/dotnet5.4/System.Runtime.dll",
+        "ref/dotnet5.4/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.xml",
+        "ref/netcore50/es/System.Runtime.xml",
+        "ref/netcore50/fr/System.Runtime.xml",
+        "ref/netcore50/it/System.Runtime.xml",
+        "ref/netcore50/ja/System.Runtime.xml",
+        "ref/netcore50/ko/System.Runtime.xml",
+        "ref/netcore50/ru/System.Runtime.xml",
+        "ref/netcore50/System.Runtime.dll",
+        "ref/netcore50/System.Runtime.xml",
+        "ref/netcore50/zh-hans/System.Runtime.xml",
+        "ref/netcore50/zh-hant/System.Runtime.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.dll",
+        "System.Runtime.4.0.21-beta-23516.nupkg",
+        "System.Runtime.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.nuspec"
+      ]
+    },
+    "System.Runtime.Extensions/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "HX4wNPrcCV9D+jpbsJCRPuVJbcDM+JobSotQWKq40lCq0WJbJi+0lNQ/T1zHEdWcf4W2PmtMkug1rW7yKW9PiQ==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/es/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/it/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/System.Runtime.Extensions.dll",
+        "ref/dotnet5.1/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet5.1/zh-hant/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/de/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/es/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/fr/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/it/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ja/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ko/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/ru/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/System.Runtime.Extensions.dll",
+        "ref/dotnet5.4/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.Extensions.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.Extensions.xml",
+        "ref/netcore50/es/System.Runtime.Extensions.xml",
+        "ref/netcore50/fr/System.Runtime.Extensions.xml",
+        "ref/netcore50/it/System.Runtime.Extensions.xml",
+        "ref/netcore50/ja/System.Runtime.Extensions.xml",
+        "ref/netcore50/ko/System.Runtime.Extensions.xml",
+        "ref/netcore50/ru/System.Runtime.Extensions.xml",
+        "ref/netcore50/System.Runtime.Extensions.dll",
+        "ref/netcore50/System.Runtime.Extensions.xml",
+        "ref/netcore50/zh-hans/System.Runtime.Extensions.xml",
+        "ref/netcore50/zh-hant/System.Runtime.Extensions.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Runtime.Extensions.4.0.11-beta-23516.nupkg",
+        "System.Runtime.Extensions.4.0.11-beta-23516.nupkg.sha512",
+        "System.Runtime.Extensions.nuspec"
+      ]
+    },
+    "System.Runtime.Handles/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "QD37drGPHLLPSf8iZx4wyUx7niFU3D8U79GQ56CkRW4qZJ1qSAmZU9AqLuBdLoQWLRmniy9panML6bly4ob6qw==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.Handles.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Runtime.Handles.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.4/de/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/es/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/fr/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/it/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ja/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ko/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/ru/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/System.Runtime.Handles.dll",
+        "ref/dotnet5.4/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.Handles.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.Handles.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.Handles.dll",
+        "System.Runtime.Handles.4.0.1-beta-23516.nupkg",
+        "System.Runtime.Handles.4.0.1-beta-23516.nupkg.sha512",
+        "System.Runtime.Handles.nuspec"
+      ]
+    },
+    "System.Runtime.InteropServices/4.0.21-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "XRWX4yFPKQ3t3hbPReLB9d2ViTuGqMLYHGcuWteIYgoIaKtHp7Uae2xHjiUG/QZbVN6vUp+KnL04aIi5dOj8lQ==",
+      "files": [
+        "lib/DNXCore50/System.Runtime.InteropServices.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Runtime.InteropServices.dll",
+        "lib/win8/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.2/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.2/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.2/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.3/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.3/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/de/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/es/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/fr/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/it/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ja/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ko/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/ru/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/System.Runtime.InteropServices.dll",
+        "ref/dotnet5.4/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/dotnet5.4/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Runtime.InteropServices.xml",
+        "ref/netcore50/es/System.Runtime.InteropServices.xml",
+        "ref/netcore50/fr/System.Runtime.InteropServices.xml",
+        "ref/netcore50/it/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ja/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ko/System.Runtime.InteropServices.xml",
+        "ref/netcore50/ru/System.Runtime.InteropServices.xml",
+        "ref/netcore50/System.Runtime.InteropServices.dll",
+        "ref/netcore50/System.Runtime.InteropServices.xml",
+        "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml",
+        "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml",
+        "ref/win8/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Runtime.InteropServices.dll",
+        "System.Runtime.InteropServices.4.0.21-beta-23516.nupkg",
+        "System.Runtime.InteropServices.4.0.21-beta-23516.nupkg.sha512",
+        "System.Runtime.InteropServices.nuspec"
+      ]
+    },
+    "System.Text.Encoding/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "gk4da/Y3VReZpIeQ3UDTCknbkO/FuYKOJtP+5+Vtc07mTcPHvhgbZLXEGTTneP6yWPDWTTh20nZZMF/19YsRtA==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Text.Encoding.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Text.Encoding.xml",
+        "ref/dotnet5.1/es/System.Text.Encoding.xml",
+        "ref/dotnet5.1/fr/System.Text.Encoding.xml",
+        "ref/dotnet5.1/it/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ja/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ko/System.Text.Encoding.xml",
+        "ref/dotnet5.1/ru/System.Text.Encoding.xml",
+        "ref/dotnet5.1/System.Text.Encoding.dll",
+        "ref/dotnet5.1/System.Text.Encoding.xml",
+        "ref/dotnet5.1/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet5.1/zh-hant/System.Text.Encoding.xml",
+        "ref/dotnet5.4/de/System.Text.Encoding.xml",
+        "ref/dotnet5.4/es/System.Text.Encoding.xml",
+        "ref/dotnet5.4/fr/System.Text.Encoding.xml",
+        "ref/dotnet5.4/it/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ja/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ko/System.Text.Encoding.xml",
+        "ref/dotnet5.4/ru/System.Text.Encoding.xml",
+        "ref/dotnet5.4/System.Text.Encoding.dll",
+        "ref/dotnet5.4/System.Text.Encoding.xml",
+        "ref/dotnet5.4/zh-hans/System.Text.Encoding.xml",
+        "ref/dotnet5.4/zh-hant/System.Text.Encoding.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Text.Encoding.xml",
+        "ref/netcore50/es/System.Text.Encoding.xml",
+        "ref/netcore50/fr/System.Text.Encoding.xml",
+        "ref/netcore50/it/System.Text.Encoding.xml",
+        "ref/netcore50/ja/System.Text.Encoding.xml",
+        "ref/netcore50/ko/System.Text.Encoding.xml",
+        "ref/netcore50/ru/System.Text.Encoding.xml",
+        "ref/netcore50/System.Text.Encoding.dll",
+        "ref/netcore50/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hans/System.Text.Encoding.xml",
+        "ref/netcore50/zh-hant/System.Text.Encoding.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.dll",
+        "System.Text.Encoding.4.0.11-beta-23516.nupkg",
+        "System.Text.Encoding.4.0.11-beta-23516.nupkg.sha512",
+        "System.Text.Encoding.nuspec"
+      ]
+    },
+    "System.Text.Encoding.Extensions/4.0.10": {
+      "type": "package",
+      "sha512": "TZvlwXMxKo3bSRIcsWZLCIzIhLbvlz+mGeKYRZv/zUiSoQzGOwkYeBu6hOw2XPQgKqT0F4Rv8zqKdvmp2fWKYg==",
+      "files": [
+        "lib/DNXCore50/System.Text.Encoding.Extensions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/es/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/fr/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/it/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ja/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ko/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/ru/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/System.Text.Encoding.Extensions.dll",
+        "ref/dotnet/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hans/System.Text.Encoding.Extensions.xml",
+        "ref/dotnet/zh-hant/System.Text.Encoding.Extensions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Text.Encoding.Extensions.dll",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg",
+        "System.Text.Encoding.Extensions.4.0.10.nupkg.sha512",
+        "System.Text.Encoding.Extensions.nuspec"
+      ]
+    },
+    "System.Text.RegularExpressions/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "0vDuHXJePpfMCecWBNOabOKCvzfTbFMNcGgklt3l5+RqHV5SzmF7RUVpuet8V0rJX30ROlL66xdehw2Rdsn2DA==",
+      "files": [
+        "lib/dotnet/System.Text.RegularExpressions.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Text.RegularExpressions.xml",
+        "ref/dotnet/es/System.Text.RegularExpressions.xml",
+        "ref/dotnet/fr/System.Text.RegularExpressions.xml",
+        "ref/dotnet/it/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ja/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ko/System.Text.RegularExpressions.xml",
+        "ref/dotnet/ru/System.Text.RegularExpressions.xml",
+        "ref/dotnet/System.Text.RegularExpressions.dll",
+        "ref/dotnet/System.Text.RegularExpressions.xml",
+        "ref/dotnet/zh-hans/System.Text.RegularExpressions.xml",
+        "ref/dotnet/zh-hant/System.Text.RegularExpressions.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Text.RegularExpressions.4.0.10.nupkg",
+        "System.Text.RegularExpressions.4.0.10.nupkg.sha512",
+        "System.Text.RegularExpressions.nuspec"
+      ]
+    },
+    "System.Threading/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "AiuvOzOo6CZpIIw3yGJZcs3IhiCZcy0P/ThubazmWExERHJZoOnD/jB+Bn2gxTAD0rc/ytrRdBur9PuX6DvvvA==",
+      "files": [
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.xml",
+        "ref/dotnet5.1/es/System.Threading.xml",
+        "ref/dotnet5.1/fr/System.Threading.xml",
+        "ref/dotnet5.1/it/System.Threading.xml",
+        "ref/dotnet5.1/ja/System.Threading.xml",
+        "ref/dotnet5.1/ko/System.Threading.xml",
+        "ref/dotnet5.1/ru/System.Threading.xml",
+        "ref/dotnet5.1/System.Threading.dll",
+        "ref/dotnet5.1/System.Threading.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.xml",
+        "ref/dotnet5.4/de/System.Threading.xml",
+        "ref/dotnet5.4/es/System.Threading.xml",
+        "ref/dotnet5.4/fr/System.Threading.xml",
+        "ref/dotnet5.4/it/System.Threading.xml",
+        "ref/dotnet5.4/ja/System.Threading.xml",
+        "ref/dotnet5.4/ko/System.Threading.xml",
+        "ref/dotnet5.4/ru/System.Threading.xml",
+        "ref/dotnet5.4/System.Threading.dll",
+        "ref/dotnet5.4/System.Threading.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.xml",
+        "ref/netcore50/es/System.Threading.xml",
+        "ref/netcore50/fr/System.Threading.xml",
+        "ref/netcore50/it/System.Threading.xml",
+        "ref/netcore50/ja/System.Threading.xml",
+        "ref/netcore50/ko/System.Threading.xml",
+        "ref/netcore50/ru/System.Threading.xml",
+        "ref/netcore50/System.Threading.dll",
+        "ref/netcore50/System.Threading.xml",
+        "ref/netcore50/zh-hans/System.Threading.xml",
+        "ref/netcore50/zh-hant/System.Threading.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtime.json",
+        "System.Threading.4.0.11-beta-23516.nupkg",
+        "System.Threading.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.nuspec"
+      ]
+    },
+    "System.Threading.Overlapped/4.0.0": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "X5LuQFhM5FTqaez3eXKJ9CbfSGZ7wj6j4hSVtxct3zmwQXLqG95qoWdvILcgN7xtrDOBIFtpiyDg0vmoI0jE2A==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Overlapped.dll",
+        "lib/net46/System.Threading.Overlapped.dll",
+        "lib/netcore50/System.Threading.Overlapped.dll",
+        "ref/dotnet/de/System.Threading.Overlapped.xml",
+        "ref/dotnet/es/System.Threading.Overlapped.xml",
+        "ref/dotnet/fr/System.Threading.Overlapped.xml",
+        "ref/dotnet/it/System.Threading.Overlapped.xml",
+        "ref/dotnet/ja/System.Threading.Overlapped.xml",
+        "ref/dotnet/ko/System.Threading.Overlapped.xml",
+        "ref/dotnet/ru/System.Threading.Overlapped.xml",
+        "ref/dotnet/System.Threading.Overlapped.dll",
+        "ref/dotnet/System.Threading.Overlapped.xml",
+        "ref/dotnet/zh-hans/System.Threading.Overlapped.xml",
+        "ref/dotnet/zh-hant/System.Threading.Overlapped.xml",
+        "ref/net46/System.Threading.Overlapped.dll",
+        "System.Threading.Overlapped.4.0.0.nupkg",
+        "System.Threading.Overlapped.4.0.0.nupkg.sha512",
+        "System.Threading.Overlapped.nuspec"
+      ]
+    },
+    "System.Threading.Tasks/4.0.11-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "xjN0l+GsHEdV3G2lKF7DnH7kEM2OXoWq56jcvByNaiirrs1om5RyI6gwX7F4rTbkf8eZk1pjg01l4CI3nLyTKg==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Tasks.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net45/_._",
+        "lib/netcore50/System.Threading.Tasks.dll",
+        "lib/win8/_._",
+        "lib/wp80/_._",
+        "lib/wpa81/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/es/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/fr/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/it/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ja/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ko/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/ru/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/System.Threading.Tasks.dll",
+        "ref/dotnet5.1/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/de/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/es/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/fr/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/it/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ja/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ko/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/ru/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/System.Threading.Tasks.dll",
+        "ref/dotnet5.4/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/zh-hans/System.Threading.Tasks.xml",
+        "ref/dotnet5.4/zh-hant/System.Threading.Tasks.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/_._",
+        "ref/netcore50/de/System.Threading.Tasks.xml",
+        "ref/netcore50/es/System.Threading.Tasks.xml",
+        "ref/netcore50/fr/System.Threading.Tasks.xml",
+        "ref/netcore50/it/System.Threading.Tasks.xml",
+        "ref/netcore50/ja/System.Threading.Tasks.xml",
+        "ref/netcore50/ko/System.Threading.Tasks.xml",
+        "ref/netcore50/ru/System.Threading.Tasks.xml",
+        "ref/netcore50/System.Threading.Tasks.dll",
+        "ref/netcore50/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
+        "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
+        "ref/win8/_._",
+        "ref/wp80/_._",
+        "ref/wpa81/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "runtimes/win8-aot/lib/netcore50/System.Threading.Tasks.dll",
+        "System.Threading.Tasks.4.0.11-beta-23516.nupkg",
+        "System.Threading.Tasks.4.0.11-beta-23516.nupkg.sha512",
+        "System.Threading.Tasks.nuspec"
+      ]
+    },
+    "System.Threading.Thread/4.0.0-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "2a5k/EmBXNiIoQZ8hk32KjoCVs1E5OdQtqJCHcW4qThmk+m/siQgB7zYamlRBeQ5zJs7c1l4oN/y5+YRq8oQ2Q==",
+      "files": [
+        "lib/DNXCore50/System.Threading.Thread.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Threading.Thread.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Threading.Thread.xml",
+        "ref/dotnet5.1/es/System.Threading.Thread.xml",
+        "ref/dotnet5.1/fr/System.Threading.Thread.xml",
+        "ref/dotnet5.1/it/System.Threading.Thread.xml",
+        "ref/dotnet5.1/ja/System.Threading.Thread.xml",
+        "ref/dotnet5.1/ko/System.Threading.Thread.xml",
+        "ref/dotnet5.1/ru/System.Threading.Thread.xml",
+        "ref/dotnet5.1/System.Threading.Thread.dll",
+        "ref/dotnet5.1/System.Threading.Thread.xml",
+        "ref/dotnet5.1/zh-hans/System.Threading.Thread.xml",
+        "ref/dotnet5.1/zh-hant/System.Threading.Thread.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Threading.Thread.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Threading.Thread.4.0.0-beta-23516.nupkg",
+        "System.Threading.Thread.4.0.0-beta-23516.nupkg.sha512",
+        "System.Threading.Thread.nuspec"
+      ]
+    },
+    "System.Xml.ReaderWriter/4.0.10": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "VdmWWMH7otrYV7D+cviUo7XjX0jzDnD/lTGSZTlZqfIQ5PhXk85j+6P0TK9od3PnOd5ZIM+pOk01G/J+3nh9/w==",
+      "files": [
+        "lib/dotnet/System.Xml.ReaderWriter.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet/de/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/es/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/fr/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/it/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ja/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ko/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/ru/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/System.Xml.ReaderWriter.dll",
+        "ref/dotnet/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/zh-hans/System.Xml.ReaderWriter.xml",
+        "ref/dotnet/zh-hant/System.Xml.ReaderWriter.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Xml.ReaderWriter.4.0.10.nupkg",
+        "System.Xml.ReaderWriter.4.0.10.nupkg.sha512",
+        "System.Xml.ReaderWriter.nuspec"
+      ]
+    },
+    "System.Xml.XmlDocument/4.0.1-beta-23516": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "Al+MOyRvCL9SlJYzInF9cH9Sxlf4eBLtD1AadyZVaRqhmcTYDst/AEf6GerqQ4hHfrGmeCflfxWPc2BYBJ2nug==",
+      "files": [
+        "lib/dotnet5.4/System.Xml.XmlDocument.dll",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Xml.XmlDocument.dll",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "ref/dotnet5.1/de/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/es/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/fr/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/it/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ja/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ko/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/ru/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/System.Xml.XmlDocument.dll",
+        "ref/dotnet5.1/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/zh-hans/System.Xml.XmlDocument.xml",
+        "ref/dotnet5.1/zh-hant/System.Xml.XmlDocument.xml",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net46/System.Xml.XmlDocument.dll",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "System.Xml.XmlDocument.4.0.1-beta-23516.nupkg",
+        "System.Xml.XmlDocument.4.0.1-beta-23516.nupkg.sha512",
+        "System.Xml.XmlDocument.nuspec"
+      ]
+    }
+  },
+  "projectFileDependencyGroups": {
+    "": [
+      "TestCommon >= 1.0.0-*",
+      "TestMapGuideApi >= 1.0.0-*"
+    ],
+    "DNXCore,Version=v5.0": [
+      "Microsoft.CSharp >= 4.0.1-beta-23516",
+      "System.Collections >= 4.0.11-beta-23516",
+      "System.Console >= 4.0.0-beta-23516",
+      "System.Linq >= 4.0.1-beta-23516",
+      "System.Threading >= 4.0.11-beta-23516",
+      "System.Runtime.Extensions >= 4.0.11-beta-23516",
+      "MapGuideDotNetCoreApi >= 3.1.0"
+    ]
+  }
+}
\ No newline at end of file


Property changes on: sandbox/jng/aspnet50/UnitTest/WebTier/DotNet
___________________________________________________________________
Modified: svn:ignore
   - Libs
*.suo
build.log

   + Libs
*.suo
build.log
.vs


Deleted: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/DnxCoreShims.cs
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/DnxCoreShims.cs	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/DnxCoreShims.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -1,28 +0,0 @@
-//
-//  Copyright (C) 2004-2015 by Autodesk, Inc.
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of version 2.1 of the GNU Lesser
-//  General Public License as published by the Free Software Foundation.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-//
-
-namespace System
-{
-    #if DOTNET5_4 || DNXCORE50
-    public class SystemException : Exception
-    {
-        public SystemException() : base() { }
-        
-        public SystemException(string message) : base() { }
-    }
-    #endif
-}
\ No newline at end of file

Deleted: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/EntryPoint.cs
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/EntryPoint.cs	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/EntryPoint.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -1,43 +0,0 @@
-//
-//  Copyright (C) 2004-2015 by Autodesk, Inc.
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of version 2.1 of the GNU Lesser
-//  General Public License as published by the Free Software Foundation.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-//
-using System;
-using System.IO;
-using System.Reflection;
-
-namespace OSGeo.MapGuide
-{
-    /// <summary>
-    /// This is the entry point of the MapGuide API
-    /// </summary>
-    public class MapGuideApi
-    {
-        static MapGuideApi()
-        {
-            
-        }
-        
-        /// <summary>
-        /// Initializes the MapGuide Web Tier APIs. You must call this method before using any other class or method
-        /// in the MapGuide API
-        /// </summary>
-        /// <param name="configFile">The path to the web tier configuration file</param>
-        /// <remarks>Subsequent calls do nothing and return immediately</remarks>
-        public static void MgInitializeWebTier(string configFile) {
-            MapGuideDotNetCoreUnmanagedApiPINVOKE.MgInitializeWebTier(configFile);
-        }
-    }
-}
\ No newline at end of file

Deleted: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/ManagedException.cs
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/ManagedException.cs	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/ManagedException.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -1,90 +0,0 @@
-//
-//  Copyright (C) 2004-2011 by Autodesk, Inc.
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of version 2.1 of the GNU Lesser
-//  General Public License as published by the Free Software Foundation.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-//
-
-using System;
-
-namespace OSGeo.MapGuide
-{
-    /// <summary>
-    /// ManagedException is the exception class from which the root of unmanaged exception derive
-    /// This class, deriving from .NET Exception, allows to use the most common properties of
-    /// the Exception class on exceptions wrapping unmanaged MgException classes. The implementation
-    /// of these properties relies on the equivalent MgException methods.
-    ///
-    /// Although this class does not wrap any unmanaged class, it still holds a C++ pointer to
-    /// the MgException that derives from it.
-    /// </summary>
-    public class ManagedException : Exception
-    {
-        private bool mIsWrapper;
-        private string mMessage;
-        private string mStackTrace;
-
-        public ManagedException()
-        {
-            mIsWrapper = true;
-            mMessage = string.Empty;
-            mStackTrace = string.Empty;
-        }
-
-        public override string Message
-        {
-            get
-            {
-                return mIsWrapper ? ((MgException)this).GetExceptionMessage() : mMessage;
-            }
-        }
-
-        public override string StackTrace
-        {
-            get
-            {
-                if (mIsWrapper)
-                {
-                    //Some cosmetic cleaning of the C++ stack trace to better line up with the .net one
-                    string[] mgStackTrace = ((MgException)this).GetStackTrace().Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
-                    //This currently looks like the following if we re-join:
-                    //
-                    // at- <stack frame>
-                    // at- <stack frame>
-                    // at- <stack frame>
-                    //
-                    //The "-" being a leftover, so replace "at-" with "at" as well after re-joining.
-                    //The reason we don't blindly replace "-" in the C++ stack is because we don't want to scramble any physical path
-                    //that would also contain a "-"
-                    string sanitizedStack = ("   at" + string.Join(Environment.NewLine + "   at", mgStackTrace)).Replace("at-", "at");
-                    return string.Format("{0}{1}   ==== [C++ <-> .net] ===={1}{2}", sanitizedStack, Environment.NewLine, base.StackTrace);
-                }
-                else
-                {
-                    return mStackTrace;
-                }
-            }
-        }
-
-        public override string ToString()
-        {
-            string className = this.GetType().ToString();
-            return string.Format("{0}: {1}{2}{3}", className, this.Message, Environment.NewLine, this.StackTrace);
-        }
-
-        public virtual void Dispose()
-        {
-            //implemented by derived classes
-        }
-    }
-}

Deleted: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgColor
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgColor	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgColor	2015-12-03 15:13:52 UTC (rev 8848)
@@ -1,17 +0,0 @@
-
-  public MgColor(System.Drawing.Color color)
-  :this(color.R, color.G, color.B, color.A)
-  {
-  }
-
-  public static implicit operator MgColor(System.Drawing.Color color)
-  {
-    MgColor newColor = new MgColor(color.R, color.G, color.B, color.A);
-    return newColor;
-  }
-
-  public static implicit operator System.Drawing.Color(MgColor color)
-  {
-    return System.Drawing.Color.FromArgb(color.GetAlpha(), color.GetRed(), color.GetGreen(), color.GetBlue());
-  }  
-

Added: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgMapPlotCollection
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgMapPlotCollection	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgMapPlotCollection	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,86 @@
+INTERFACE System.Collections.Generic.IList<MgMapPlot>
+
+public class MgMapPlotCollectionEnumerator : IDisposable, System.Collections.Generic.IEnumerator<MgMapPlot>
+{
+  public MgMapPlotCollectionEnumerator(MgMapPlotCollection coll)
+  {
+    m_coll = coll;
+    m_pos = -1;
+  }
+
+  public MgMapPlot Current
+  {
+    get
+    {
+      return m_coll.GetItem(m_pos);
+    }
+  }
+
+  Object System.Collections.IEnumerator.Current
+  {
+    get
+    {
+      return m_coll.GetItem(m_pos);
+    }
+  }
+
+  public bool MoveNext()
+  {
+    bool bOk = false;
+    if (m_pos < m_coll.GetCount()-1)
+    {
+      m_pos++;
+      bOk = true;
+    }
+  return bOk;
+  }
+
+  public void Reset()
+  {
+    m_pos = -1;
+  }
+
+  public void Dispose()
+  {
+    m_coll = null;
+  }
+
+  private MgMapPlotCollection m_coll;
+  private int m_pos;
+
+}
+
+public System.Collections.Generic.IEnumerator<MgMapPlot> GetEnumerator()
+{
+  return new MgMapPlotCollectionEnumerator(this);
+}
+
+System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+{
+  return new MgMapPlotCollectionEnumerator(this);
+}
+
+public int Count
+{  
+  get { return GetCount(); }
+}
+
+public bool IsReadOnly
+{
+  get { return false; }
+}
+
+public void CopyTo(MgMapPlot[] array, int arrayIndex)
+{
+  for (int i=0; i<GetCount(); i++)
+  {
+    array[arrayIndex+i] = GetItem(i);
+  }
+}
+
+public MgMapPlot this[int index]
+{
+   get { return GetItem(index); }
+   set { SetItem(index, value); }
+}
+

Added: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgPropertyCollection
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgPropertyCollection	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgPropertyCollection	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,86 @@
+INTERFACE System.Collections.Generic.IList<MgProperty>
+
+public class MgPropertyCollectionEnumerator : IDisposable, System.Collections.Generic.IEnumerator<MgProperty>
+{
+  public MgPropertyCollectionEnumerator(MgPropertyCollection coll)
+  {
+    m_coll = coll;
+    m_pos = -1;
+  }
+
+  public MgProperty Current
+  {
+    get
+    {
+      return m_coll.GetItem(m_pos);
+    }
+  }
+
+  Object System.Collections.IEnumerator.Current
+  {
+    get
+    {
+      return m_coll.GetItem(m_pos);
+    }
+  }
+
+  public bool MoveNext()
+  {
+    bool bOk = false;
+    if (m_pos < m_coll.GetCount()-1)
+    {
+      m_pos++;
+      bOk = true;
+    }
+  return bOk;
+  }
+
+  public void Reset()
+  {
+    m_pos = -1;
+  }
+
+  public void Dispose()
+  {
+    m_coll = null;
+  }
+
+  private MgPropertyCollection m_coll;
+  private int m_pos;
+
+}
+
+public System.Collections.Generic.IEnumerator<MgProperty> GetEnumerator()
+{
+  return new MgPropertyCollectionEnumerator(this);
+}
+
+System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+{
+  return new MgPropertyCollectionEnumerator(this);
+}
+
+public int Count
+{  
+  get { return GetCount(); }
+}
+
+public bool IsReadOnly
+{
+  get { return false; }
+}
+
+public void CopyTo(MgProperty[] array, int arrayIndex)
+{
+  for (int i=0; i<GetCount(); i++)
+  {
+    array[arrayIndex+i] = GetItem(i);
+  }
+}
+
+public MgProperty this[int index]
+{
+   get { return GetItem(index); }
+   set { SetItem(index, value); }
+}
+

Added: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgStringCollection
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgStringCollection	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/MgStringCollection	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,94 @@
+INTERFACE System.Collections.Generic.IList<String>
+
+public class MgStringCollectionEnumerator : IDisposable, System.Collections.Generic.IEnumerator<String>
+{
+  public MgStringCollectionEnumerator(MgStringCollection coll)
+  {
+    m_coll = coll;
+    m_pos = -1;
+  }
+
+  public String Current
+  {
+    get
+    {
+      return m_coll.GetItem(m_pos);
+    }
+  }
+
+  Object System.Collections.IEnumerator.Current
+  {
+    get
+    {
+      return m_coll.GetItem(m_pos);
+    }
+  }
+
+  public bool MoveNext()
+  {
+    bool bOk = false;
+    if (m_pos < m_coll.GetCount()-1)
+    {
+      m_pos++;
+      bOk = true;
+    }
+  return bOk;
+  }
+
+  public void Reset()
+  {
+    m_pos = -1;
+  }
+
+  public void Dispose()
+  {
+    m_coll = null;
+  }
+
+  private MgStringCollection m_coll;
+  private int m_pos;
+
+}
+
+  public MgStringCollection(System.Collections.Generic.IEnumerable<String> collection)
+  : this(MapGuideDotNetCoreUnmanagedApiPINVOKE.new_MgStringCollection(), true)
+  {
+    foreach (String str in collection)
+    {
+        Add(str);
+    }
+  }
+
+    public System.Collections.Generic.IEnumerator<String> GetEnumerator()
+    {
+      return new MgStringCollectionEnumerator(this);
+    }
+
+    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+    {
+      return new MgStringCollectionEnumerator(this);
+    }
+
+    public int Count
+    {  
+      get { return GetCount(); }
+    }
+
+    public bool IsReadOnly
+    {
+      get { return false; }
+    }
+
+    public void CopyTo(String[] array, int arrayIndex)
+    {
+      for (int i=0; i<GetCount(); i++)
+      {
+        array[arrayIndex+i] = GetItem(i);
+      }
+    }
+
+    public String this[int index]
+    {
+       get { return GetItem(index); }
+       set { SetItem(index, value); }
+    }

Modified: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/DotNetCoreApi.vcxproj
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/DotNetCoreApi.vcxproj	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/DotNetCoreApi.vcxproj	2015-12-03 15:13:52 UTC (rev 8848)
@@ -94,11 +94,11 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <PreBuildEvent>
       <Command>del /Q .\Custom\*prop
-del /Q *.cs
-..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./Constants.cs
+del /Q .\wrapper\*.cs
+..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./wrapper/Constants.cs
 copy .\dotnetcore.i .\language.i
 ..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\MapGuideApiGen.xml C#
-..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApid -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
+..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApid -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -outdir .\wrapper -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
 del /Q MapGuideDotNetCoreUnmanagedApi.cs
 </Command>
     </PreBuildEvent>
@@ -130,11 +130,11 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <PreBuildEvent>
       <Command>del /Q .\Custom\*prop
-del /Q *.cs
-..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./Constants.cs
+del /Q .\wrapper\*.cs
+..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./wrapper/Constants.cs
 copy .\dotnetcore.i .\language.i
 ..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\MapGuideApiGen.xml C#
-..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApid -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
+..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApid -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -outdir .\wrapper -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
 del /Q MapGuideDotNetCoreUnmanagedApi.cs
 </Command>
     </PreBuildEvent>
@@ -166,11 +166,11 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <PreBuildEvent>
       <Command>del /Q .\Custom\*prop
-del /Q *.cs
-..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./Constants.cs
+del /Q .\wrapper\*.cs
+..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./wrapper/Constants.cs
 copy .\dotnetcore.i .\language.i
 ..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\MapGuideApiGen.xml C#
-..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApi -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
+..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApi -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -outdir .\wrapper -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
 del /Q MapGuideDotNetCoreUnmanagedApi.cs
 </Command>
     </PreBuildEvent>
@@ -203,11 +203,11 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <PreBuildEvent>
       <Command>del /Q .\Custom\*prop
-del /Q *.cs
-..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./Constants.cs
+del /Q .\wrapper\*.cs
+..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\Constants.xml C# ./wrapper/Constants.cs
 copy .\dotnetcore.i .\language.i
 ..\..\..\BuildTools\WebTools\IMake\Win32\IMake.exe ..\MapGuideApi\MapGuideApiGen.xml C#
-..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApi -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
+..\..\..\Oem\SwigEx\Win32\swig -c++ -csharp -DDOTNETCORE -DWIN32 -dllname MapGuideDotNetCoreUnmanagedApi -namespace OSGeo.MapGuide -proxydir .\Custom -baseexception MgException -clsidcode getclassid.code -clsiddata m_cls_id -catchallcode catchall.code -dispose "((MgDisposable*)arg1)->Release()" -rethrow "e->Raise()%3b" -nodefault -noconstants -module MapGuideDotNetCoreUnmanagedApi -o MgApi_wrap.cpp -outdir .\wrapper -lib ..\..\..\Oem\SWIGEx\Lib MapGuideApi.i
 del /Q MapGuideDotNetCoreUnmanagedApi.cs
 </Command>
     </PreBuildEvent>

Deleted: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/project.json
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/project.json	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/project.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -1,40 +0,0 @@
-{
-  "version": "3.1.0-*",
-  "description": "MapGuide API for .net Core",
-  "authors": [ "OSGeo" ],
-  "tags": [ "MapGuide" ],
-  "projectUrl": "http://mapguide.osgeo.org",
-  "licenseUrl": "",
-  "configurations": {
-    "Debug": {
-      "compilationOptions": {
-        "define": ["DEBUG", "TRACE"]
-      }
-    },
-    "Release": {
-      "compilationOptions": {
-        "define": ["RELEASE", "TRACE"],
-        "optimize": true
-      }
-    }
-  },
-  "frameworks": {
-    "dnxcore50": {
-      "dependencies": {
-        "Microsoft.CSharp": "4.0.1-beta-23409",
-        "System.Collections": "4.0.11-beta-23409",
-        "System.Linq": "4.0.1-beta-23409",
-        "System.Runtime": "4.0.21-beta-23409",
-        "System.Threading": "4.0.11-beta-23409",
-        "System.Runtime.Extensions": "4.0.11-beta-23409",
-        "System.Runtime.InteropServices": "4.0.21-beta-23409"
-      }
-    }
-  },
-  "sources": {
-    "compile": ["*.cs", "Custom/*.cs"]
-  },
-  "packInclude": {
-    "runtimes/": "runtimes/**"
-  }
-}
\ No newline at end of file

Copied: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/DnxCoreShims.cs (from rev 8846, sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/DnxCoreShims.cs)
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/DnxCoreShims.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/DnxCoreShims.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,28 @@
+//
+//  Copyright (C) 2004-2015 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+namespace System
+{
+    #if DOTNET5_4 || DNXCORE50
+    public class SystemException : Exception
+    {
+        public SystemException() : base() { }
+        
+        public SystemException(string message) : base() { }
+    }
+    #endif
+}
\ No newline at end of file

Copied: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/EntryPoint.cs (from rev 8846, sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/EntryPoint.cs)
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/EntryPoint.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/EntryPoint.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,43 @@
+//
+//  Copyright (C) 2004-2015 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+using System;
+using System.IO;
+using System.Reflection;
+
+namespace OSGeo.MapGuide
+{
+    /// <summary>
+    /// This is the entry point of the MapGuide API
+    /// </summary>
+    public class MapGuideApi
+    {
+        static MapGuideApi()
+        {
+            
+        }
+        
+        /// <summary>
+        /// Initializes the MapGuide Web Tier APIs. You must call this method before using any other class or method
+        /// in the MapGuide API
+        /// </summary>
+        /// <param name="configFile">The path to the web tier configuration file</param>
+        /// <remarks>Subsequent calls do nothing and return immediately</remarks>
+        public static void MgInitializeWebTier(string configFile) {
+            MapGuideDotNetCoreUnmanagedApiPINVOKE.MgInitializeWebTier(configFile);
+        }
+    }
+}
\ No newline at end of file

Copied: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/ManagedException.cs (from rev 8846, sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/Custom/ManagedException.cs)
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/ManagedException.cs	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/custom/ManagedException.cs	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,90 @@
+//
+//  Copyright (C) 2004-2011 by Autodesk, Inc.
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of version 2.1 of the GNU Lesser
+//  General Public License as published by the Free Software Foundation.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+using System;
+
+namespace OSGeo.MapGuide
+{
+    /// <summary>
+    /// ManagedException is the exception class from which the root of unmanaged exception derive
+    /// This class, deriving from .NET Exception, allows to use the most common properties of
+    /// the Exception class on exceptions wrapping unmanaged MgException classes. The implementation
+    /// of these properties relies on the equivalent MgException methods.
+    ///
+    /// Although this class does not wrap any unmanaged class, it still holds a C++ pointer to
+    /// the MgException that derives from it.
+    /// </summary>
+    public class ManagedException : Exception
+    {
+        private bool mIsWrapper;
+        private string mMessage;
+        private string mStackTrace;
+
+        public ManagedException()
+        {
+            mIsWrapper = true;
+            mMessage = string.Empty;
+            mStackTrace = string.Empty;
+        }
+
+        public override string Message
+        {
+            get
+            {
+                return mIsWrapper ? ((MgException)this).GetExceptionMessage() : mMessage;
+            }
+        }
+
+        public override string StackTrace
+        {
+            get
+            {
+                if (mIsWrapper)
+                {
+                    //Some cosmetic cleaning of the C++ stack trace to better line up with the .net one
+                    string[] mgStackTrace = ((MgException)this).GetStackTrace().Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
+                    //This currently looks like the following if we re-join:
+                    //
+                    // at- <stack frame>
+                    // at- <stack frame>
+                    // at- <stack frame>
+                    //
+                    //The "-" being a leftover, so replace "at-" with "at" as well after re-joining.
+                    //The reason we don't blindly replace "-" in the C++ stack is because we don't want to scramble any physical path
+                    //that would also contain a "-"
+                    string sanitizedStack = ("   at" + string.Join(Environment.NewLine + "   at", mgStackTrace)).Replace("at-", "at");
+                    return string.Format("{0}{1}   ==== [C++ <-> .net] ===={1}{2}", sanitizedStack, Environment.NewLine, base.StackTrace);
+                }
+                else
+                {
+                    return mStackTrace;
+                }
+            }
+        }
+
+        public override string ToString()
+        {
+            string className = this.GetType().ToString();
+            return string.Format("{0}: {1}{2}{3}", className, this.Message, Environment.NewLine, this.StackTrace);
+        }
+
+        public virtual void Dispose()
+        {
+            //implemented by derived classes
+        }
+    }
+}

Copied: sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/project.json (from rev 8846, sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/project.json)
===================================================================
--- sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/project.json	                        (rev 0)
+++ sandbox/jng/aspnet50/Web/src/MapGuideDotNetCoreApi/wrapper/project.json	2015-12-03 15:13:52 UTC (rev 8848)
@@ -0,0 +1,40 @@
+{
+  "version": "3.1.0-*",
+  "description": "MapGuide API for .net Core",
+  "authors": [ "OSGeo" ],
+  "tags": [ "MapGuide" ],
+  "projectUrl": "http://mapguide.osgeo.org",
+  "licenseUrl": "",
+  "configurations": {
+    "Debug": {
+      "compilationOptions": {
+        "define": ["DEBUG", "TRACE"]
+      }
+    },
+    "Release": {
+      "compilationOptions": {
+        "define": ["RELEASE", "TRACE"],
+        "optimize": true
+      }
+    }
+  },
+  "frameworks": {
+    "dnxcore50": {
+      "dependencies": {
+        "Microsoft.CSharp": "4.0.1-beta-23409",
+        "System.Collections": "4.0.11-beta-23409",
+        "System.Linq": "4.0.1-beta-23409",
+        "System.Runtime": "4.0.21-beta-23409",
+        "System.Threading": "4.0.11-beta-23409",
+        "System.Runtime.Extensions": "4.0.11-beta-23409",
+        "System.Runtime.InteropServices": "4.0.21-beta-23409"
+      }
+    }
+  },
+  "sources": {
+    "compile": ["*.cs", "custom/*.cs"]
+  },
+  "packInclude": {
+    "runtimes/": "runtimes/**"
+  }
+}
\ No newline at end of file

Modified: sandbox/jng/aspnet50/build.bat
===================================================================
--- sandbox/jng/aspnet50/build.bat	2015-12-03 11:33:36 UTC (rev 8847)
+++ sandbox/jng/aspnet50/build.bat	2015-12-03 15:13:52 UTC (rev 8848)
@@ -333,7 +333,7 @@
 if not exist "%MG_OUTPUT%\dotnetcore" mkdir "%MG_OUTPUT%\dotnetcore"
 if not exist "%MG_OUTPUT%\dotnetcore_src" mkdir "%MG_OUTPUT%\dotnetcore_src"
 %XCOPY% "%MG_WEB_BIN%\%TYPEBUILD%" "%MG_OUTPUT%\dotnetcore" /EXCLUDE:svn_excludes.txt+dotnetcore_excludes.txt+%TYPEBUILD%_excludes.txt+%TYPEBUILD%_excludes.txt
-%XCOPY% "%MG_WEB_SRC%\MapGuideDotNetCoreApi" "%MG_OUTPUT%\dotnetcore_src" /EXCLUDE:dotnetcoresrc_excludes.txt
+%XCOPY% "%MG_WEB_SRC%\MapGuideDotNetCoreApi\wrapper" "%MG_OUTPUT%\dotnetcore_src" /EXCLUDE:dotnetcoresrc_excludes.txt
 pushd "%MG_OUTPUT%\dotnetcore"
 7z a -tzip "%MG_OUTPUT%\MapGuideDotNetCoreApi-Unmanaged-Windows-%PLATFORM_CLR%.zip" *
 popd



More information about the mapguide-commits mailing list