diff --git a/.gitignore b/.gitignore
index f1e3d20..5f3a86c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -250,3 +250,4 @@ paket-files/
# JetBrains Rider
.idea/
*.sln.iml
+/azure-documentdb-odata-sql/nuget.exe
diff --git a/README.md b/README.md
index c42e6ef..10c2296 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ The above query will then be translated to DocumentDB SQL:
```
SELECT TOP 5 c.revenue FROM c WHERE CONTAINS(c.englishName,'Limited') ORDER BY c.countryCode DESC
```
+Note: requires Microsoft.AspNet.OData 6.1.0.0 and .NET Framework 4.62
### Supported OData to DocumentDB SQL mappings:
@@ -32,7 +33,17 @@ SELECT TOP 5 c.revenue FROM c WHERE CONTAINS(c.englishName,'Limited') ORDER BY c
[$orderby](http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_The_$select_System_1) => ORDER BY
+[$count](http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part1-protocol/odata-v4.0-errata03-os-part1-protocol-complete.html#_The_$inlinecount_System) => COUNT(1)
+
+### Built-in Operators
+Items/any(d:d/Quantity gt 100) => JOIN a in c.Items WHERE a.Quantity > 100
+Note: If more objects in 'Items' qualify for the expression, duplicate results may result. e.g.
+SELECT value c FROM c
+JOIN a IN c.sub
+WHERE a.v=false might return c twice, while c exists once, because the join in 'sub' has two hits
+
#### Built-in Query Functions
+
contains()(field, 'value') => CONTAINS(c.field, 'value')
startswith()(field, 'value') => STARTSWITH(c.field, 'value')
@@ -53,6 +64,10 @@ trim(field) => LTRIM(RTRIM(c.englishName))
concat(field,'value') => CONCAT(c.englishName,'value')
+geo.distance(field, geography'POINT(30 10)') => ST_DISTANCE(c.location,{"type":"Point","coordinates":[30,10]})
+
+geo.intersects(field, geography'POLYGON((30 10, 10 20, 20 40, 40 40, 30 10))') => ST_INTERSECTS(c.area,{"type":"Polygon","coordinates":[[[30,10],[10.20],[20,40],[40,40],[30,10]]]})
+
## Installing
The nuget package of this project is published on Nuget.org [Download Page](https://www.nuget.org/packages/Microsoft.Azure.Documents.OData.Sql/). To install in Visual Studio Package Manager Console, run command:
@@ -93,3 +108,5 @@ The options can be combined with bit operators such as ```(TranslateOptions.SELE
## Authors
* **Ziyou Zheng** - Microsoft Universal Store Team -
+* **Egbert Nierop** - Free Lance developer - Added any functionality 2017 oct 13. note: all-functionality not supported.
+* **ntanaka** - Added $count, geography'POINT and geography'POLYGON( translations
\ No newline at end of file
diff --git a/azure-documentdb-odata-sql-samples/ODataToSqlSamples.cs b/azure-documentdb-odata-sql-samples/ODataToSqlSamples.cs
index 05a6289..8345034 100644
--- a/azure-documentdb-odata-sql-samples/ODataToSqlSamples.cs
+++ b/azure-documentdb-odata-sql-samples/ODataToSqlSamples.cs
@@ -7,6 +7,7 @@
using Microsoft.Azure.Documents.OData.Sql;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Web.OData.Extensions;
namespace azure_documentdb_odata_sql_tests
{
@@ -40,8 +41,13 @@ public static void ClassInitialize(TestContext testContext)
[TestInitialize()]
public void TestInitialize()
{
- httpRequestMessage = new HttpRequestMessage();
- httpRequestMessage.Method = HttpMethod.Get;
+ httpRequestMessage = new HttpRequestMessage
+ {
+ Method = HttpMethod.Get
+ };
+ var config = new System.Web.Http.HttpConfiguration();
+ config.EnableDependencyInjection();
+ httpRequestMessage.SetConfiguration(config);
}
[TestMethod]
@@ -76,7 +82,26 @@ public void TranslateSelectWithEnumSample()
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.SELECT_CLAUSE);
Assert.AreEqual("SELECT c.enumNumber, c.id FROM c ", sqlQuery);
}
+ [TestMethod]
+ public void TranslateAnySample()
+ {
+ httpRequestMessage.RequestUri = new Uri("http://localhost/User?$filter=companies/any(p: p/id eq 'abc' or p/name eq 'blaat')");
+ var oDataQueryOptions = new ODataQueryOptions(oDataQueryContext, httpRequestMessage);
+ var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
+ var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.SELECT_CLAUSE | TranslateOptions.WHERE_CLAUSE);
+ Assert.AreEqual("SELECT VALUE c FROM c JOIN a IN c.companies WHERE a.id = 'abc' OR a.name = 'blaat'", sqlQuery);
+ }
+ [TestMethod]
+ public void TranslateAnySampleWithMultipleClauses()
+ {
+ httpRequestMessage.RequestUri = new Uri("http://localhost/User?$filter=(companies/any(p: p/id eq 'abc' or p/name eq 'blaat')) and customers/any(x: x/customer_name eq 'jaap')");
+ var oDataQueryOptions = new ODataQueryOptions(oDataQueryContext, httpRequestMessage);
+
+ var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
+ var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.SELECT_CLAUSE | TranslateOptions.WHERE_CLAUSE);
+ Assert.AreEqual("SELECT VALUE c FROM c JOIN a IN c.companies JOIN b IN c.customers WHERE a.id = 'abc' OR a.name = 'blaat' AND b.customer_name = 'jaap'", sqlQuery);
+ }
[TestMethod]
public void TranslateSelectAllTopSample()
{
@@ -107,7 +132,18 @@ public void TranslateWhereSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.WHERE_CLAUSE);
- Assert.AreEqual("WHERE c.englishName = 'Microsoft' AND c.intField <= 5 ", sqlQuery);
+ Assert.AreEqual("WHERE c.englishName = 'Microsoft' AND c.intField <= 5", sqlQuery);
+ }
+
+ [TestMethod]
+ public void TranslateWhereSampleWithGUID()
+ {
+ httpRequestMessage.RequestUri = new Uri("http://localhost?$filter=id eq 2ED27DF5-F505-4A06-B168-7321C6B4AD0C");
+ var oDataQueryOptions = new ODataQueryOptions(oDataQueryContext, httpRequestMessage);
+
+ var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
+ var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.WHERE_CLAUSE);
+ Assert.AreEqual("WHERE c.id = '2ed27df5-f505-4a06-b168-7321c6b4ad0c'", sqlQuery);
}
[TestMethod]
@@ -118,7 +154,7 @@ public void TranslateWhereWithEnumSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.WHERE_CLAUSE);
- Assert.AreEqual("WHERE c.enumNumber = 'ONE' AND c.intField <= 5 ", sqlQuery);
+ Assert.AreEqual("WHERE c.enumNumber = 'ONE' AND c.intField <= 5", sqlQuery);
}
[TestMethod]
@@ -129,7 +165,7 @@ public void TranslateWhereWithNextedFieldsSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.WHERE_CLAUSE);
- Assert.AreEqual("WHERE c.parent.child = 'childValue' AND c.intField <= 5 ", sqlQuery);
+ Assert.AreEqual("WHERE c.parent.child = 'childValue' AND c.intField <= 5", sqlQuery);
}
[TestMethod]
@@ -140,7 +176,7 @@ public void TranslateAdditionalWhereSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.WHERE_CLAUSE, "c.dataType = 'MockOpenType'");
- Assert.AreEqual("WHERE c.dataType = 'MockOpenType' AND c.englishName = 'Microsoft' AND c.intField <= 5 ", sqlQuery);
+ Assert.AreEqual("WHERE c.dataType = 'MockOpenType' AND c.englishName = 'Microsoft' AND c.intField <= 5", sqlQuery);
}
[TestMethod]
@@ -151,7 +187,7 @@ public void TranslateSelectWhereSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.SELECT_CLAUSE | TranslateOptions.WHERE_CLAUSE, "c.dataType = 'MockOpenType'");
- Assert.AreEqual("SELECT * FROM c WHERE c.dataType = 'MockOpenType' AND c.englishName = 'Microsoft' ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE c.dataType = 'MockOpenType' AND c.englishName = 'Microsoft'", sqlQuery);
}
[TestMethod]
@@ -184,7 +220,7 @@ public void TranslateContainsSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE CONTAINS(c.englishName,'Microsoft') ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE CONTAINS(c.englishName,'Microsoft')", sqlQuery);
}
[TestMethod]
@@ -195,7 +231,7 @@ public void TranslateStartswithSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE STARTSWITH(c.englishName,'Microsoft') ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE STARTSWITH(c.englishName,'Microsoft')", sqlQuery);
}
[TestMethod]
@@ -206,7 +242,7 @@ public void TranslateEndswithSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE ENDSWITH(c.englishName,'Microsoft') ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE ENDSWITH(c.englishName,'Microsoft')", sqlQuery);
}
[TestMethod]
@@ -217,7 +253,7 @@ public void TranslateUpperAndLowerSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE UPPER(c.englishName) = 'MICROSOFT' OR LOWER(c.englishName) = 'microsoft' ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE UPPER(c.englishName) = 'MICROSOFT' OR LOWER(c.englishName) = 'microsoft'", sqlQuery);
}
[TestMethod]
@@ -228,7 +264,7 @@ public void TranslateLengthSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE LENGTH(c.englishName) >= 10 AND LENGTH(c.englishName) < 15 ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE LENGTH(c.englishName) >= 10 AND LENGTH(c.englishName) < 15", sqlQuery);
}
[TestMethod]
@@ -239,7 +275,7 @@ public void TranslateIndexOfSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE INDEX_OF(c.englishName,'soft') = 4 ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE INDEX_OF(c.englishName,'soft') = 4", sqlQuery);
}
[TestMethod]
@@ -250,7 +286,7 @@ public void TranslateSubstringSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE SUBSTRING(c.englishName,1,LENGTH(c.englishName)) = 'icrosoft' ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE SUBSTRING(c.englishName,1,LENGTH(c.englishName)) = 'icrosoft'", sqlQuery);
}
[TestMethod]
@@ -261,7 +297,7 @@ public void TranslateTrimSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE LTRIM(RTRIM(c.englishName)) = 'Microsoft' ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE LTRIM(RTRIM(c.englishName)) = 'Microsoft'", sqlQuery);
}
[TestMethod]
@@ -272,7 +308,7 @@ public void TranslateConcatSample()
var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
- Assert.AreEqual("SELECT * FROM c WHERE CONCAT(c.englishName,' Canada') = 'Microsoft Canada' ", sqlQuery);
+ Assert.AreEqual("SELECT * FROM c WHERE CONCAT(c.englishName,' Canada') = 'Microsoft Canada'", sqlQuery);
}
[TestMethod]
@@ -285,5 +321,38 @@ public void TranslateMasterSample()
var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL, "c._t = 'dataType'");
Assert.AreEqual("SELECT TOP 30 c.id, c.englishName FROM c WHERE c._t = 'dataType' AND c.title = 'title1' AND c.property.field != 'val' OR c.viewedCount >= 5 AND (c.likedCount != 3 OR c.enumNumber = 'TWO') ORDER BY c._lastClientEditedDateTime ASC, c.createdDateTime DESC ", sqlQuery);
}
+
+ [TestMethod]
+ public void TranslateCountSample()
+ {
+ httpRequestMessage.RequestUri = new Uri("http://localhost/User?$count=true&$filter=englishName eq 'Microsoft'");
+ var oDataQueryOptions = new ODataQueryOptions(oDataQueryContext, httpRequestMessage);
+
+ var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
+ var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.SELECT_CLAUSE | TranslateOptions.WHERE_CLAUSE);
+ Assert.AreEqual("SELECT VALUE COUNT(1) FROM c WHERE c.englishName = 'Microsoft'", sqlQuery);
+ }
+
+ [TestMethod]
+ public void TranslateGeoDistanceSample()
+ {
+ httpRequestMessage.RequestUri = new Uri("http://localhost/User?$filter=geo.distance(location, geography'POINT(31.9 -4.8)') lt 100");
+ var oDataQueryOptions = new ODataQueryOptions(oDataQueryContext, httpRequestMessage);
+
+ var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
+ var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
+ Assert.AreEqual("SELECT * FROM c WHERE ST_DISTANCE(c.location,{\"type\":\"Point\",\"coordinates\":[31.9,-4.8]}) < 100", sqlQuery);
+ }
+
+ [TestMethod]
+ public void TranslateGeoIntersectsSample()
+ {
+ httpRequestMessage.RequestUri = new Uri("http://localhost/User?$filter=geo.intersects(area, geography'POLYGON((31.8 -5, 32 -5, 32 -4.7, 31.8 -4.7, 31.8 -5))')");
+ var oDataQueryOptions = new ODataQueryOptions(oDataQueryContext, httpRequestMessage);
+
+ var oDataToSqlTranslator = new ODataToSqlTranslator(new SQLQueryFormatter());
+ var sqlQuery = oDataToSqlTranslator.Translate(oDataQueryOptions, TranslateOptions.ALL & ~TranslateOptions.TOP_CLAUSE);
+ Assert.AreEqual("SELECT * FROM c WHERE ST_INTERSECTS(c.area,{\"type\":\"Polygon\",\"coordinates\":[[[31.8,-5.0],[32.0,-5.0],[32.0,-4.7],[31.8,-4.7],[31.8,-5.0]]]})", sqlQuery);
+ }
}
}
diff --git a/azure-documentdb-odata-sql-samples/app.config b/azure-documentdb-odata-sql-samples/app.config
new file mode 100644
index 0000000..ceee8d6
--- /dev/null
+++ b/azure-documentdb-odata-sql-samples/app.config
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/azure-documentdb-odata-sql-samples/azure-documentdb-odata-sql-samples.csproj b/azure-documentdb-odata-sql-samples/azure-documentdb-odata-sql-samples.csproj
index 9401caf..99c7cc8 100644
--- a/azure-documentdb-odata-sql-samples/azure-documentdb-odata-sql-samples.csproj
+++ b/azure-documentdb-odata-sql-samples/azure-documentdb-odata-sql-samples.csproj
@@ -8,7 +8,7 @@
Properties
azure_documentdb_odata_sql_tests
azure-documentdb-odata-sql-tests
- v4.5.2
+ v4.6.2
512
{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10.0
@@ -18,6 +18,7 @@
UnitTest
+
true
@@ -37,53 +38,133 @@
4
-
- ..\packages\Microsoft.Azure.DocumentDB.1.10.0\lib\net45\Microsoft.Azure.Documents.Client.dll
+
+ ..\packages\Microsoft.Azure.DocumentDB.1.17.0\lib\net45\Microsoft.Azure.Documents.Client.dll
+
+
+ ..\packages\Microsoft.Extensions.DependencyInjection.1.1.1\lib\netstandard1.1\Microsoft.Extensions.DependencyInjection.dll
+
+
+ ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.1.1.1\lib\netstandard1.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
+
+
+ ..\packages\Microsoft.OData.Core.7.3.1\lib\portable-net45+win8+wpa81\Microsoft.OData.Core.dll
+
+
+ ..\packages\Microsoft.OData.Edm.7.3.1\lib\portable-net45+win8+wpa81\Microsoft.OData.Edm.dll
+
+
+ ..\packages\Microsoft.Spatial.7.3.1\lib\portable-net45+win8+wpa81\Microsoft.Spatial.dll
+
+
+ ..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
+ True
+
+
+ ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+
+ ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll
True
-
- ..\packages\Microsoft.Data.Edm.5.6.0\lib\net40\Microsoft.Data.Edm.dll
+
+
+ ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll
True
-
- ..\packages\Microsoft.Data.OData.5.6.0\lib\net40\Microsoft.Data.OData.dll
+
+ ..\packages\System.Diagnostics.DiagnosticSource.4.4.1\lib\net46\System.Diagnostics.DiagnosticSource.dll
+
+
+ ..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll
True
-
- ..\packages\Microsoft.OData.Core.6.15.0\lib\portable-net45+win+wpa81\Microsoft.OData.Core.dll
+
+ ..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
True
-
- ..\packages\Microsoft.OData.Edm.6.15.0\lib\portable-net45+win+wpa81\Microsoft.OData.Edm.dll
+
+ ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll
True
-
- ..\packages\Microsoft.Spatial.6.15.0\lib\portable-net45+win+wpa81\Microsoft.Spatial.dll
+
+ ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
True
-
- ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll
+
+
+ ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
True
-
-
-
- ..\packages\Microsoft.AspNet.WebApi.Client.5.2.2\lib\net45\System.Net.Http.Formatting.dll
+
+ ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
+ True
+
+
+ ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
+ True
+
+
+ ..\packages\System.Net.Http.4.3.2\lib\net46\System.Net.Http.dll
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll
+ True
+
+
+ ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
+ True
+
+
+
+ ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
+ True
+
+
+ ..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll
+ True
+
+
+ ..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll
+ True
+
+
+ ..\packages\System.Runtime.InteropServices.4.3.0\lib\net462\System.Runtime.InteropServices.dll
+ True
+
+
+ ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
True
-
- ..\packages\System.Spatial.5.6.0\lib\net40\System.Spatial.dll
+
+ ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll
+ True
+
+
+ ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
True
-
- ..\packages\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll
+
+ ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
True
-
- ..\packages\Microsoft.AspNet.OData.5.9.1\lib\net45\System.Web.OData.dll
+
+ ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll
True
+
+ ..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.OData.6.1.0\lib\net45\System.Web.OData.dll
+
+
+
+ ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll
+
@@ -109,6 +190,7 @@
+
@@ -131,12 +213,12 @@
-
+
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
+