diff --git a/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj b/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj index cf53318..98a2028 100644 --- a/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj +++ b/dotnet/Xrm.Tools.WebAPI.Core/Xrm.Tools.WebAPI.Core.csproj @@ -1,7 +1,7 @@  - netcoreapp1.0 + netcoreapp3.1 true xt.snk Xrm.Tools.WebAPI @@ -26,7 +26,10 @@ - + + + + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json b/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json index 447c9c8..d5df73e 100644 --- a/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json +++ b/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp1.0/Xrm.Tools.WebAPI.deps.json @@ -8,28 +8,1235 @@ ".NETCoreApp,Version=v1.0": { "Xrm.Tools.WebAPI/1.0.0": { "dependencies": { - "Newtonsoft.Json": "9.0.1" + "Newtonsoft.Json": "12.0.3" }, "runtime": { "Xrm.Tools.WebAPI.dll": {} } }, - "Newtonsoft.Json/9.0.1": { + "Microsoft.CSharp/4.3.0": { "dependencies": { - "System.Runtime.Serialization.Primitives": "4.1.1" + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0" }, "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "assemblyVersion": "9.0.0.0", - "fileVersion": "9.0.1.19813" + "lib/netstandard1.3/Microsoft.CSharp.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" } } }, - "System.Runtime.Serialization.Primitives/4.1.1": { + "Microsoft.NETCore.Platforms/1.1.0": {}, + "Microsoft.NETCore.Targets/1.1.0": {}, + "Microsoft.Win32.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "NETStandard.Library/1.6.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, + "Newtonsoft.Json/12.0.3": { + "dependencies": { + "Microsoft.CSharp": "4.3.0", + "NETStandard.Library": "1.6.1", + "System.ComponentModel.TypeConverter": "4.3.0", + "System.Runtime.Serialization.Formatters": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/Newtonsoft.Json.dll": { + "assemblyVersion": "12.0.0.0", + "fileVersion": "12.0.3.23909" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "debian.8-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "fedora.23-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "fedora.24-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "opensuse.13.2-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "opensuse.42.1-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "runtimeTargets": { + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib": { + "rid": "osx.10.10-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib": { + "rid": "osx.10.10-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "rhel.7-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "ubuntu.14.04-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "ubuntu.16.04-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "runtimeTargets": { + "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "rid": "ubuntu.16.10-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "System.AppContext/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/System.AppContext.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Buffers/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.1/System.Buffers.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Concurrent.dll": { + "assemblyVersion": "4.0.13.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Collections.NonGeneric/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Collections.NonGeneric.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24702.1" + } + } + }, + "System.Collections.Specialized/4.3.0": { + "dependencies": { + "System.Collections.NonGeneric": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Specialized.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.ComponentModel/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.ComponentModel.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.ComponentModel.Primitives/4.3.0": { + "dependencies": { + "System.ComponentModel": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.ComponentModel.Primitives.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.ComponentModel.TypeConverter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.NonGeneric": "4.3.0", + "System.Collections.Specialized": "4.3.0", + "System.ComponentModel": "4.3.0", + "System.ComponentModel.Primitives": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.5/System.ComponentModel.TypeConverter.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24702.1" + } + } + }, + "System.Console/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Dynamic.Runtime/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Dynamic.Runtime.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Calendars/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.1.2.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.1.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.IO.Compression.ZipFile/4.3.0": { + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/System.Linq.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/System.Linq.Expressions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.ObjectModel.dll": { + "assemblyVersion": "4.0.13.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + }, + "runtime": { + "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Numerics.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Runtime.Serialization.Formatters/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0" + }, + "runtime": { + "lib/netstandard1.4/System.Runtime.Serialization.Formatters.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Runtime.Serialization.Primitives/4.3.0": { + "dependencies": { + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": { + "assemblyVersion": "4.1.2.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "runtimeTargets": { + "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "rid": "osx", + "assetType": "runtime", + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.2.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { + "assemblyVersion": "4.0.0.0", + "fileVersion": "1.0.24212.1" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "runtime": { + "lib/netstandard1.6/System.Text.RegularExpressions.dll": { + "assemblyVersion": "4.1.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "runtime": { + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Threading.Timer/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Xml.ReaderWriter.dll": { + "assemblyVersion": "4.1.0.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + }, "runtime": { - "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": { - "assemblyVersion": "4.1.1.0", - "fileVersion": "1.0.24212.1" + "lib/netstandard1.3/System.Xml.XDocument.dll": { + "assemblyVersion": "4.0.12.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "System.Xml.XmlDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Xml.XmlDocument.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.6.24705.1" } } } @@ -41,19 +1248,593 @@ "serviceable": false, "sha512": "" }, - "Newtonsoft.Json/9.0.1": { + "Microsoft.CSharp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lYSAbRIleiMrmnRd7yWH5qzDgpbBJI1bBOJgOsp3xT2cQpEPA/xBxW3v92HPGD7pBkRKCdmLBuS1VDkY8ePlpg==", + "path": "microsoft.csharp/4.3.0", + "hashPath": "microsoft.csharp.4.3.0.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kc+uJTNW1r4n3rjUcBHS2bu05AWHv25oSlNBT+6IiUURPYTmkFUkBZMhCCYt+sQsgTSCgHeg0lCiyo42yfopog==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gp/fCwNPvLxkxa0X6E/D58xxkBpwc+KXiLV6No0+WrD87BggkNtpCoRbQ8uadBWaNTGYQLkgel3g2r95g5+2KQ==", + "path": "microsoft.netcore.targets/1.1.0", + "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dFQuwO1BwslolJbkGIYp72gBNsfu7P/Jjo6sYX8wN4EeSvjtNM1SOEewNTTvX6g1oAOVbsuEoRPtcvTOjF8PRQ==", + "path": "microsoft.win32.primitives/4.3.0", + "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" + }, + "NETStandard.Library/1.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7JdNAONLCDNqKIUk7Y9yAXbI7YD6K3yqrFRjeQlVkht/mCbens8FvJhcPW4wWdw8EdqONM4qQUaFB5ACZ0Ce/g==", + "path": "netstandard.library/1.6.1", + "hashPath": "netstandard.library.1.6.1.nupkg.sha512" + }, + "Newtonsoft.Json/12.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==", + "path": "newtonsoft.json/12.0.3", + "hashPath": "newtonsoft.json.12.0.3.nupkg.sha512" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-s44Q/LliPiDgbR0w6zDwI2D+YzIHiEtNe6MTMaWH6sjQE6txyG3Qpcg6+v/c7K3YtSu3qB43spYfu0C9Fb0NQg==", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8G6opoJzXJPF9jMdolAEBTE51JV7wx+5CRqP0pQy7FnTYfzlkywApKD+xR8Ox3HdQOK5rsyg28PY+T4muZrMQw==", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-8xbGXkTxziPYAIAh9h0C8Epk+jZVG0DAkRABB6S/CZaPR5XDmobpNwclAVgtft26GmttSWEHbVJIuugNtfFkrA==", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qcoSkH6pYAVkihy3ZDmX7N5KnRJmuKTeLkWY5Nu1EI6g+xwSlryiE/L+f7KOxRjDpsIEIEgy6WlBN9jp2MbM1A==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SARG7+6eb7pSZuH+kFkFVMjC1KHOkBsJvVHF847jWPNw6QNxv8Hch+WmMOLPOJ+B6vLAlDpD9jvVjDEmOyHLdg==", + "path": "runtime.native.system.io.compression/4.3.0", + "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OJwcby7CF9eZCWmrSFX0DtB6i+VhEokdw5B+mtlcm1OEWx0atL23MuUhNMdNWM0BCgOrmKPYxeGo2DiVjeWtrQ==", + "path": "runtime.native.system.net.http/4.3.0", + "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-D3s170zgC0x+2NXM0Ea+WtEViAHwzVhdjHXPWDUG8T4rCgrnvTKWPCRZRU+vVAchbgIav8J7QocxdMATSKfBRQ==", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BS+8N/guvMjDoesHvU2Oq2EQd9F/C0AcdyMwKbP8c43WLcZ/Fy6Meod9I9jBRnzsFCTwaXd+pioU/1PdgmeJ+w==", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-pGY2n5hFBb4rJXYOPqIDmY7xkKydoigdFqS7NZpbHVv9B+Q3DzrPN8y92A5EZ4rUWhoLqDdcL05o9EFO/qAg9w==", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sUiUL8uf9c0+ILUSWJYOBMBebKjMgCCxK4X9QJuwbk9ok2D9C9AJanzi6duC0Bge0EJX1nBUZl4n9MjD8cbdTQ==", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-U66c1C/yXaoqkMIyXxxYzODvTzaxgifycLgLr7mI/HqYSSIfjmHyQYbaVLE+fGXs+Ma6/wpIY4L0ou6zd2nzAA==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-V6nRRjGOPds0AnDLk3efTXxRyDgqL5wLyl1UoNpeZ4RYJkA27isDyJazs0sdr8ToLPqHCJHy+kl2UQLUs+zyaQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mX6unVqXzcMb3+32YCwCmKxnTGkIIBMj2toMMmohW4MqYtQR1PY5mHkAUE3ZvLYDoEx+pH9Eretj5IfOOP0r+Q==", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ILbKpwiiozTjZJqNQI9JFiDprl6yzLZ3MaT7jyGrJU486Kz1Uunt4Lc8DbSOtySDSIu7lBSYHvuN4hAkjd0dhg==", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-gLlSy9Gar5v9KmU7oXWQSqMvBHM0EpLFrpnRHqyJMg0ehcgRpdZ6SDrJXQr60gvJBfD+DRiFD1IMxJ8pOMl82Q==", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iPqHQE8iIAQSdLYnxNCqpPdQf0oZh3+JGVWBhVXpnghZhNd0A/FlUyVDIYCCQka6z7DXCwEoR635+zMzCUJsNg==", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.AppContext/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c8xi+pXBp/TaWIO35iKzm/qpcfEOuyPG1husZ3Ki6h2jtOWqRsilspLDK4rm0Qqf4I7MuSfn+dmT+UbO3dccSA==", + "path": "system.appcontext/4.3.0", + "hashPath": "system.appcontext.4.3.0.nupkg.sha512" + }, + "System.Buffers/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I244ydeSOTAKEYBUUkMIUZV9ZPyQCLsUUFFy37+p5zZ+WzPmIwOHcbjXdwOkH1MOzfDhkiWy28MROYZsUuxEoA==", + "path": "system.buffers/4.3.0", + "hashPath": "system.buffers.4.3.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5rcHvDQVMM7EIsDnp7HbLwNduCGjC91qYGG/eH/1hkPjb4ZKJydlCz2kv9bRAtieWzs0muRL4xpKqRMp89GBKQ==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Collections.NonGeneric/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9NjjPYfhx/YML/fwvKbnStRhY+PI+TEjUHsIXcsk77YR20yJ49F9qhwfLp+pnyvBwTPtqe8zNWs0huK9o+yhgg==", + "path": "system.collections.nongeneric/4.3.0", + "hashPath": "system.collections.nongeneric.4.3.0.nupkg.sha512" + }, + "System.Collections.Specialized/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fPjPo/6M6Gt8IatBfaHqmjg96iPSPIipRQ7L6k5B6pcJKsxpvVE0fX57RScFgsH7jJ88im+m5nBIG2aKQMRJoQ==", + "path": "system.collections.specialized/4.3.0", + "hashPath": "system.collections.specialized.4.3.0.nupkg.sha512" + }, + "System.ComponentModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nMecmhDSj8snZ7nl9nLvsD+2Lzg0u/+obafRUwQc/mD6jWHmjqZKWzoia/hrA64yOjhCKQCqnTvGbBEI9uWyAQ==", + "path": "system.componentmodel/4.3.0", + "hashPath": "system.componentmodel.4.3.0.nupkg.sha512" + }, + "System.ComponentModel.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-L843lLK85oI/986ClYbR2C372wA6vDP5MZajksxFrIRjFY4QzHuRz/hdXg4ad0Ns6l1AKAMS7cnI3z2+TO0BQQ==", + "path": "system.componentmodel.primitives/4.3.0", + "hashPath": "system.componentmodel.primitives.4.3.0.nupkg.sha512" + }, + "System.ComponentModel.TypeConverter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RUpwz6/+NidwMAlSHjP4PoiS7N2RD2LSzKYJqzG5/Uba3wYx7k5Tf1c3rYuQd/Cff70wfAX6e10wdZ3ghmayIw==", + "path": "system.componentmodel.typeconverter/4.3.0", + "hashPath": "system.componentmodel.typeconverter.4.3.0.nupkg.sha512" + }, + "System.Console/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vwoWshNZnW9iQ5+AfGBsrYk++xsDN/rfaezeVSiIUvApHPtE8R+dd/msO5w3VGkccxlZZGPssbVL2LTVuYKhzw==", + "path": "system.console/4.3.0", + "hashPath": "system.console.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0ZmZsX+mJ9QvfXxLn8bRtH6OLvazXiymIt0KPFWAgrYbo75/dnyx6/KDkl/D8v+Zlew6YiuhAT5V+2pDmRCKig==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-MD2xh65pQNLs9YDqIaOfNJmzNsp1yIBKeIyqaI27nQNaMIXHp+8TEOK3vraJn0fJVSAJfbgpGUFTQveS5aQ2LQ==", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xu7nOvXk1Bs+Hjr6FNBxE+YY1fqpIeSJ9RUPwtqfSyE2bmafn3W9yQnXcvvGar+d97u8OHesIDGw3b6qrr4Pdg==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/X9qqeH939tGXXHfO4LclNjjcubx+ZyKiApmIFmpZboMhVA6wzNqVy61DfVs+ypCTjR++Ci00tW78+y78xOW9Q==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Dynamic.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1lAijirtZGrANmi8McCA0VzQcaLf/yahKObKEhd/s2pn0SRL6R0MdgrxeWdV994wdCkaDk5cVa7awnRGHg7gtA==", + "path": "system.dynamic.runtime/4.3.0", + "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6VWcxqcE82si0riGOjBvHje2N5h0PrK3MxJCWsiPCmOdvKzWSmk7wysNtYC3eWI9fY3IocLyph2IqNfkEjvfAQ==", + "path": "system.globalization.calendars/4.3.0", + "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-L/UYzwgDgiRDt0judCelUwWxMwXhEDtR+43JI60e8oJu5f6ny896uJ5/bXEwwAFgvsGLz0a5yc33o+uD+tjUvw==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-svUsh8SLczmdW2261QBAMzAW7FSGO7Gw3uxxROr94TnyvdDD2zZC69tQh8EoAuz2UcjQSyd5mtV5hFWoHw3i5g==", + "path": "system.io.compression/4.3.0", + "hashPath": "system.io.compression.4.3.0.nupkg.sha512" + }, + "System.IO.Compression.ZipFile/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-iNBem28spk/sl392sz6rVcrO95sSWfwaOKzZ9bwVVvGQB7129J2inX1cizsoQR7upMDv6lZ0WfyBaDlNGdNIzA==", + "path": "system.io.compression.zipfile/4.3.0", + "hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-itTrsYKh7Y5yDyIkigukx9L1KIY8RNQly+TMeARneN/FCX1CekJcR29WnM9+sWlSaoA1qDUbgqq/09R+u+F6kQ==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EVt3eKOi62SO3GBiYRW0WFTfPVVQRIRsKAnnz25CxkV9VAZLPR4DXaC9OGXfbdf6uUXeS/UftiZFk2MYjHLkPA==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cbO4fLtL2gyg108wxIF9/fITUb2jygrSB5g1Q/QoB34qATL3yrvaG6XEJg5CGeoeAnNWJwg7/DLqkbrMY/UT2A==", + "path": "system.net.http/4.3.0", + "hashPath": "system.net.http.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5PjybiUterzUjVN+8bcxjbaSktTeD8XR4LdIjg5g2mUHf45+xiZVRX+QaTO3D8IuQJfOr60DHmEYTitwvx2lHQ==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.Net.Sockets/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-D3PDXP8Si3NGpzhy7SFBRtB90sTbn9BV4ZneRndiJwCBDVa8pT5p8YLFN/53bGGXFnTt8AwrelpWg3KNMdgRLw==", + "path": "system.net.sockets/4.3.0", + "hashPath": "system.net.sockets.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fWSkwrkH7o1jY/OoaL5v/noWEsVoSyaZhs53z0gXp36/KXyti0DdJ/NDorLrnUaYU+eOBqkDfMH9cYEobxfgYw==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wkt6H6SL+MP39gZPnUL69HVxOxiGe5Up3rAowT1WO4gL2quWeN8wBcNONY7rZg+dQgCTXLKU9o8VSJK6R9heWw==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dfJ2fy2951zEXB5vtTRRpynjf8uFK8OuyX5X0/6nfgBy1tBwzLpMZ4kZR1DNVnbMQmNHqwb5GXLOqYZEMx5LkA==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vq+29ykyTj3kBLTkIR/nTscl94rJiFSmCPrFTUsZQkqvIUybGrL7nFoRvfzhO8qxyconxZKbCiNPNS516hFjTQ==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Pl6u+n5ysUarjhxas0+TpiC6svqDQshRQDgbHs/Lp/wEcXkooEvPfD6sAio9vn/Fmqd37Gyuip8SZ9txw7Otcg==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HjnRu9doEZgAWdFvUidCYrYrl00p5w0M+cUUKctaVvXaouNft/D/2fTFemFNK7hESuaTTKfxZ6HIkynqh3YegA==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-E5n5JFwDCJGPfDQDYhVhkVq7C9brGkYMmo06d6YCdq5HZDDlQ642iIbPfprRbQaq4DqG27wOBRuedEuxmTn6og==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-hZDHprGcYSU+TosJLa3DxzPtgxTB5lmgPUpCZVtp6ymQD/1E33E/vqbhgT7UN/bC0Mxvbyv8ufM0WvdmuAb7PA==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zCr/YPggwVqSOprd/oqlY0wUeoP2gR/B6vXckcTUqQ6owr4XRPiuQ9Jv+ZwdE7AbP18AdAC6Dr1seU87LZsIKg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aLtp4ohE6Ot8cUNTG81mtvpC7sOCVsICmitqDLU0hhMa4Yd0LuSc5ZXM8SYVql9+jKfq4cE/9lVwbDC+I68JNQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bFjSH31+OhGMh80GIrOEfeiGafpQ1k6s/U/nGaW2+8+9V8YbkfHPD0TyjakwrK9zkXisXBq9wxIlcmy8ntP01g==", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-a0ctRzXTczPLVL87ROVR7D2jKVLAPuwsiUjjYmbqrRk191+U789eRHn98R4Jw2FmlIwbt1oKJgf7jTEucoWukA==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Formatters/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-zi8QbTOqC4wg1KdCB0KayIwzGNIuyX3NT3Oy7DzcZ0Fm1P+VrHvsFbBjryH1Qz8w+5VL3WVMRTglDCdL+OhxRg==", + "path": "system.runtime.serialization.formatters/4.3.0", + "hashPath": "system.runtime.serialization.formatters.4.3.0.nupkg.sha512" + }, + "System.Runtime.Serialization.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==", + "path": "system.runtime.serialization.primitives/4.3.0", + "hashPath": "system.runtime.serialization.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "path": "system.security.cryptography.algorithms/4.3.0", + "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DPlYfEQsvLENrajmb/eTcN8ZbkaMRyqd5UExS7pJhL9H69Almc8KKX5VBd/UkYiWIZu8zuhxVKEu1vFLp0QRDw==", + "path": "system.security.cryptography.cng/4.3.0", + "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rz/grSxRtQ8lL4M0T7uHpjikZTDvdXJwABsuSqGY4dHmtEp6twy54azAZ8RTRA8Lm1qdbzE1wu46jeZzmuNjSg==", + "path": "system.security.cryptography.csp/4.3.0", + "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "path": "system.security.cryptography.encoding/4.3.0", + "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AJa9Kfr4yR8xk/fP17hiuKiQVc5ZedPUrHac0CdEn/02gQh0LHRNwwpue1dU9SIGR7iMjobVnPJ666GHlvPgQg==", + "path": "system.security.cryptography.openssl/4.3.0", + "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "path": "system.security.cryptography.x509certificates/4.3.0", + "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-xCBSdAfRQ0psjeZbNl9+e9rchAJMLo8xieggUV192FMAfkYRhmh48bxiUALIlX0p+QOLSEZyCVke7derKra2Gg==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/5X6gKBvbOs/XY0WnUNZNLhQhUB2FNpFtp2l06JvofCo0hcDPd/2mfdDUI+bQXSbghY+kPXpdWWvfyKBkCOoBw==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fK/UAPhmBibBSOToTQdQNLI6beCxl2ScLX0nVCIE2XrMiHy7BU5srTjP16vvIWdtiNlyaDX1QzGdscc86bYfZA==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dNioLrA5WOs5YYPSJFdBUxO4f00QAsmszdJPR5oqwnr50EegrP17lH9HsUUSYfcoABBoJhrkrGrgS9PZhP+CaA==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CpbGeLIYSsuLHQ+2lZJ5rb/OX3zh7tZYItgMF7zSqQkIMO4wHsRFkc2BY/BzmnbFzkPi/5D+V3fUgVSW5lkX7w==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qNMp4Opzrp8hZHjuZZVX2qRPrUS2dotp3E+Vo6KkRjbZF4WClmTjCli5pV1HLEJZQhGT5UjZuE/cLmJWVkNQqw==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Threading.Timer/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OjHXvScnRk/kkV2L0wAMkhwbiE7feMPP4SoRtEhteWH2RIYgjSD7vA9pTYyvMT+x0Ou8dlrleJmjddcLnHGZlA==", + "path": "system.threading.timer/4.3.0", + "hashPath": "system.threading.timer.4.3.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9E7d4zF0xopJhmL/NdRSGvD+JkPpCz59XBo5qdL9j5vqzwtdIZLeWJpvuLaei9jtmZ6oDdtZO1EgRCjnMxG9yA==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "path": "newtonsoft.json/9.0.1", - "hashPath": "newtonsoft.json.9.0.1.nupkg.sha512" + "sha512": "sha512-YfrKw1yVMYz5TBHQKkf0GcAhymrTPlTTVlyJL7Yx4meBmPdBvS8v94x2f1+Nn4nW3CW1FUxZSwd+Zyf2GPRMdA==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" }, - "System.Runtime.Serialization.Primitives/4.1.1": { + "System.Xml.XmlDocument/4.3.0": { "type": "package", "serviceable": true, - "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==", - "path": "system.runtime.serialization.primitives/4.1.1", - "hashPath": "system.runtime.serialization.primitives.4.1.1.nupkg.sha512" + "sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==", + "path": "system.xml.xmldocument/4.3.0", + "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512" } } } \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp3.1/Xrm.Tools.WebAPI.deps.json b/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp3.1/Xrm.Tools.WebAPI.deps.json new file mode 100644 index 0000000..4df4723 --- /dev/null +++ b/dotnet/Xrm.Tools.WebAPI.Core/bin/Debug/netcoreapp3.1/Xrm.Tools.WebAPI.deps.json @@ -0,0 +1,1489 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v3.1", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v3.1": { + "Xrm.Tools.WebAPI/1.0.0": { + "dependencies": { + "Microsoft.AspNet.WebApi.Client": "5.2.7", + "Microsoft.Extensions.Http.Polly": "3.1.5", + "Newtonsoft.Json": "12.0.3", + "Polly.Extensions.Http": "3.0.0" + }, + "runtime": { + "Xrm.Tools.WebAPI.dll": {} + } + }, + "Microsoft.AspNet.WebApi.Client/5.2.7": { + "dependencies": { + "Newtonsoft.Json": "12.0.3", + "Newtonsoft.Json.Bson": "1.0.1" + }, + "runtime": { + "lib/netstandard2.0/System.Net.Http.Formatting.dll": { + "assemblyVersion": "5.2.7.0", + "fileVersion": "5.2.61128.0" + } + } + }, + "Microsoft.Extensions.Configuration/3.1.5": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Configuration.Abstractions/3.1.5": { + "dependencies": { + "Microsoft.Extensions.Primitives": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Configuration.Binder/3.1.5": { + "dependencies": { + "Microsoft.Extensions.Configuration": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.DependencyInjection/3.1.5": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.DependencyInjection.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.5": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Http/3.1.5": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.5", + "Microsoft.Extensions.Logging": "3.1.5", + "Microsoft.Extensions.Options": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Http.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Http.Polly/3.1.5": { + "dependencies": { + "Microsoft.Extensions.Http": "3.1.5", + "Polly": "7.1.0", + "Polly.Extensions.Http": "3.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Http.Polly.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Logging/3.1.5": { + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "3.1.5", + "Microsoft.Extensions.DependencyInjection": "3.1.5", + "Microsoft.Extensions.Logging.Abstractions": "3.1.5", + "Microsoft.Extensions.Options": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Logging.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Logging.Abstractions/3.1.5": { + "runtime": { + "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Options/3.1.5": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.5", + "Microsoft.Extensions.Primitives": "3.1.5" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Options.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.Extensions.Primitives/3.1.5": { + "runtime": { + "lib/netcoreapp3.1/Microsoft.Extensions.Primitives.dll": { + "assemblyVersion": "3.1.5.0", + "fileVersion": "3.100.520.27009" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "Microsoft.NETCore.Targets/1.1.0": {}, + "Microsoft.Win32.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "NETStandard.Library/1.6.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, + "Newtonsoft.Json/12.0.3": { + "runtime": { + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "assemblyVersion": "12.0.0.0", + "fileVersion": "12.0.3.23909" + } + } + }, + "Newtonsoft.Json.Bson/1.0.1": { + "dependencies": { + "NETStandard.Library": "1.6.1", + "Newtonsoft.Json": "12.0.3" + }, + "runtime": { + "lib/netstandard1.3/Newtonsoft.Json.Bson.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.1.20722" + } + } + }, + "Polly/7.1.0": { + "runtime": { + "lib/netstandard2.0/Polly.dll": { + "assemblyVersion": "7.0.0.0", + "fileVersion": "7.1.0.0" + } + } + }, + "Polly.Extensions.Http/3.0.0": { + "dependencies": { + "Polly": "7.1.0" + }, + "runtime": { + "lib/netstandard2.0/Polly.Extensions.Http.dll": { + "assemblyVersion": "3.0.0.0", + "fileVersion": "3.0.0.0" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.native.System/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {}, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {}, + "System.AppContext/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Console/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Diagnostics.Debug/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Diagnostics.Tools/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Calendars/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile/4.3.0": { + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.IO.FileSystem/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Linq/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Net.Http/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.ObjectModel/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit/4.3.0": { + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Numerics/4.3.0": { + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.RegularExpressions/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading/4.3.0": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Timer/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument/4.3.0": { + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + } + } + }, + "libraries": { + "Xrm.Tools.WebAPI/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.AspNet.WebApi.Client/5.2.7": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/76fAHknzvFqbznS6Uj2sOyE9rJB3PltY+f53TH8dX9RiGhk02EhuFCWljSj5nnqKaTsmma8DFR50OGyQ4yJ1g==", + "path": "microsoft.aspnet.webapi.client/5.2.7", + "hashPath": "microsoft.aspnet.webapi.client.5.2.7.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LZfdAP8flK4hkaniUv6TlstDX9FXLmJMX1A4mpLghAsZxTaJIgf+nzBNiPRdy/B5Vrs74gRONX3JrIUJQrebmA==", + "path": "microsoft.extensions.configuration/3.1.5", + "hashPath": "microsoft.extensions.configuration.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VBcAk6s9izZr04WCzNqOh1Sxz2RbVSh0G79MfpHSDv16cUJtSEYEHody9ZnF71LBEktzdu6cvDFBOFMh43q0iA==", + "path": "microsoft.extensions.configuration.abstractions/3.1.5", + "hashPath": "microsoft.extensions.configuration.abstractions.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Binder/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZR/zjBxkvdnnWhRoBHDT95uz1ZgJFhv1QazmKCIcDqy/RXqi+6dJ/PfxDhEnzPvk9HbkcGfFsPEu1vSIyxDqBQ==", + "path": "microsoft.extensions.configuration.binder/3.1.5", + "hashPath": "microsoft.extensions.configuration.binder.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I+RTJQi7TtenIHZqL2zr6523PYXfL88Ruu4UIVmspIxdw14GHd8zZ+2dGLSdwX7fn41Hth4d42S1e1iHWVOJyQ==", + "path": "microsoft.extensions.dependencyinjection/3.1.5", + "hashPath": "microsoft.extensions.dependencyinjection.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-2VSCj2TZPMdeEi279Lawi6qJQu4+sEWizSOYrhY6hapyS1jxn1jVUZT1Ugv68bya+x8+3lD4+RqhUZql9PhISQ==", + "path": "microsoft.extensions.dependencyinjection.abstractions/3.1.5", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Http/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-P8yu3UDd0X129FmxJN0/nObuuH4v7YoxK00kEs8EU4R7POa+3yp/buux74fNYTLORuEqjBTMGtV7TBszuvCj7g==", + "path": "microsoft.extensions.http/3.1.5", + "hashPath": "microsoft.extensions.http.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Http.Polly/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wW+kLLqoQPIg3+NQhBkqmxBAtoGJhVsQ03RAjw/Jx0oTSmaZsJY3rIlBmsrHdeKOxq19P4qRlST2wk/k5tdXhg==", + "path": "microsoft.extensions.http.polly/3.1.5", + "hashPath": "microsoft.extensions.http.polly.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-C85NYDym6xy03o70vxX+VQ4ZEjj5Eg5t5QoGW0t100vG5MmPL6+G3XXcQjIIn1WRQrjzGWzQwuKf38fxXEWIWA==", + "path": "microsoft.extensions.logging/3.1.5", + "hashPath": "microsoft.extensions.logging.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZvwowjRSWXewdPI+whPFXgwF4Qme6Q9KV9SCPEITSGiqHLArct7q5hTBtTzj3GPsVLjTqehvTg6Bd/EQk9JS0A==", + "path": "microsoft.extensions.logging.abstractions/3.1.5", + "hashPath": "microsoft.extensions.logging.abstractions.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Options/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-f+JT/7lkKBMp/Ak2tVjO+TD7o+UoCfjnExkZNn0PZIso8kIXrqNy6x42Lrxf4Q0pW3JMf9ExmL2EQlvk2XnFAg==", + "path": "microsoft.extensions.options/3.1.5", + "hashPath": "microsoft.extensions.options.3.1.5.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/3.1.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6bLdjSAQix82oP2tsuX9MM2yjgUFFOkSZYyRSKoUULilw2cg0Y0H+dnugwYlfj8Jd7yjd/+QSdNBqEyYhTYv0w==", + "path": "microsoft.extensions.primitives/3.1.5", + "hashPath": "microsoft.extensions.primitives.3.1.5.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "path": "microsoft.netcore.targets/1.1.0", + "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "path": "microsoft.win32.primitives/4.3.0", + "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" + }, + "NETStandard.Library/1.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "path": "netstandard.library/1.6.1", + "hashPath": "netstandard.library.1.6.1.nupkg.sha512" + }, + "Newtonsoft.Json/12.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==", + "path": "newtonsoft.json/12.0.3", + "hashPath": "newtonsoft.json.12.0.3.nupkg.sha512" + }, + "Newtonsoft.Json.Bson/1.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5PYT/IqQ+UK31AmZiSS102R6EsTo+LGTSI8bp7WAUqDKaF4wHXD8U9u4WxTI1vc64tYi++8p3dk3WWNqPFgldw==", + "path": "newtonsoft.json.bson/1.0.1", + "hashPath": "newtonsoft.json.bson.1.0.1.nupkg.sha512" + }, + "Polly/7.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mpQsvlEn4ipgICh5CGyVLPV93RFVzOrBG7wPZfzY8gExh7XgWQn0GCDY9nudbUEJ12UiGPP9i4+CohghBvzhmg==", + "path": "polly/7.1.0", + "hashPath": "polly.7.1.0.nupkg.sha512" + }, + "Polly.Extensions.Http/3.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==", + "path": "polly.extensions.http/3.0.0", + "hashPath": "polly.extensions.http.3.0.0.nupkg.sha512" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.native.System/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "path": "runtime.native.system/4.3.0", + "hashPath": "runtime.native.system.4.3.0.nupkg.sha512" + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "path": "runtime.native.system.io.compression/4.3.0", + "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "path": "runtime.native.system.net.http/4.3.0", + "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.AppContext/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "path": "system.appcontext/4.3.0", + "hashPath": "system.appcontext.4.3.0.nupkg.sha512" + }, + "System.Buffers/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", + "path": "system.buffers/4.3.0", + "hashPath": "system.buffers.4.3.0.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "path": "system.collections.concurrent/4.3.0", + "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" + }, + "System.Console/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "path": "system.console/4.3.0", + "hashPath": "system.console.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "path": "system.diagnostics.debug/4.3.0", + "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "hashPath": "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "path": "system.diagnostics.tools/4.3.0", + "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "path": "system.diagnostics.tracing/4.3.0", + "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "path": "system.globalization.calendars/4.3.0", + "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "path": "system.globalization.extensions/4.3.0", + "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "path": "system.io.compression/4.3.0", + "hashPath": "system.io.compression.4.3.0.nupkg.sha512" + }, + "System.IO.Compression.ZipFile/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "path": "system.io.compression.zipfile/4.3.0", + "hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "path": "system.io.filesystem/4.3.0", + "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "path": "system.io.filesystem.primitives/4.3.0", + "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" + }, + "System.Linq/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "path": "system.linq/4.3.0", + "hashPath": "system.linq.4.3.0.nupkg.sha512" + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "path": "system.linq.expressions/4.3.0", + "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" + }, + "System.Net.Http/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "path": "system.net.http/4.3.0", + "hashPath": "system.net.http.4.3.0.nupkg.sha512" + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "path": "system.net.primitives/4.3.0", + "hashPath": "system.net.primitives.4.3.0.nupkg.sha512" + }, + "System.Net.Sockets/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "path": "system.net.sockets/4.3.0", + "hashPath": "system.net.sockets.4.3.0.nupkg.sha512" + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "path": "system.objectmodel/4.3.0", + "hashPath": "system.objectmodel.4.3.0.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "path": "system.reflection.emit/4.3.0", + "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "path": "system.reflection.emit.lightweight/4.3.0", + "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "path": "system.reflection.extensions/4.3.0", + "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "path": "system.reflection.typeextensions/4.3.0", + "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "path": "system.runtime.numerics/4.3.0", + "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "path": "system.security.cryptography.algorithms/4.3.0", + "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", + "path": "system.security.cryptography.cng/4.3.0", + "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "path": "system.security.cryptography.csp/4.3.0", + "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "path": "system.security.cryptography.encoding/4.3.0", + "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "path": "system.security.cryptography.openssl/4.3.0", + "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "path": "system.security.cryptography.primitives/4.3.0", + "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "path": "system.security.cryptography.x509certificates/4.3.0", + "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "path": "system.text.encoding.extensions/4.3.0", + "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "path": "system.text.regularexpressions/4.3.0", + "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" + }, + "System.Threading/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "path": "system.threading/4.3.0", + "hashPath": "system.threading.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", + "path": "system.threading.tasks.extensions/4.3.0", + "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512" + }, + "System.Threading.Timer/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "path": "system.threading.timer/4.3.0", + "hashPath": "system.threading.timer.4.3.0.nupkg.sha512" + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "path": "system.xml.readerwriter/4.3.0", + "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "path": "system.xml.xdocument/4.3.0", + "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe index feb104d..0f83b17 100644 Binary files a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe and b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.exe differ diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log index b53d5d1..a501f8b 100644 Binary files a/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log and b/dotnet/Xrm.Tools.WebAPI.NuGet/NuGet.log differ diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec b/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec index 2472f28..60fadf1 100644 --- a/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec +++ b/dotnet/Xrm.Tools.WebAPI.NuGet/Package.nuspec @@ -2,7 +2,7 @@ Xrm.Tools.CRMWebAPI - 1.0.24 + 1.0.25 Xrm.Tools.CRMWebAPI DavidYack @@ -37,6 +37,7 @@ 1.0.22 Changed assembly name of standard version to just Xrm.Tools.WebAPI 1.0.23 Changed assembly name of core version to just Xrm.Tools.WebAPI 1.0.24 Added Associate and DeleteAssocation methods + 1.0.25 Upgraded projects to .NET Framework 4.6.2, .NET Core 3.1 LTS and .NET Standard 2.0, added Polly for wait and retry for GET requests, added support for fetching all records via FetchXML This is an API helper for working with the Common Data Service/Dynamics 365 Web API @@ -46,28 +47,22 @@ https://nuget.org/Content/Images/packageDefaultIcon-50x50.png false https://github.com/davidyack/Xrm.Tools.CRMWebAPI/blob/master/LICENSE - Copyright 2018 + Copyright 2020 - - + + - - - - - - - - + + - - - - + + + + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/Properties/AssemblyInfo.cs b/dotnet/Xrm.Tools.WebAPI.NuGet/Properties/AssemblyInfo.cs index e6e882c..ca2525a 100644 --- a/dotnet/Xrm.Tools.WebAPI.NuGet/Properties/AssemblyInfo.cs +++ b/dotnet/Xrm.Tools.WebAPI.NuGet/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Xrm.Tools.WebAPI.NuGet")] -[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg b/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg index d501cfb..f1e8828 100644 Binary files a/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg and b/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.CRMWebAPI.1.0.24.nupkg differ diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.WebAPI.NuGet.csproj b/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.WebAPI.NuGet.csproj index f8b2769..cad7802 100644 --- a/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.WebAPI.NuGet.csproj +++ b/dotnet/Xrm.Tools.WebAPI.NuGet/Xrm.Tools.WebAPI.NuGet.csproj @@ -67,9 +67,8 @@ - - ..\packages\Newtonsoft.Json.8.0.2\lib\net35\Newtonsoft.Json.dll - True + + ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll diff --git a/dotnet/Xrm.Tools.WebAPI.NuGet/packages.config b/dotnet/Xrm.Tools.WebAPI.NuGet/packages.config index b232e15..284cc55 100644 --- a/dotnet/Xrm.Tools.WebAPI.NuGet/packages.config +++ b/dotnet/Xrm.Tools.WebAPI.NuGet/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj b/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj index fc7a072..98f322d 100644 --- a/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj +++ b/dotnet/Xrm.Tools.WebAPI.Standard/Xrm.Tools.WebAPI.Standard.csproj @@ -1,7 +1,7 @@  - netstandard1.4;netstandard2.0 + netstandard2.0 true xt.snk Xrm.Tools.WebAPI @@ -26,9 +26,13 @@ - + + + + + - + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs index e0defc3..fa3da0d 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/ActionTests.cs @@ -15,7 +15,7 @@ public void TestWinOpportunity() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic account = new ExpandoObject(); account.name = "test " + DateTime.Now.ToString(); @@ -53,7 +53,7 @@ public void TestLostOpportunity() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic account = new ExpandoObject(); account.name = "test " + DateTime.Now.ToString(); @@ -92,7 +92,7 @@ public void TestCalculateRollup() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic voteCountUpdate = new ExpandoObject(); voteCountUpdate.Target = new ExpandoObject(); diff --git a/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs index 65280ed..9af74df 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/BasicCRUDTests.cs @@ -13,7 +13,7 @@ namespace Xrm.Tools.WebAPI.Test [TestClass] public class BasicCRUDTests : UnitTestBaseClass { - + [TestMethod] public void TestMethod1() @@ -21,12 +21,12 @@ public void TestMethod1() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic data = new ExpandoObject(); data.name = "test " + DateTime.Now.ToString(); - Guid createdID = await api.Create("accounts", data); + Guid createdID = await api.Create("accounts", data); var retrievedObject = await api.Get("accounts", createdID, new CRMGetListOptions() { FormattedValues = true }); @@ -41,16 +41,16 @@ public void TestMethod1() await api.Delete("accounts", upsertResult.EntityID); - var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { Top = 5, FormattedValues=true }); + var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { Top = 5, FormattedValues = true }); - string fetchXml = ""; + string fetchXml = ""; - var fetchResults = await api.GetList("accounts", QueryOptions: new CRMGetListOptions() { FetchXml = fetchXml }); + var fetchResults = await api.GetList("accounts", QueryOptions: new CRMGetListOptions() { FetchXml = fetchXml, FetchAllRecords = true }); var count = await api.GetCount("accounts"); List batchList = new List(); - for (int i=0;i<5;i++) + for (int i = 0; i < 5; i++) { dynamic batchCreateData = new ExpandoObject(); batchCreateData.name = "test " + DateTime.Now.ToString(); @@ -62,7 +62,7 @@ public void TestMethod1() gettimeoptions.LocalizedStandardName = "Pacific Standard Time"; gettimeoptions.LocaleId = 1033; - var gettimeResults = await api.ExecuteFunction("GetTimeZoneCodeByLocalizedName",gettimeoptions); + var gettimeResults = await api.ExecuteFunction("GetTimeZoneCodeByLocalizedName", gettimeoptions); var whoamiResults = await api.ExecuteFunction("WhoAmI"); @@ -78,7 +78,7 @@ public void TestCreateRelatedRecords1() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic account = new ExpandoObject(); account.name = "Test Account " + DateTime.Now.ToString(); @@ -107,7 +107,7 @@ public void TestCreateRelatedRecords2() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic account = new ExpandoObject(); account.name = "Test Account " + DateTime.Now.ToString(); @@ -132,7 +132,7 @@ public void TestFetchXml() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); CRMGetListOptions qOptions = new CRMGetListOptions() { @@ -142,7 +142,7 @@ public void TestFetchXml() foreach (dynamic account in accounts.List) { var myAccount = account as IDictionary; - + Console.WriteLine(myAccount["contact.fullname"]); } @@ -157,7 +157,7 @@ public void TestOrderBy() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); var accounts = await api.GetList("accounts", new CRMGetListOptions() { Top = 10, FormattedValues = true, Select = new string[] { "name" }, OrderBy = new string[] { "name" } }); @@ -174,9 +174,9 @@ public void TestApply() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); - var opps = await api.GetList("opportunities", new CRMGetListOptions() { Apply= "aggregate(estimatedvalue with sum as total)" }); + var opps = await api.GetList("opportunities", new CRMGetListOptions() { Apply = "aggregate(estimatedvalue with sum as total)" }); System.Diagnostics.Trace.WriteLine("finished"); @@ -190,20 +190,20 @@ public void TestExpandQuery() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); dynamic whoamiResults = await api.ExecuteFunction("WhoAmI"); CRMGetListOptions userOptions = new CRMGetListOptions() { - Expand = new CRMExpandOptions[] + Expand = new CRMExpandOptions[] { new CRMExpandOptions() { Property="businessunitid", Select = new string[] { "businessunitid","name","websiteurl" } } } }; - - var userResults = await api.Get("systemusers",Guid.Parse(whoamiResults.UserId),QueryOptions:userOptions); + + var userResults = await api.Get("systemusers", Guid.Parse(whoamiResults.UserId), QueryOptions: userOptions); CRMGetListOptions buOptions = new CRMGetListOptions() { @@ -235,14 +235,14 @@ public void TestAltKeyUpdate() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); string statid = "2bf3c48a-de2d-e511-80f8-c4346bac7da8"; dynamic data = new ExpandoObject(); data.tt_name = "test"; data.tt_blocks = 1; data.tt_externalstatid = statid; var result = await api.Update("test_entity", "test_externalstatid='" + statid + "'", data, Upsert: true); - + }).Wait(); } @@ -252,9 +252,9 @@ public void TestAltKeyGet() { Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); string statid = "2bf3c48a-de2d-e511-80f8-c4346bac7da8"; - + var result = await api.Get("test_entity", $"test_externalstatid='{statid}'"); }).Wait(); } @@ -264,8 +264,8 @@ public void TestFileFields() { Task.Run(async () => { - var api = GetAPI(); - + var api = await GetAPI(); + dynamic data = new ExpandoObject(); data.name = "test " + DateTime.Now.ToString(); @@ -274,7 +274,7 @@ public void TestFileFields() var fileData = File.ReadAllBytes("c:\\test\\logo.jpg"); await api.UpdateFileData("accounts", createdID, "cr0e2_logo", "logo.jpg", fileData); var getData = await api.GetFileData("accounts", createdID, "cr0e2_logo"); - File.WriteAllBytes("c:\\test\\logoGet.jpg",getData); + File.WriteAllBytes("c:\\test\\logoGet.jpg", getData); }).Wait(); diff --git a/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs index 4ab60e9..c7b0f53 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/BasicChangeTrackingTests.cs @@ -14,7 +14,7 @@ public void TestMethod1() Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); var results = await api.GetList("accounts", new Requests.CRMGetListOptions() { TrackChanges=true, FormattedValues = true }); diff --git a/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs b/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs index 1912a49..37cf29b 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/BasicMetadataTests.cs @@ -16,7 +16,7 @@ public void TestOptionSetNames() { Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); var optionSet = await api.GetOptionSetByName("need"); @@ -31,7 +31,7 @@ public void TestEntitySetNames() { Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); var entityNameList = await api.GetEntityDisplayNameList(); @@ -46,7 +46,7 @@ public void TestAttributeNames() { Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); var entityNameList = await api.GetEntityDisplayNameList(); @@ -65,7 +65,7 @@ public void TestCopyAttribute() { Task.Run(async () => { - var api = GetAPI(); + var api = await GetAPI(); var entityNameList = await api.GetEntityDisplayNameList(); diff --git a/dotnet/Xrm.Tools.WebAPI.Test/Properties/AssemblyInfo.cs b/dotnet/Xrm.Tools.WebAPI.Test/Properties/AssemblyInfo.cs index 8850dfe..37abcd9 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/Properties/AssemblyInfo.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Xrm.Tools.WebAPI.Test")] -[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/dotnet/Xrm.Tools.WebAPI.Test/UnitTestBaseClass.cs b/dotnet/Xrm.Tools.WebAPI.Test/UnitTestBaseClass.cs index f09959e..74aa1c9 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/UnitTestBaseClass.cs +++ b/dotnet/Xrm.Tools.WebAPI.Test/UnitTestBaseClass.cs @@ -1,6 +1,8 @@ -using System; +using Microsoft.IdentityModel.Clients.ActiveDirectory; +using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Text; using System.Threading.Tasks; @@ -8,11 +10,19 @@ namespace Xrm.Tools.WebAPI.Test { public class UnitTestBaseClass { - public CRMWebAPI GetAPI() + public async Task GetAPI() { + string authority = "https://login.microsoftonline.com/"; + string clientId = ""; + string crmBaseUrl = "https://xx.crm.dynamics.com"; + string clientSecret = ""; + string tenantID = ""; - CRMWebAPI api = new CRMWebAPI("https://orgname.api.crm.dynamics.com/api/data/v9.0/", ""); - return api; + var clientcred = new ClientCredential(clientId, clientSecret); + var authContext = new AuthenticationContext(authority + tenantID); + var authenticationResult = await authContext.AcquireTokenAsync(crmBaseUrl, clientcred); + + return new CRMWebAPI(crmBaseUrl + "/api/data/v9.1/", authenticationResult.AccessToken); } } diff --git a/dotnet/Xrm.Tools.WebAPI.Test/Xrm.Tools.WebAPI.Test.csproj b/dotnet/Xrm.Tools.WebAPI.Test/Xrm.Tools.WebAPI.Test.csproj index 55e3ef1..2854e55 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/Xrm.Tools.WebAPI.Test.csproj +++ b/dotnet/Xrm.Tools.WebAPI.Test/Xrm.Tools.WebAPI.Test.csproj @@ -8,7 +8,7 @@ Properties Xrm.Tools.WebAPI.Test Xrm.Tools.WebAPI.Test - v4.6 + v4.6.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 @@ -16,6 +16,7 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest + true @@ -36,12 +37,31 @@ - - ..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll - True + + ..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.29.0\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll + + + ..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.29.0\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll + + + ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll - + + ..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll + + + ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll + + + ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + + + ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + + + ..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll + diff --git a/dotnet/Xrm.Tools.WebAPI.Test/app.config b/dotnet/Xrm.Tools.WebAPI.Test/app.config index de5386a..5346a83 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/app.config +++ b/dotnet/Xrm.Tools.WebAPI.Test/app.config @@ -4,8 +4,56 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/dotnet/Xrm.Tools.WebAPI.Test/packages.config b/dotnet/Xrm.Tools.WebAPI.Test/packages.config index ea864d9..e5df1f2 100644 --- a/dotnet/Xrm.Tools.WebAPI.Test/packages.config +++ b/dotnet/Xrm.Tools.WebAPI.Test/packages.config @@ -1,5 +1,10 @@  - - + + + + + + + \ No newline at end of file diff --git a/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs b/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs index 7bc3e50..3f0ad11 100644 --- a/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs +++ b/dotnet/Xrm.Tools.WebAPI/CRMWebAPI.cs @@ -1,290 +1,414 @@ -// ===================================================================== -// File: CRMWebAPI -// Summary: Helper library for working with CRM Web API -// ===================================================================== -// -// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A -// PARTICULAR PURPOSE. -// -// Any use or other rights related to this source code, resulting object code or -// related artifacts are controlled the prevailing EULA in effect. See the EULA -// for detail rights. In the event no EULA was provided contact copyright holder -// for a current copy. -// -// ===================================================================== -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Dynamic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using Xrm.Tools.WebAPI.Requests; -using Xrm.Tools.WebAPI.Results; - - -namespace Xrm.Tools.WebAPI -{ - public class CRMWebAPI - { - private HttpClient _httpClient = null; - private CRMWebAPIConfig _crmWebAPIConfig; - - /// - /// Instantiate the CRMWebAPI using the CRMWebAPIConfig, if NetworkCredentials are present it is assumed a on-premisse connection type. - /// - /// Api Config Object, it contais the - public CRMWebAPI(CRMWebAPIConfig crmWebAPIConfig) - { - _crmWebAPIConfig = crmWebAPIConfig; - - if (_crmWebAPIConfig.NetworkCredential != null) - _httpClient = new HttpClient(new HttpClientHandler {Credentials = _crmWebAPIConfig.NetworkCredential}); - else - { - _httpClient = new HttpClient(); - _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _crmWebAPIConfig.AccessToken); - } - - SetHttpClientDefaults(_crmWebAPIConfig.CallerID); - } - - /// - /// - /// - /// CRM API base URL e.g. https://orgname.api.crm.dynamics.com/api/data/v8.0/ - /// allows for hard coded access token for testing - /// user id to impersonate on calls - /// method to call to refresh access token, called before each use of token - public CRMWebAPI(string apiUrl, string accessToken, Guid callerID = default(Guid), Func> getAccessToken = null) - { - _crmWebAPIConfig = new CRMWebAPIConfig - { - APIUrl = apiUrl, - AccessToken = accessToken, - CallerID = callerID, - GetAccessToken = getAccessToken - }; - - _httpClient = new HttpClient(); - _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _crmWebAPIConfig.AccessToken); - SetHttpClientDefaults(callerID); - } - - /// - /// On-premise Active Directory with Credentials - /// - /// - /// - public CRMWebAPI(string apiUrl, NetworkCredential networkCredential = null, Guid callerID = default(Guid)) - { - _crmWebAPIConfig = new CRMWebAPIConfig - { - APIUrl = apiUrl, - NetworkCredential = networkCredential, - CallerID = callerID - }; - - if (_crmWebAPIConfig.NetworkCredential != null) - _httpClient = new HttpClient(new HttpClientHandler { Credentials = networkCredential }); - else - _httpClient = new HttpClient(); - - SetHttpClientDefaults(callerID); - } - - /// - /// Retrieve a list of records based on query options - /// - /// e.g. accounts - /// Filter, OrderBy,Select, and other options - /// - public async Task> GetList(string uri, CRMGetListOptions QueryOptions = null) - { - await CheckAuthToken(); - - string fullUrl = BuildGetUrl(uri, QueryOptions); - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("GET"), fullUrl); - FillPreferHeader(request, QueryOptions); - - var results = await _httpClient.SendAsync(request); - - EnsureSuccessStatusCode(results); - var data = await results.Content.ReadAsStringAsync(); - CRMGetListResult resultList = new CRMGetListResult(); - resultList.List = new List(); - - var values = JObject.Parse(data); - var valueList = values["value"].ToList(); - foreach (var value in valueList) - { - if(_crmWebAPIConfig.ResolveUnicodeNames) - FormatResultProperties( (JObject) value); - resultList.List.Add(value.ToObject()); - } - - var deltaLink = values["@odata.deltaLink"]; - if (deltaLink != null) - resultList.TrackChangesLink = deltaLink.ToString(); - var recordCount = values["@odata.count"]; - if (recordCount != null) - resultList.Count = int.Parse(recordCount.ToString()); - var nextLink = values["@odata.nextLink"]; - while (nextLink != null) - { - HttpRequestMessage nextrequest = new HttpRequestMessage(new HttpMethod("GET"), nextLink.ToString()); +// ===================================================================== +// File: CRMWebAPI +// Summary: Helper library for working with CRM Web API +// ===================================================================== +// +// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY +// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +// PARTICULAR PURPOSE. +// +// Any use or other rights related to this source code, resulting object code or +// related artifacts are controlled the prevailing EULA in effect. See the EULA +// for detail rights. In the event no EULA was provided contact copyright holder +// for a current copy. +// +// ===================================================================== +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Polly; +using Polly.Extensions.Http; +using Polly.Registry; +using System; +using System.Collections.Generic; +using System.Dynamic; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Reflection; +using System.Security; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml; +using Xrm.Tools.WebAPI.Requests; +using Xrm.Tools.WebAPI.Results; + + +namespace Xrm.Tools.WebAPI +{ + public class CRMWebAPI + { + private HttpClient _httpClient = null; + private CRMWebAPIConfig _crmWebAPIConfig; + + // Create a policy registry + private PolicyRegistry _registry; + + /// + /// Instantiate the CRMWebAPI using the CRMWebAPIConfig, if NetworkCredentials are present it is assumed a on-premisse connection type. + /// + /// Api Config Object, it contais the + public CRMWebAPI(CRMWebAPIConfig crmWebAPIConfig) + { + _crmWebAPIConfig = crmWebAPIConfig; + + if (_crmWebAPIConfig.NetworkCredential != null) + _httpClient = new HttpClient(new HttpClientHandler { Credentials = _crmWebAPIConfig.NetworkCredential }); + else + { + _httpClient = new HttpClient(); + _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _crmWebAPIConfig.AccessToken); + } + + SetHttpClientDefaults(_crmWebAPIConfig.CallerID, _crmWebAPIConfig.Timeout); + InitializePollyRegistry(); + } + + /// + /// + /// + /// CRM API base URL e.g. https://orgname.api.crm.dynamics.com/api/data/v9.0/ + /// allows for hard coded access token for testing + /// user id to impersonate on calls + /// method to call to refresh access token, called before each use of token + public CRMWebAPI(string apiUrl, string accessToken, Guid callerID = default(Guid), Func> getAccessToken = null, TimeSpan? timeout = null) + { + _crmWebAPIConfig = new CRMWebAPIConfig + { + APIUrl = apiUrl, + AccessToken = accessToken, + CallerID = callerID, + GetAccessToken = getAccessToken, + Timeout = timeout.GetValueOrDefault(TimeSpan.FromMinutes(2.0)) + }; + + _httpClient = new HttpClient(); + _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _crmWebAPIConfig.AccessToken); + + SetHttpClientDefaults(callerID, timeout); + InitializePollyRegistry(); + } + + /// + /// On-premise Active Directory with Credentials + /// + /// + /// + public CRMWebAPI(string apiUrl, NetworkCredential networkCredential = null, Guid callerID = default(Guid), TimeSpan? timeout = null) + { + _crmWebAPIConfig = new CRMWebAPIConfig + { + APIUrl = apiUrl, + NetworkCredential = networkCredential, + CallerID = callerID, + Timeout = timeout.GetValueOrDefault(TimeSpan.FromMinutes(2.0)) + }; + + if (_crmWebAPIConfig.NetworkCredential != null) + _httpClient = new HttpClient(new HttpClientHandler { Credentials = networkCredential }); + else + _httpClient = new HttpClient(); + + SetHttpClientDefaults(callerID, timeout); + InitializePollyRegistry(); + } + + /// + /// Adds wait and retry async Polly policies to the registry + /// + private void InitializePollyRegistry() + { + // Create wait and retry policy that will retry up to 3 times and use exponential backoff as default. + // However, if Retry-After is provided then that will be used instead + IAsyncPolicy waitAndRetryPolicy = HttpPolicyExtensions + .HandleTransientHttpError() // HttpRequestException, 5XX and 408 + .OrResult(response => (int)response.StatusCode == 429) // Retry-After + .WaitAndRetryAsync( + retryCount: 3, + sleepDurationProvider: (retryAttempt, context) => + { + var retryAfter = TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)); //default exponential backoff + + if (context == null || !context.ContainsKey("Retry-After")) + { + return retryAfter; + } + else + { + return TimeSpan.FromSeconds(Convert.ToInt32(context["Retry-After"])); + } + }, + onRetryAsync: (exception, timespan, retryAttempt, context) => + { + Console.WriteLine($"Retry Attempt No: {retryAttempt}"); + return Task.CompletedTask; + }); + + // Create a noOp policy, so that can be used for idempotent requests + IAsyncPolicy noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy(); + + // Create policy registry and add the policies to it + _registry = new PolicyRegistry() + { + { "WaitAndRetryPolicy", waitAndRetryPolicy }, + { "NoOpPolicy", noOpPolicy }, + }; + } + + /// + /// Retrieve a list of records based on query options + /// + /// e.g. accounts + /// Filter, OrderBy,Select, and other options + /// + public async Task> GetList(string uri, CRMGetListOptions QueryOptions = null) + { + await CheckAuthToken(); + + string fullUrl = BuildGetUrl(uri, QueryOptions); + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, fullUrl); + FillPreferHeader(request, QueryOptions); + + //var results = await _httpClient.SendAsync(request); + var results = await _registry.Get>("WaitAndRetryPolicy") + .ExecuteAsync(() => _httpClient.SendAsync(request)); + + EnsureSuccessStatusCode(results); + var data = await results.Content.ReadAsStringAsync(); + CRMGetListResult resultList = new CRMGetListResult(); + resultList.List = new List(); + + var values = JObject.Parse(data); + var valueList = values["value"].ToList(); + foreach (var value in valueList) + { + if (_crmWebAPIConfig.ResolveUnicodeNames) + FormatResultProperties((JObject)value); + resultList.List.Add(value.ToObject()); + } + + var deltaLink = values["@odata.deltaLink"]; + if (deltaLink != null) + resultList.TrackChangesLink = deltaLink.ToString(); + var recordCount = values["@odata.count"]; + if (recordCount != null) + resultList.Count = int.Parse(recordCount.ToString()); + var nextLink = values["@odata.nextLink"]; + while (nextLink != null) + { + HttpRequestMessage nextrequest = new HttpRequestMessage(HttpMethod.Get, nextLink.ToString()); FillPreferHeader(nextrequest, QueryOptions); - var nextResults = await _httpClient.SendAsync(nextrequest); - - EnsureSuccessStatusCode(nextResults); - var nextData = await nextResults.Content.ReadAsStringAsync(); - - var nextValues = JObject.Parse(nextData); - var nextValueList = nextValues["value"].ToList(); - foreach (var nextvalue in nextValueList) + //var nextResults = await _httpClient.SendAsync(nextrequest); + var nextResults = await _registry.Get>("WaitAndRetryPolicy") + .ExecuteAsync(() => _httpClient.SendAsync(nextrequest)); + + EnsureSuccessStatusCode(nextResults); + var nextData = await nextResults.Content.ReadAsStringAsync(); + + var nextValues = JObject.Parse(nextData); + var nextValueList = nextValues["value"].ToList(); + foreach (var nextvalue in nextValueList) resultList.List.Add(nextvalue.ToObject()); var nextDeltaLink = nextValues["@odata.deltaLink"]; if (nextDeltaLink != null) resultList.TrackChangesLink = nextDeltaLink.ToString(); - - nextLink = nextValues["@odata.nextLink"]; - } - - return resultList; - } - /// - /// Retrieve a list of records based on query options - /// - /// - /// e.g. accounts - /// Filter, OrderBy,Select, and other options - /// - public async Task> GetList(string uri, CRMGetListOptions QueryOptions = null) - { - await CheckAuthToken(); - - string fullUrl = BuildGetUrl(uri, QueryOptions); - - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("GET"), fullUrl); - FillPreferHeader(request, QueryOptions); - - var results = await _httpClient.SendAsync(request); - - EnsureSuccessStatusCode(results); - var data = await results.Content.ReadAsStringAsync(); - var values = JObject.Parse(data); - CRMGetListResult resultList = new CRMGetListResult(); - resultList.List = new List(); - - foreach (var value in values["value"].ToList()) - { - if(_crmWebAPIConfig.ResolveUnicodeNames) - FormatResultProperties((JObject)value); - resultList.List.Add(value.ToObject()); - } - - var deltaLink = values["@odata.deltaLink"]; - if (deltaLink != null) - resultList.TrackChangesLink = deltaLink.ToString(); - - var nextLink = values["@odata.nextLink"]; - var recordCount = values["@odata.count"]; - if (recordCount != null) - resultList.Count = int.Parse(recordCount.ToString()); - - while (nextLink != null) - { - var nextResults = await _httpClient.GetAsync(nextLink.ToString()); - EnsureSuccessStatusCode(nextResults); - var nextData = await nextResults.Content.ReadAsStringAsync(); - - var nextValues = JObject.Parse(nextData); - foreach (var value in nextValues["value"].ToList()) - { - resultList.List.Add(value.ToObject()); - } - nextLink = nextValues["@odata.nextLink"]; - } - return resultList; - } - - /// - /// Get count of matching records. - /// - /// Note: This returns up to 5,000 records matching criteria it will not reflect all records over 5,000 due to - /// a limitiation with CRM internal handling of retrieval of the count - /// - /// e.g. accounts - /// Filter, OrderBy,Select, and other options - /// - public async Task GetCount(string uri, CRMGetListOptions QueryOptions = null) - { - await CheckAuthToken(); - if (QueryOptions != null) - QueryOptions.IncludeCount = false; - string fullUrl = BuildGetUrl(uri+"/$count", QueryOptions); - var results = await _httpClient.GetAsync(fullUrl); - EnsureSuccessStatusCode(results); - var data = await results.Content.ReadAsStringAsync(); - - return int.Parse(data); - - } - - /// - /// get a single record by entityID with the specified return type - /// - /// - /// - /// - /// ExpandoObject - public async Task Get(string entityCollection, Guid entityID, CRMGetListOptions QueryOptions = null) - { - return await Get(entityCollection, entityID.ToString(), QueryOptions); - } - - /// - /// get a single record by entityID with the specified return type - /// - /// - /// - /// - /// - public async Task Get(string entityCollection, Guid entityID, CRMGetListOptions QueryOptions = null) - { - return await Get(entityCollection, entityID.ToString(), QueryOptions); - } - - /// - /// get a single record by alternate or entityID key with the specified return type - /// - /// - /// - /// Alternate key or entity ID - /// - /// - public async Task Get(string entityCollection, string key, CRMGetListOptions QueryOptions = null) - { - await CheckAuthToken(); - - string fullUrl = string.Empty; - if (key.Equals(Guid.Empty.ToString()) || String.IsNullOrEmpty(key)) - fullUrl = BuildGetUrl(entityCollection, QueryOptions); - else - fullUrl = BuildGetUrl(entityCollection + "(" + key + ")", QueryOptions); - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("GET"), fullUrl); - + + nextLink = nextValues["@odata.nextLink"]; + } + + //Would like to refactor fetch based retrieve into another function overload but to not break existing implementations we'll do it here, ugly indeed. + if (!string.IsNullOrEmpty(QueryOptions.FetchXml) && QueryOptions.FetchAllRecords) + { + QueryOptions.PageNumber++; + + var fetchXMLPagingCookie = values["@Microsoft.Dynamics.CRM.fetchxmlpagingcookie"]?.ToString(); + + if (!string.IsNullOrEmpty(fetchXMLPagingCookie)) + { + var pageCookie = fetchXMLPagingCookie.ToString().Replace("+", " "); + pageCookie = Uri.UnescapeDataString(Uri.UnescapeDataString(pageCookie)); + pageCookie = pageCookie.Substring(pageCookie.IndexOf("pagingcookie"), (pageCookie.IndexOf("/>"))); + pageCookie = pageCookie.Substring(pageCookie.IndexOf("=") + 2, (pageCookie.IndexOf(@"/>") - 3)); + + var fetchXML = CreateXml(QueryOptions.FetchXml, pageCookie, QueryOptions.PageNumber, QueryOptions.PageSize); + QueryOptions.FetchXml = fetchXML; + + //Use recurrsion to get the subsequent pages + var result = await GetList(uri, QueryOptions); + + resultList.Count += result.Count; + resultList.List.AddRange(result.List); + resultList.TrackChangesLink = result.TrackChangesLink; + } + } + + return resultList; + } + + /// + /// Retrieve a list of records based on query options + /// + /// + /// e.g. accounts + /// Filter, OrderBy,Select, and other options + /// + public async Task> GetList(string uri, CRMGetListOptions QueryOptions = null) + { + await CheckAuthToken(); + + string fullUrl = BuildGetUrl(uri, QueryOptions); + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, fullUrl); + FillPreferHeader(request, QueryOptions); + + //var results = await _httpClient.SendAsync(request); + var results = await _registry.Get>("WaitAndRetryPolicy") + .ExecuteAsync(() => _httpClient.SendAsync(request)); + + EnsureSuccessStatusCode(results); + var data = await results.Content.ReadAsStringAsync(); + var values = JObject.Parse(data); + CRMGetListResult resultList = new CRMGetListResult(); + resultList.List = new List(); + + foreach (var value in values["value"].ToList()) + { + if (_crmWebAPIConfig.ResolveUnicodeNames) + FormatResultProperties((JObject)value); + resultList.List.Add(value.ToObject()); + } + + var deltaLink = values["@odata.deltaLink"]; + if (deltaLink != null) + resultList.TrackChangesLink = deltaLink.ToString(); + + var nextLink = values["@odata.nextLink"]; + var recordCount = values["@odata.count"]; + if (recordCount != null) + resultList.Count = int.Parse(recordCount.ToString()); + + while (nextLink != null) + { + //var nextResults = await _httpClient.GetAsync(nextLink.ToString()); + var nextResults = await _registry.Get>("WaitAndRetryPolicy") + .ExecuteAsync(() => _httpClient.GetAsync(nextLink.ToString())); + + EnsureSuccessStatusCode(nextResults); + var nextData = await nextResults.Content.ReadAsStringAsync(); + + var nextValues = JObject.Parse(nextData); + foreach (var value in nextValues["value"].ToList()) + { + resultList.List.Add(value.ToObject()); + } + nextLink = nextValues["@odata.nextLink"]; + } + + //Would like to refactor fetch based retrieve into another function overload but to not break existing implementations we'll do it here, ugly indeed. + if (!string.IsNullOrEmpty(QueryOptions.FetchXml) && QueryOptions.FetchAllRecords) + { + QueryOptions.PageNumber++; + + var fetchXMLPagingCookie = values["@Microsoft.Dynamics.CRM.fetchxmlpagingcookie"]?.ToString(); + + if (!string.IsNullOrEmpty(fetchXMLPagingCookie)) + { + var pageCookie = fetchXMLPagingCookie.ToString().Replace("+", " "); + pageCookie = Uri.UnescapeDataString(Uri.UnescapeDataString(pageCookie)); + pageCookie = pageCookie.Substring(pageCookie.IndexOf("pagingcookie"), (pageCookie.IndexOf("/>"))); + pageCookie = pageCookie.Substring(pageCookie.IndexOf("=") + 2, (pageCookie.IndexOf(@"/>") - 3)); + + var fetchXML = CreateXml(QueryOptions.FetchXml, pageCookie, QueryOptions.PageNumber, QueryOptions.PageSize); + QueryOptions.FetchXml = fetchXML; + + //Use recurrsion to get the subsequent pages + var result = await GetList(uri, QueryOptions); + + resultList.Count += result.Count; + resultList.List.AddRange(result.List); + resultList.TrackChangesLink = result.TrackChangesLink; + } + } + + return resultList; + } + + /// + /// Get count of matching records. + /// + /// Note: This returns up to 5,000 records matching criteria it will not reflect all records over 5,000 due to + /// a limitiation with CRM internal handling of retrieval of the count + /// + /// e.g. accounts + /// Filter, OrderBy,Select, and other options + /// + public async Task GetCount(string uri, CRMGetListOptions QueryOptions = null) + { + await CheckAuthToken(); + if (QueryOptions != null) + QueryOptions.IncludeCount = false; + string fullUrl = BuildGetUrl(uri + "/$count", QueryOptions); + + //var results = await _httpClient.GetAsync(fullUrl); + var results = await _registry.Get>("WaitAndRetryPolicy") + .ExecuteAsync(() => _httpClient.GetAsync(fullUrl)); + + EnsureSuccessStatusCode(results); + var data = await results.Content.ReadAsStringAsync(); + + return int.Parse(data); + + } + + /// + /// get a single record by entityID with the specified return type + /// + /// + /// + /// + /// ExpandoObject + public async Task Get(string entityCollection, Guid entityID, CRMGetListOptions QueryOptions = null) + { + return await Get(entityCollection, entityID.ToString(), QueryOptions); + } + + /// + /// get a single record by entityID with the specified return type + /// + /// + /// + /// + /// + public async Task Get(string entityCollection, Guid entityID, CRMGetListOptions QueryOptions = null) + { + return await Get(entityCollection, entityID.ToString(), QueryOptions); + } + + /// + /// get a single record by alternate or entityID key with the specified return type + /// + /// + /// + /// Alternate key or entity ID + /// + /// + public async Task Get(string entityCollection, string key, CRMGetListOptions QueryOptions = null) + { + await CheckAuthToken(); + + string fullUrl = string.Empty; + if (key.Equals(Guid.Empty.ToString()) || String.IsNullOrEmpty(key)) + fullUrl = BuildGetUrl(entityCollection, QueryOptions); + else + fullUrl = BuildGetUrl(entityCollection + "(" + key + ")", QueryOptions); + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, fullUrl); + if (QueryOptions != null) { if (QueryOptions.IncludeAnnotations) @@ -296,350 +420,344 @@ public async Task Get(string entityCollection, string ke request.Headers.Add("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\""); } } - - var results = await _httpClient.SendAsync(request); - - EnsureSuccessStatusCode(results); - var data = await results.Content.ReadAsStringAsync(); - var value = JObject.Parse(data); - if (_crmWebAPIConfig.ResolveUnicodeNames) - FormatResultProperties(value); - - return value.ToObject(); + + //var results = await _httpClient.SendAsync(request); + var results = await _registry.Get>("WaitAndRetryPolicy") + .ExecuteAsync(() => _httpClient.SendAsync(request)); + + EnsureSuccessStatusCode(results); + var data = await results.Content.ReadAsStringAsync(); + var value = JObject.Parse(data); + if (_crmWebAPIConfig.ResolveUnicodeNames) + FormatResultProperties(value); + + return value.ToObject(); + } + + /// + /// create a new record + /// + /// + /// + /// + public async Task Create(string entityCollection, object data) + { + await CheckAuthToken(); + + var fullUrl = _crmWebAPIConfig.APIUrl + entityCollection; + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, fullUrl); + + var jsonData = JsonConvert.SerializeObject(data); + + request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); + + var response = await _httpClient.SendAsync(request); + + EnsureSuccessStatusCode(response, jsonData: jsonData); + + Guid idGuid = GetEntityIDFromResponse(response); + + return idGuid; + } + + /// + /// create multiple records at once using a batch + /// + /// + /// + /// + public async Task Create(string entityCollection, object[] datalist) + { + await CheckAuthToken(); + + var httpClient = new HttpClient(); + + httpClient.DefaultRequestHeaders.Authorization = + new AuthenticationHeaderValue("Bearer", _crmWebAPIConfig.AccessToken); + httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); + httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); + var batchid = "batch_" + Guid.NewGuid().ToString(); + + MultipartContent batchContent = new MultipartContent("mixed", batchid); + var changesetID = "changeset_" + Guid.NewGuid().ToString(); + MultipartContent changeSetContent = new MultipartContent("mixed", changesetID); + + int contentID = 1; + foreach (var data in datalist) + { + HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, _crmWebAPIConfig.APIUrl + entityCollection); + + req.Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"); + HttpMessageContent content = new HttpMessageContent(req); + content.Headers.Remove("Content-Type"); + content.Headers.TryAddWithoutValidation("Content-Type", "application/http"); + content.Headers.TryAddWithoutValidation("Content-Transfer-Encoding", "binary"); + content.Headers.TryAddWithoutValidation("Content-ID", contentID.ToString()); + contentID++; + changeSetContent.Add(content); + } + + batchContent.Add(changeSetContent); + + HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, _crmWebAPIConfig.APIUrl + "$batch"); + + batchRequest.Content = batchContent; + + var batchstring = await batchRequest.Content.ReadAsStringAsync(); + + var response = await httpClient.SendAsync(batchRequest); + var responseString = response.Content.ReadAsStringAsync(); + MultipartMemoryStreamProvider batchStream = await response.Content.ReadAsMultipartAsync(); ; + var changesetStream = batchStream.Contents.FirstOrDefault(); + + StreamContent changesetFixedContent = FixupChangeStreamDueToBug(changesetStream); + + var changesetFixedStream = await changesetFixedContent.ReadAsMultipartAsync(); + CRMBatchResult finalResult = new CRMBatchResult(); + finalResult.ResultItems = new List(); + + foreach (var responseContent in changesetFixedStream.Contents) + { + var fixedREsponseContent = FixupToAddCorrectHttpContentType(responseContent); + var individualResponseString = await fixedREsponseContent.ReadAsStringAsync(); + var indivdualResponse = await fixedREsponseContent.ReadAsHttpResponseMessageAsync(); + var idString = indivdualResponse.Headers.GetValues("OData-EntityId").FirstOrDefault(); + idString = idString.Replace(_crmWebAPIConfig.APIUrl + entityCollection, "").Replace("(", "").Replace(")", ""); + CRMBatchResultItem resultItem = new CRMBatchResultItem(); + resultItem.EntityID = Guid.Parse(idString); + finalResult.ResultItems.Add(resultItem); + } + + return finalResult; + } + + /// + /// currently the content type for individual responses is missing msgtype=response that the API needs to parse it + /// + /// + /// + private static HttpContent FixupToAddCorrectHttpContentType(HttpContent changesetStream) + { + changesetStream.Headers.Remove("Content-Type"); + changesetStream.Headers.Add("Content-Type", "application/http; msgtype=response"); + + return changesetStream; + + } + + /// + /// currently the change set is missing a new line at the end - this fixes that + /// + /// + /// + private static StreamContent FixupChangeStreamDueToBug(HttpContent changesetStream) + { + Stream changesetResultStream = changesetStream.ReadAsStreamAsync().Result; + MemoryStream tempStream = new MemoryStream(); + changesetResultStream.CopyTo(tempStream); + + tempStream.Seek(0, SeekOrigin.End); + StreamWriter writer = new StreamWriter(tempStream); + //add new line to fix stream + writer.WriteLine(); + writer.Flush(); + tempStream.Position = 0; + + StreamContent changesetFixedContent = new StreamContent(tempStream); + foreach (var header in changesetStream.Headers) + { + changesetFixedContent.Headers.Add(header.Key, header.Value); + } + + return changesetFixedContent; + } + + /// + /// Update or Insert based on a match with the entityID + /// + /// + /// + /// + /// + /// + /// + public async Task Update(string entityCollection, Guid entityID, object data, bool Upsert = true) + { + return await Update(entityCollection, entityID.ToString(), data, Upsert); + } + + /// + /// Update or insert based on match with key provided in form of Field = Value + /// + /// + /// + /// + /// + /// + /// + public async Task Update(string entityCollection, string key, object data, bool Upsert = true) + { + await CheckAuthToken(); + CRMUpdateResult result = new CRMUpdateResult(); + var fullUrl = _crmWebAPIConfig.APIUrl + entityCollection; + + HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), fullUrl + "(" + key + ")"); + + var jsonData = JsonConvert.SerializeObject(data); + + request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); + + if (!Upsert) + request.Headers.Add("If-Match", "*"); + + var response = await _httpClient.SendAsync(request); + + result.EntityID = GetEntityIDFromResponse(response); + + + if (!response.IsSuccessStatusCode) + { + if ((response.StatusCode == HttpStatusCode.PreconditionFailed) && + (!Upsert)) + { + return result; + } + EnsureSuccessStatusCode(response, jsonData: jsonData); + } + + return result; + + } + + /// + /// delete record + /// + /// + /// + /// + public async Task Delete(string entityCollection, Guid entityID) + { + await CheckAuthToken(); + + var response = await _httpClient.DeleteAsync(_crmWebAPIConfig.APIUrl + entityCollection + "(" + entityID.ToString() + ")"); + + EnsureSuccessStatusCode(response); + + } + + /// + /// execute an unbound function + /// + /// + /// + /// + private async Task ExecuteFunction(string function, KeyValuePair[] parameters = null) + { + await CheckAuthToken(); + var fullUrl = string.Empty; + fullUrl = BuildFunctionActionURI(function, parameters); + var results = await _httpClient.GetAsync(fullUrl); + EnsureSuccessStatusCode(results); + var data = await results.Content.ReadAsStringAsync(); + var values = JsonConvert.DeserializeObject(data); + return values; } - - /// - /// create a new record - /// - /// - /// - /// - public async Task Create(string entityCollection, object data) - { - await CheckAuthToken(); - - var fullUrl = _crmWebAPIConfig.APIUrl + entityCollection; - - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("Post"), fullUrl); - - var jsonData = JsonConvert.SerializeObject(data); - - request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); - - var response = await _httpClient.SendAsync(request); - - EnsureSuccessStatusCode(response,jsonData:jsonData); - - Guid idGuid = GetEntityIDFromResponse(response); - - return idGuid; - } - - /// - /// create multiple records at once using a batch - /// - /// - /// - /// - public async Task Create(string entityCollection, object[] datalist) - { - await CheckAuthToken(); - -#if WINDOWS_APP - throw new NotImplementedException(); -#elif NETCOREAPP1_0 - throw new NotImplementedException(); -#elif NETSTANDARD1_4 - throw new NotImplementedException(); -#elif NETSTANDARD2_0 - throw new NotImplementedException(); -#else - - var httpClient = new HttpClient(); - - httpClient.DefaultRequestHeaders.Authorization = - new AuthenticationHeaderValue("Bearer", _crmWebAPIConfig.AccessToken); - httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); - httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); - var batchid = "batch_" + Guid.NewGuid().ToString(); - - MultipartContent batchContent = new MultipartContent("mixed", batchid); - var changesetID = "changeset_" + Guid.NewGuid().ToString(); - MultipartContent changeSetContent = new MultipartContent("mixed", changesetID); - - int contentID = 1; - foreach (var data in datalist) - { - HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, _crmWebAPIConfig.APIUrl + entityCollection); - - req.Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"); - HttpMessageContent content = new HttpMessageContent(req); - content.Headers.Remove("Content-Type"); - content.Headers.TryAddWithoutValidation("Content-Type", "application/http"); - content.Headers.TryAddWithoutValidation("Content-Transfer-Encoding", "binary"); - content.Headers.TryAddWithoutValidation("Content-ID", contentID.ToString()); - contentID++; - changeSetContent.Add(content); - } - - batchContent.Add(changeSetContent); - - HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, _crmWebAPIConfig.APIUrl + "$batch"); - - batchRequest.Content = batchContent; - - var batchstring = await batchRequest.Content.ReadAsStringAsync(); - - var response = await httpClient.SendAsync(batchRequest); - var responseString = response.Content.ReadAsStringAsync(); - MultipartMemoryStreamProvider batchStream = await response.Content.ReadAsMultipartAsync(); ; - var changesetStream = batchStream.Contents.FirstOrDefault(); - - StreamContent changesetFixedContent = FixupChangeStreamDueToBug(changesetStream); - - var changesetFixedStream = await changesetFixedContent.ReadAsMultipartAsync(); - CRMBatchResult finalResult = new CRMBatchResult(); - finalResult.ResultItems = new List(); - - foreach (var responseContent in changesetFixedStream.Contents) - { - var fixedREsponseContent = FixupToAddCorrectHttpContentType(responseContent); - var individualResponseString = await fixedREsponseContent.ReadAsStringAsync(); - var indivdualResponse = await fixedREsponseContent.ReadAsHttpResponseMessageAsync(); - var idString = indivdualResponse.Headers.GetValues("OData-EntityId").FirstOrDefault(); - idString = idString.Replace(_crmWebAPIConfig.APIUrl + entityCollection, "").Replace("(", "").Replace(")", ""); - CRMBatchResultItem resultItem = new CRMBatchResultItem(); - resultItem.EntityID = Guid.Parse(idString); - finalResult.ResultItems.Add(resultItem); - } - - return finalResult; -#endif - } - /// - /// currently the content type for individual responses is missing msgtype=response that the API needs to parse it - /// - /// - /// - private static HttpContent FixupToAddCorrectHttpContentType(HttpContent changesetStream) - { - changesetStream.Headers.Remove("Content-Type"); - changesetStream.Headers.Add("Content-Type", "application/http; msgtype=response"); - - return changesetStream; - - } - - /// - /// currently the change set is missing a new line at the end - this fixes that - /// - /// - /// - private static StreamContent FixupChangeStreamDueToBug(HttpContent changesetStream) - { - Stream changesetResultStream = changesetStream.ReadAsStreamAsync().Result; - MemoryStream tempStream = new MemoryStream(); - changesetResultStream.CopyTo(tempStream); - - tempStream.Seek(0, SeekOrigin.End); - StreamWriter writer = new StreamWriter(tempStream); - //add new line to fix stream - writer.WriteLine(); - writer.Flush(); - tempStream.Position = 0; - - StreamContent changesetFixedContent = new StreamContent(tempStream); - foreach (var header in changesetStream.Headers) - { - changesetFixedContent.Headers.Add(header.Key, header.Value); - } - - return changesetFixedContent; - } - - - /// - /// Update or Insert based on a match with the entityID - /// - /// - /// - /// - /// - /// - /// - public async Task Update(string entityCollection, Guid entityID, object data, bool Upsert = true) - { - return await Update(entityCollection, entityID.ToString(), data, Upsert); - } - /// - /// Update or insert based on match with key provided in form of Field = Value - /// - /// - /// - /// - /// - /// - /// - public async Task Update(string entityCollection, string key, object data, bool Upsert = true) - { - await CheckAuthToken(); - CRMUpdateResult result = new CRMUpdateResult(); - var fullUrl = _crmWebAPIConfig.APIUrl + entityCollection; - - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), fullUrl + "(" + key + ")"); - - var jsonData = JsonConvert.SerializeObject(data); - - request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); - - if (!Upsert) - request.Headers.Add("If-Match", "*"); - - var response = await _httpClient.SendAsync(request); - - result.EntityID = GetEntityIDFromResponse(response); - - - if (!response.IsSuccessStatusCode) - { - if ((response.StatusCode == HttpStatusCode.PreconditionFailed) && - (!Upsert)) - { - return result; - } - EnsureSuccessStatusCode(response,jsonData:jsonData); - } - - return result; - - } - /// - /// delete record - /// - /// - /// - /// - public async Task Delete(string entityCollection, Guid entityID) - { - await CheckAuthToken(); - - var response = await _httpClient.DeleteAsync(_crmWebAPIConfig.APIUrl + entityCollection + "(" + entityID.ToString() + ")"); - - EnsureSuccessStatusCode(response); - - } - /// - /// execute an unbound function - /// - /// - /// - /// - private async Task ExecuteFunction(string function, KeyValuePair[] parameters = null) - { - await CheckAuthToken(); - var fullUrl = string.Empty; - fullUrl = BuildFunctionActionURI(function, parameters); - var results = await _httpClient.GetAsync(fullUrl); - EnsureSuccessStatusCode(results); - var data = await results.Content.ReadAsStringAsync(); - var values = JsonConvert.DeserializeObject(data); - return values; - } - - - - /// - /// Execute a bound function using object parameters - /// - /// - /// - /// - /// - /// - public async Task ExecuteFunction(string function, string entityCollection, Guid entityID, object data) - { - List> list = ConvertObjectToKeyValuePair(data); - - return await ExecuteFunction(function, entityCollection, entityID, list.ToArray()); - } - /// - /// execute an unbound function using object parameters - /// - /// - /// - /// - public async Task ExecuteFunction(string function, object data=null) - { - List> list = ConvertObjectToKeyValuePair(data); - - return await ExecuteFunction(function, list.ToArray()); - } - - /// - /// Execute an Action - /// - /// - /// - /// - public async Task ExecuteAction(string action, object data) - { - await CheckAuthToken(); - - var fullUrl = string.Format("{0}{1}", _crmWebAPIConfig.APIUrl, action); - - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("Post"), fullUrl); - - var jsonData = JsonConvert.SerializeObject(data); - - request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); - - var results = await _httpClient.SendAsync(request); - - EnsureSuccessStatusCode(results,jsonData:jsonData); - - var resultData = await results.Content.ReadAsStringAsync(); - var values = JsonConvert.DeserializeObject(resultData); - return values; - } - /// - /// Execute a bound action - /// - /// - /// - /// - /// - /// - public async Task ExecuteAction(string action, string entityCollection,Guid entityID,object data) - { - return await ExecuteAction(string.Format("{0}({1})/{2}", entityCollection, entityID.ToString(), action), data); + + /// + /// Execute a bound function using object parameters + /// + /// + /// + /// + /// + /// + public async Task ExecuteFunction(string function, string entityCollection, Guid entityID, object data) + { + List> list = ConvertObjectToKeyValuePair(data); + + return await ExecuteFunction(function, entityCollection, entityID, list.ToArray()); } - /// - /// Associate two entities - /// - /// - /// - /// - /// - /// - /// - public async Task Associate(string fromEntityCollection, Guid fromEntityID, string navProperty, string toEntityCollection, Guid toEntityID) - { - await CheckAuthToken(); - - var fullUrl = _crmWebAPIConfig.APIUrl + fromEntityCollection + $"({fromEntityID})/{navProperty}/$ref"; - - HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("Post"), fullUrl); - - var jsonData = $"{{ '@odata.id': '{_crmWebAPIConfig.APIUrl}{toEntityCollection}({toEntityID})' }}"; - - request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); - - var response = await _httpClient.SendAsync(request); - - EnsureSuccessStatusCode(response, jsonData: jsonData); - - return true; + /// + /// execute an unbound function using object parameters + /// + /// + /// + /// + public async Task ExecuteFunction(string function, object data = null) + { + List> list = ConvertObjectToKeyValuePair(data); + + return await ExecuteFunction(function, list.ToArray()); + } + + /// + /// Execute an Action + /// + /// + /// + /// + public async Task ExecuteAction(string action, object data) + { + await CheckAuthToken(); + + var fullUrl = string.Format("{0}{1}", _crmWebAPIConfig.APIUrl, action); + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, fullUrl); + + var jsonData = JsonConvert.SerializeObject(data); + + request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); + + var results = await _httpClient.SendAsync(request); + + EnsureSuccessStatusCode(results, jsonData: jsonData); + + var resultData = await results.Content.ReadAsStringAsync(); + var values = JsonConvert.DeserializeObject(resultData); + return values; + } + + /// + /// Execute a bound action + /// + /// + /// + /// + /// + /// + public async Task ExecuteAction(string action, string entityCollection, Guid entityID, object data) + { + return await ExecuteAction(string.Format("{0}({1})/{2}", entityCollection, entityID.ToString(), action), data); + } + + /// + /// Associate two entities + /// + /// + /// + /// + /// + /// + /// + public async Task Associate(string fromEntityCollection, Guid fromEntityID, string navProperty, string toEntityCollection, Guid toEntityID) + { + await CheckAuthToken(); + + var fullUrl = _crmWebAPIConfig.APIUrl + fromEntityCollection + $"({fromEntityID})/{navProperty}/$ref"; + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, fullUrl); + + var jsonData = $"{{ '@odata.id': '{_crmWebAPIConfig.APIUrl}{toEntityCollection}({toEntityID})' }}"; + + request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json"); + + var response = await _httpClient.SendAsync(request); + + EnsureSuccessStatusCode(response, jsonData: jsonData); + + return true; } /// @@ -651,20 +769,20 @@ public async Task Associate(string fromEntityCollection, Guid fromEntityID /// /// /// - public async Task DeleteAssociation(string fromEntitycollection, Guid fromEntityID, string navProperty, string toEntityCollection, Guid toEntityID) - { - await CheckAuthToken(); - + public async Task DeleteAssociation(string fromEntitycollection, Guid fromEntityID, string navProperty, string toEntityCollection, Guid toEntityID) + { + await CheckAuthToken(); + var url = $"{_crmWebAPIConfig.APIUrl}{fromEntitycollection}({fromEntityID})/{navProperty}/$ref"; if (!string.IsNullOrEmpty(toEntityCollection) && toEntityID != Guid.Empty) - url += $"?$id={_crmWebAPIConfig.APIUrl}{toEntityCollection}({toEntityID})"; - - - var response = await _httpClient.DeleteAsync(url); - - EnsureSuccessStatusCode(response); - + url += $"?$id={_crmWebAPIConfig.APIUrl}{toEntityCollection}({toEntityID})"; + + + var response = await _httpClient.DeleteAsync(url); + + EnsureSuccessStatusCode(response); + } /// @@ -674,15 +792,15 @@ public async Task DeleteAssociation(string fromEntitycollection, Guid fromEntity /// /// /// - public async Task GetFileData(string entityCollection, Guid entityID, string fieldName) - { - await CheckAuthToken(); - - var fullUrl = _crmWebAPIConfig.APIUrl + $"{entityCollection}({entityID.ToString()})/{fieldName}/$value?size=full"; + public async Task GetFileData(string entityCollection, Guid entityID, string fieldName) + { + await CheckAuthToken(); + + var fullUrl = _crmWebAPIConfig.APIUrl + $"{entityCollection}({entityID.ToString()})/{fieldName}/$value?size=full"; var increment = 4194304; var from = 0; var fileSize = 0; - byte[] downloaded = null; + byte[] downloaded = null; do { using (var request = new HttpRequestMessage(HttpMethod.Get, fullUrl)) @@ -704,8 +822,8 @@ public async Task GetFileData(string entityCollection, Guid entityID, st from += increment; } while (from < fileSize); - - return downloaded; + + return downloaded; } /// @@ -717,11 +835,11 @@ public async Task GetFileData(string entityCollection, Guid entityID, st /// /// /// - public async Task UpdateFileData(string entityCollection, Guid entityID, string fieldName,string fileName,byte[] data) - { - await CheckAuthToken(); - - var url = new Uri( _crmWebAPIConfig.APIUrl + $"{entityCollection}({entityID.ToString()})/{fieldName}"); + public async Task UpdateFileData(string entityCollection, Guid entityID, string fieldName, string fileName, byte[] data) + { + await CheckAuthToken(); + + var url = new Uri(_crmWebAPIConfig.APIUrl + $"{entityCollection}({entityID.ToString()})/{fieldName}"); var chunkSize = 0; using (var request = new HttpRequestMessage(new HttpMethod("PATCH"), url)) { @@ -739,7 +857,7 @@ public async Task UpdateFileData(string entityCollection, Guid entityID, string { var count = (offset + chunkSize) > data.Length ? data.Length % chunkSize : chunkSize; using (var content = new ByteArrayContent(data, offset, count)) - + using (var request = new HttpRequestMessage(new HttpMethod("PATCH"), url)) { content.Headers.Add("Content-Type", "application/octet-stream"); @@ -751,283 +869,287 @@ public async Task UpdateFileData(string entityCollection, Guid entityID, string response.EnsureSuccessStatusCode(); } } - } - + } + + } + + /// + /// Helper function to convert object to KVP + /// + /// + /// + private static List> ConvertObjectToKeyValuePair(object data) + { + if (data != null) + { + if (data.GetType() == typeof(ExpandoObject)) + { + var dataExpand = data as ExpandoObject; + return dataExpand.ToList(); + } + else + { + Type type = data.GetType(); + IList props = new List(type.GetProperties()); + List> list = new List>(); + + foreach (PropertyInfo prop in props) + { + object propValue = prop.GetValue(data, null); + + list.Add(new KeyValuePair(prop.Name, propValue)); + } + + return list; + } + } + + else return new List>(); + } + + /// + /// Helper function to build the url for functions and actions + /// + /// + /// + /// + private string BuildFunctionActionURI(string function, KeyValuePair[] parameters) + { + string fullUrl; + if (parameters != null) + { + List paramList = new List(); + List valueList = new List(); + int paramCount = 1; + foreach (var parm in parameters) + { + if (parm.Value.GetType() == typeof(String)) + { + valueList.Add(string.Format("@p{0}='{1}'", paramCount, parm.Value)); + } + else if (parm.Value.GetType().GetTypeInfo().IsPrimitive) + { + valueList.Add(string.Format("@p{0}={1}", paramCount, parm.Value)); + } + else + { + valueList.Add(string.Format("@p{0}={1}", paramCount, JsonConvert.SerializeObject(parm.Value))); + } + paramList.Add(string.Format("{0}=@p{1}", parm.Key, paramCount)); + paramCount++; + } + + fullUrl = string.Format("{0}{1}({2})?{3}", _crmWebAPIConfig.APIUrl, function, string.Join(",", paramList), string.Join("&", valueList)); + } + else + { + fullUrl = string.Format("{0}{1}()", _crmWebAPIConfig.APIUrl, function); + } + + return fullUrl; + } + + /// + /// helper function to build query url + /// + /// + /// + /// + private string BuildGetUrl(string uri, CRMGetListOptions queryOptions) + { + var fullurl = _crmWebAPIConfig.APIUrl + uri; + + if (queryOptions != null) + { + bool firstParam = true; + + if (!string.IsNullOrEmpty(queryOptions.TrackChangesLink)) + { + fullurl = queryOptions.TrackChangesLink; + firstParam = false; + } + + if (queryOptions.Select != null) + { + + if (firstParam) + fullurl = String.Format("{0}?$select={1}", fullurl, String.Join(",", queryOptions.Select)); + else + fullurl = String.Format("{0}&$select={1}", fullurl, String.Join(",", queryOptions.Select)); + firstParam = false; + + } + if (queryOptions.OrderBy != null) + { + + if (firstParam) + fullurl = String.Format("{0}?$orderby={1}", fullurl, String.Join(",", queryOptions.OrderBy)); + else + fullurl = String.Format("{0}&$orderby={1}", fullurl, String.Join(",", queryOptions.OrderBy)); + firstParam = false; + + } + if (queryOptions.Filter != null) + { + if (firstParam) + fullurl = fullurl + "?$filter=" + queryOptions.Filter; + else + fullurl = fullurl + "&$filter=" + queryOptions.Filter; + firstParam = false; + } + if (queryOptions.Apply != null) + { + if (firstParam) + fullurl = fullurl + "?$apply=" + queryOptions.Apply; + else + fullurl = fullurl + "&$apply=" + queryOptions.Apply; + firstParam = false; + } + if (queryOptions.IncludeCount) + { + if (firstParam) + fullurl = fullurl + "?$count=true"; + else + fullurl = fullurl + "&$count=true"; + firstParam = false; + } + + if (queryOptions.Skip > 0) + { + if (firstParam) + fullurl = fullurl + string.Format("?$skip={0}", queryOptions.Skip); + else + fullurl = fullurl + string.Format("&$skip={0}", queryOptions.Skip); + firstParam = false; + } + if (queryOptions.Top > 0) + { + if (firstParam) + fullurl = fullurl + string.Format("?$top={0}", queryOptions.Top); + else + fullurl = fullurl + string.Format("&$top={0}", queryOptions.Top); + firstParam = false; + } + if (queryOptions.Expand != null) + BuildExpandQueryURLOptions(queryOptions, ref fullurl, ref firstParam); + + BuildAdvancedQueryURLOptions(queryOptions, ref fullurl, ref firstParam); + } + + return fullurl; } - /// - /// Helper function to convert object to KVP - /// - /// - /// - private static List> ConvertObjectToKeyValuePair(object data) - { - if (data != null) - { - if (data.GetType() == typeof(ExpandoObject)) - { - var dataExpand = data as ExpandoObject; - return dataExpand.ToList(); - } - else - { - Type type = data.GetType(); - IList props = new List(type.GetProperties()); - List> list = new List>(); - - foreach (PropertyInfo prop in props) - { - object propValue = prop.GetValue(data, null); - - list.Add(new KeyValuePair(prop.Name, propValue)); - } - - return list; - } - } - - else return new List>(); - } - /// - /// Helper function to build the url for functions and actions - /// - /// - /// - /// - private string BuildFunctionActionURI(string function, KeyValuePair[] parameters) - { - string fullUrl; - if (parameters != null) - { - List paramList = new List(); - List valueList = new List(); - int paramCount = 1; - foreach (var parm in parameters) - { - if (parm.Value.GetType() == typeof(String)) - { - valueList.Add(string.Format("@p{0}='{1}'", paramCount, parm.Value)); - } - else if (parm.Value.GetType().GetTypeInfo().IsPrimitive) - { - valueList.Add(string.Format("@p{0}={1}", paramCount, parm.Value)); - } - else - { - valueList.Add(string.Format("@p{0}={1}", paramCount, JsonConvert.SerializeObject(parm.Value))); - } - paramList.Add(string.Format("{0}=@p{1}", parm.Key, paramCount)); - paramCount++; - } - - fullUrl = string.Format("{0}{1}({2})?{3}", _crmWebAPIConfig.APIUrl, function, string.Join(",", paramList), string.Join("&", valueList)); - } - else - { - fullUrl = string.Format("{0}{1}()", _crmWebAPIConfig.APIUrl, function); - } - - return fullUrl; - } - - /// - /// helper function to build query url - /// - /// - /// - /// - private string BuildGetUrl(string uri, CRMGetListOptions queryOptions) - { - var fullurl = _crmWebAPIConfig.APIUrl + uri; - - if (queryOptions != null) - { - bool firstParam = true; - - if (!string.IsNullOrEmpty(queryOptions.TrackChangesLink)) - { - fullurl = queryOptions.TrackChangesLink; - firstParam = false; - } - - if (queryOptions.Select != null) - { - - if (firstParam) - fullurl = String.Format("{0}?$select={1}", fullurl, String.Join(",", queryOptions.Select)); - else - fullurl = String.Format("{0}&$select={1}", fullurl, String.Join(",", queryOptions.Select)); - firstParam = false; - - } - if (queryOptions.OrderBy != null) - { - - if (firstParam) - fullurl = String.Format("{0}?$orderby={1}", fullurl, String.Join(",", queryOptions.OrderBy)); - else - fullurl = String.Format("{0}&$orderby={1}", fullurl, String.Join(",", queryOptions.OrderBy)); - firstParam = false; - - } - if (queryOptions.Filter != null) - { - if (firstParam) - fullurl = fullurl + "?$filter=" + queryOptions.Filter; - else - fullurl = fullurl + "&$filter=" + queryOptions.Filter; - firstParam = false; - } - if (queryOptions.Apply != null) - { - if (firstParam) - fullurl = fullurl + "?$apply=" + queryOptions.Apply; - else - fullurl = fullurl + "&$apply=" + queryOptions.Apply; - firstParam = false; - } - if (queryOptions.IncludeCount) - { - if (firstParam) - fullurl = fullurl + "?$count=true"; - else - fullurl = fullurl + "&$count=true"; - firstParam = false; - } - - if (queryOptions.Skip > 0) - { - if (firstParam) - fullurl = fullurl + string.Format("?$skip={0}", queryOptions.Skip); - else - fullurl = fullurl + string.Format("&$skip={0}", queryOptions.Skip); - firstParam = false; - } - if (queryOptions.Top > 0) - { - if (firstParam) - fullurl = fullurl + string.Format("?$top={0}", queryOptions.Top); - else - fullurl = fullurl + string.Format("&$top={0}", queryOptions.Top); - firstParam = false; - } - if (queryOptions.Expand != null) - BuildExpandQueryURLOptions(queryOptions, ref fullurl, ref firstParam); - - BuildAdvancedQueryURLOptions(queryOptions, ref fullurl, ref firstParam); - } - - return fullurl; - } - - private void BuildExpandQueryURLOptions(CRMGetListOptions queryOptions, ref string fullurl, ref bool firstParam) - { - List expands = new List(); - - foreach (var expand in queryOptions.Expand) - { - List expandOptions = new List(); - - if (expand.Select != null) - expandOptions.Add(String.Format("$select={0}", String.Join(",", expand.Select))); - - if (expand.OrderBy != null) - expandOptions.Add(String.Format("$orderby={0}", String.Join(",", expand.OrderBy))); - - if (expand.Filter != null) - expandOptions.Add("$filter=" + expand.Filter); - - if (expand.Top > 0) - expandOptions.Add(string.Format("$top={0}", expand.Top)); - - if (expandOptions.Count > 0) - expands.Add(string.Format("{0}({1})", expand.Property, string.Join(";", expandOptions))); - else - expands.Add(string.Format("{0}", expand.Property)); - - } - if (expands.Count > 0) - { - if (firstParam) - fullurl = fullurl + string.Format("?$expand={0}", String.Join(",",expands)); - else - fullurl = fullurl + string.Format("&$expand={0}", String.Join(",", expands)); - firstParam = false; - } - - } - - private static void BuildAdvancedQueryURLOptions(CRMGetListOptions queryOptions, ref string fullurl, ref bool firstParam) - { - if (queryOptions.SystemQuery != Guid.Empty) - { - if (firstParam) - fullurl = fullurl + string.Format("?savedQuery={0}", queryOptions.SystemQuery.ToString()); - else - fullurl = fullurl + string.Format("&savedQuery={0}", queryOptions.SystemQuery.ToString()); - firstParam = false; - } - if (queryOptions.UserQuery != Guid.Empty) - { - if (firstParam) - fullurl = fullurl + string.Format("?userQuery={0}", queryOptions.UserQuery.ToString()); - else - fullurl = fullurl + string.Format("&userQuery={0}", queryOptions.UserQuery.ToString()); - firstParam = false; - } - if (!string.IsNullOrEmpty(queryOptions.FetchXml)) - { - if (firstParam) - fullurl = fullurl + string.Format("?fetchXml={0}", Uri.EscapeUriString(queryOptions.FetchXml)); - else - fullurl = fullurl + string.Format("&fetchXml={0}", Uri.EscapeUriString(queryOptions.FetchXml)); - firstParam = false; - } - } - - /// - /// helper function to make sure token refresh happens as needed if refresh method provided - /// - private async Task CheckAuthToken() - { - if (_crmWebAPIConfig.GetAccessToken == null) - return _crmWebAPIConfig.AccessToken; - var newToken = await _crmWebAPIConfig.GetAccessToken(_crmWebAPIConfig.APIUrl); - if (newToken != _crmWebAPIConfig.AccessToken) - { - _httpClient.DefaultRequestHeaders.Remove("Authorization"); - _httpClient.DefaultRequestHeaders.Authorization = - new AuthenticationHeaderValue("Bearer", newToken); - _crmWebAPIConfig.AccessToken = newToken; - } - return _crmWebAPIConfig.AccessToken; - } - /// - /// helper method to setup the httpclient defaults - /// - /// - private void SetHttpClientDefaults(Guid callerID) - { - _httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); - _httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); - _httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); - //_httpClient.DefaultRequestHeaders.Add("Prefer", "odata.maxpagesize=1"); - if (callerID != Guid.Empty) - _httpClient.DefaultRequestHeaders.Add("MSCRMCallerID", callerID.ToString()); - - _httpClient.Timeout = new TimeSpan(0, 2, 0); - } - /// - /// helper method to setup the request track-changes header - /// - /// - /// - private void FillPreferHeader(HttpRequestMessage Request, CRMGetListOptions QueryOptions) - { - if (QueryOptions == null) - return; - - var preferList = new List(); - + + private void BuildExpandQueryURLOptions(CRMGetListOptions queryOptions, ref string fullurl, ref bool firstParam) + { + List expands = new List(); + + foreach (var expand in queryOptions.Expand) + { + List expandOptions = new List(); + + if (expand.Select != null) + expandOptions.Add(String.Format("$select={0}", String.Join(",", expand.Select))); + + if (expand.OrderBy != null) + expandOptions.Add(String.Format("$orderby={0}", String.Join(",", expand.OrderBy))); + + if (expand.Filter != null) + expandOptions.Add("$filter=" + expand.Filter); + + if (expand.Top > 0) + expandOptions.Add(string.Format("$top={0}", expand.Top)); + + if (expandOptions.Count > 0) + expands.Add(string.Format("{0}({1})", expand.Property, string.Join(";", expandOptions))); + else + expands.Add(string.Format("{0}", expand.Property)); + + } + if (expands.Count > 0) + { + if (firstParam) + fullurl = fullurl + string.Format("?$expand={0}", String.Join(",", expands)); + else + fullurl = fullurl + string.Format("&$expand={0}", String.Join(",", expands)); + firstParam = false; + } + + } + + private static void BuildAdvancedQueryURLOptions(CRMGetListOptions queryOptions, ref string fullurl, ref bool firstParam) + { + if (queryOptions.SystemQuery != Guid.Empty) + { + if (firstParam) + fullurl = fullurl + string.Format("?savedQuery={0}", queryOptions.SystemQuery.ToString()); + else + fullurl = fullurl + string.Format("&savedQuery={0}", queryOptions.SystemQuery.ToString()); + firstParam = false; + } + if (queryOptions.UserQuery != Guid.Empty) + { + if (firstParam) + fullurl = fullurl + string.Format("?userQuery={0}", queryOptions.UserQuery.ToString()); + else + fullurl = fullurl + string.Format("&userQuery={0}", queryOptions.UserQuery.ToString()); + firstParam = false; + } + if (!string.IsNullOrEmpty(queryOptions.FetchXml)) + { + if (firstParam) + fullurl = fullurl + string.Format("?fetchXml={0}", Uri.EscapeDataString(queryOptions.FetchXml)); + else + fullurl = fullurl + string.Format("&fetchXml={0}", Uri.EscapeDataString(queryOptions.FetchXml)); + firstParam = false; + } + } + + /// + /// helper function to make sure token refresh happens as needed if refresh method provided + /// + private async Task CheckAuthToken() + { + if (_crmWebAPIConfig.GetAccessToken == null) + return _crmWebAPIConfig.AccessToken; + var newToken = await _crmWebAPIConfig.GetAccessToken(_crmWebAPIConfig.APIUrl); + if (newToken != _crmWebAPIConfig.AccessToken) + { + _httpClient.DefaultRequestHeaders.Remove("Authorization"); + _httpClient.DefaultRequestHeaders.Authorization = + new AuthenticationHeaderValue("Bearer", newToken); + _crmWebAPIConfig.AccessToken = newToken; + } + return _crmWebAPIConfig.AccessToken; + } + + /// + /// helper method to setup the httpclient defaults + /// + /// + private void SetHttpClientDefaults(Guid callerID, TimeSpan? timeout = null) + { + _httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); + _httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); + _httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0"); + //_httpClient.DefaultRequestHeaders.Add("Prefer", "odata.maxpagesize=1"); + if (callerID != Guid.Empty) + _httpClient.DefaultRequestHeaders.Add("MSCRMCallerID", callerID.ToString()); + + _httpClient.Timeout = timeout.GetValueOrDefault(TimeSpan.FromMinutes(2.0)); + } + + /// + /// helper method to setup the request track-changes header + /// + /// + /// + private void FillPreferHeader(HttpRequestMessage Request, CRMGetListOptions QueryOptions) + { + if (QueryOptions == null) + return; + + var preferList = new List(); + if (QueryOptions.IncludeAnnotations) { preferList.Add("odata.include-annotations=\"*\""); @@ -1036,52 +1158,53 @@ private void FillPreferHeader(HttpRequestMessage Request, CRMGetListOptions Quer { preferList.Add("odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\""); } - - if (QueryOptions.TrackChanges) - preferList.Add("odata.track-changes"); - - // preferList.Add("odata.maxpagesize=1"); - - if (preferList.Count > 0) - Request.Headers.Add("Prefer", string.Join(",", preferList)); - } - - /// - /// Helper method to get ID from response - /// - /// - /// - private static Guid GetEntityIDFromResponse(HttpResponseMessage response) - { - if ((response == null) || (response.Headers == null)) - return Guid.Empty; - if (!response.Headers.Contains("OData-EntityId")) - return Guid.Empty; - - var idString = response.Headers.GetValues("OData-EntityId").FirstOrDefault(); - - if (string.IsNullOrEmpty(idString)) + + if (QueryOptions.TrackChanges) + preferList.Add("odata.track-changes"); + + // preferList.Add("odata.maxpagesize=1"); + + if (preferList.Count > 0) + Request.Headers.Add("Prefer", string.Join(",", preferList)); + } + + /// + /// Helper method to get ID from response + /// + /// + /// + private static Guid GetEntityIDFromResponse(HttpResponseMessage response) + { + if ((response == null) || (response.Headers == null)) + return Guid.Empty; + if (!response.Headers.Contains("OData-EntityId")) + return Guid.Empty; + + var idString = response.Headers.GetValues("OData-EntityId").FirstOrDefault(); + + if (string.IsNullOrEmpty(idString)) return Guid.Empty; string[] entityIDseps = { "(", ")" }; string[] entityIDParts = idString.Split(entityIDseps, StringSplitOptions.None); - if (entityIDParts.Length < 2) + if (entityIDParts.Length < 2) return Guid.Empty; - var idGuid = Guid.Empty; - - //if alternate key was used to perform an upsert, guid not currently returned - //the call returns the alternate key which is not in guid format + var idGuid = Guid.Empty; + + //if alternate key was used to perform an upsert, guid not currently returned + //the call returns the alternate key which is not in guid format Guid.TryParse(entityIDParts[1], out idGuid); - return idGuid; - } - /// - /// Helper method to check the response status and generate a well formatted error - /// - /// - private static void EnsureSuccessStatusCode(HttpResponseMessage response,string jsonData = null) + return idGuid; + } + + /// + /// Helper method to check the response status and generate a well formatted error + /// + /// + private static void EnsureSuccessStatusCode(HttpResponseMessage response, string jsonData = null) { if (response.IsSuccessStatusCode) return; @@ -1093,9 +1216,10 @@ private static void EnsureSuccessStatusCode(HttpResponseMessage response,string if (jsonData != null) exception.JSON = jsonData; - throw exception; - + throw exception; + } + /// /// Helper method to extract error message text /// @@ -1143,34 +1267,74 @@ private static string GetErrorMessageText(HttpResponseMessage response) return errorData; } - - - /// - /// Helper method to relace the '_x002e_', '_x0040_' and '_TEXT_value' for the '.', '@' and 'TEXT' - /// If some property is found with the same name no action will be done. - /// - /// - private static void FormatResultProperties(JObject obj) - { - var properties = obj.Properties().ToList(); - - foreach (var property in properties) - { - var propName = property.Name; - if (!propName.Contains("_value") && !propName.Contains("_x002e_") && - !propName.Contains("_x0040_")) - continue; - - var matchValue = new Regex("^(_)(.+)(_value)\\b").Match(propName); - - if (matchValue.Success) - propName = matchValue.Groups[2].Value; - - propName = propName.Replace("_x002e_", ".").Replace("_x0040_", "@"); - - if (obj[propName] == null) - obj[propName] = property.Value; - } - } - } -} + + /// + /// Helper method to relace the '_x002e_', '_x0040_' and '_TEXT_value' for the '.', '@' and 'TEXT' + /// If some property is found with the same name no action will be done. + /// + /// + private static void FormatResultProperties(JObject obj) + { + var properties = obj.Properties().ToList(); + + foreach (var property in properties) + { + var propName = property.Name; + if (!propName.Contains("_value") && !propName.Contains("_x002e_") && + !propName.Contains("_x0040_")) + continue; + + var matchValue = new Regex("^(_)(.+)(_value)\\b").Match(propName); + + if (matchValue.Success) + propName = matchValue.Groups[2].Value; + + propName = propName.Replace("_x002e_", ".").Replace("_x0040_", "@"); + + if (obj[propName] == null) + obj[propName] = property.Value; + } + } + + private string CreateXml(string xml, string cookie, int page, int count) + { + StringReader stringReader = new StringReader(xml); + var reader = new XmlTextReader(stringReader); + + // Load document + XmlDocument doc = new XmlDocument(); + doc.Load(reader); + + return CreateXml(doc, cookie, page, count); + } + + private string CreateXml(XmlDocument doc, string cookie, int page, int count) + { + XmlAttributeCollection attrs = doc.DocumentElement.Attributes; + + if (cookie != null) + { + XmlAttribute pagingAttr = doc.CreateAttribute("paging-cookie"); + pagingAttr.Value = cookie; + attrs.Append(pagingAttr); + } + + XmlAttribute pageAttr = doc.CreateAttribute("page"); + pageAttr.Value = System.Convert.ToString(page); + attrs.Append(pageAttr); + + XmlAttribute countAttr = doc.CreateAttribute("count"); + countAttr.Value = System.Convert.ToString(count); + attrs.Append(countAttr); + + StringBuilder sb = new StringBuilder(1024); + StringWriter stringWriter = new StringWriter(sb); + + XmlTextWriter writer = new XmlTextWriter(stringWriter); + doc.WriteTo(writer); + writer.Close(); + + return sb.ToString(); + } + } +} diff --git a/dotnet/Xrm.Tools.WebAPI/Properties/AssemblyInfo.cs b/dotnet/Xrm.Tools.WebAPI/Properties/AssemblyInfo.cs index cfb9312..2e23371 100644 --- a/dotnet/Xrm.Tools.WebAPI/Properties/AssemblyInfo.cs +++ b/dotnet/Xrm.Tools.WebAPI/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Xrm.Tools.WebAPI")] -[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.12.0")] -[assembly: AssemblyFileVersion("1.0.12.0")] +[assembly: AssemblyVersion("1.0.13.0")] +[assembly: AssemblyFileVersion("1.0.13.0")] diff --git a/dotnet/Xrm.Tools.WebAPI/Requests/CRMGetListOptions.cs b/dotnet/Xrm.Tools.WebAPI/Requests/CRMGetListOptions.cs index c5395bf..4df6a26 100644 --- a/dotnet/Xrm.Tools.WebAPI/Requests/CRMGetListOptions.cs +++ b/dotnet/Xrm.Tools.WebAPI/Requests/CRMGetListOptions.cs @@ -32,6 +32,15 @@ public class CRMGetListOptions public string TrackChangesLink { get; set; } - + public bool FetchAllRecords { get; set; } + + /// + /// Used for FetchXML Paging + /// + public int PageSize { get; set; } = 5000; + /// + /// Used for FetchXML Paging + /// + public int PageNumber { get; set; } = 1; } } diff --git a/dotnet/Xrm.Tools.WebAPI/Requests/CRMWebAPIConfig.cs b/dotnet/Xrm.Tools.WebAPI/Requests/CRMWebAPIConfig.cs index 8f6f3df..ae712c9 100644 --- a/dotnet/Xrm.Tools.WebAPI/Requests/CRMWebAPIConfig.cs +++ b/dotnet/Xrm.Tools.WebAPI/Requests/CRMWebAPIConfig.cs @@ -13,6 +13,6 @@ public class CRMWebAPIConfig public Func> GetAccessToken { get; set; } public NetworkCredential NetworkCredential { get; set; } public CRMWebAPILoggingOptions Logging { get; set; } - + public TimeSpan Timeout { get; set; } } } diff --git a/dotnet/Xrm.Tools.WebAPI/Xrm.Tools.WebAPI.csproj b/dotnet/Xrm.Tools.WebAPI/Xrm.Tools.WebAPI.csproj index ddafcd7..2b3501f 100644 --- a/dotnet/Xrm.Tools.WebAPI/Xrm.Tools.WebAPI.csproj +++ b/dotnet/Xrm.Tools.WebAPI/Xrm.Tools.WebAPI.csproj @@ -9,8 +9,9 @@ Properties Xrm.Tools.WebAPI Xrm.Tools.WebAPI - v4.6 + v4.6.2 512 + true @@ -36,17 +37,80 @@ xt.snk - - ..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll - True + + ..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.1\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\Microsoft.Extensions.Configuration.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll + + + ..\packages\Microsoft.Extensions.Configuration.Abstractions.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Configuration.Binder.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll + + + ..\packages\Microsoft.Extensions.DependencyInjection.3.1.5\lib\net461\Microsoft.Extensions.DependencyInjection.dll + + + ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.5\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Http.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Http.dll + + + ..\packages\Microsoft.Extensions.Http.Polly.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Http.Polly.dll + + + ..\packages\Microsoft.Extensions.Logging.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Logging.dll + + + ..\packages\Microsoft.Extensions.Logging.Abstractions.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Options.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Options.dll + + + ..\packages\Microsoft.Extensions.Primitives.3.1.5\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll + + + ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Polly.7.2.1\lib\net461\Polly.dll + + + ..\packages\Polly.Extensions.Http.3.0.0\lib\netstandard2.0\Polly.Extensions.Http.dll + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.ComponentModel.Annotations.4.7.0\lib\net461\System.ComponentModel.Annotations.dll + + + + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + - - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll - True + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll diff --git a/dotnet/Xrm.Tools.WebAPI/app.config b/dotnet/Xrm.Tools.WebAPI/app.config index de5386a..eb792ce 100644 --- a/dotnet/Xrm.Tools.WebAPI/app.config +++ b/dotnet/Xrm.Tools.WebAPI/app.config @@ -4,8 +4,52 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + diff --git a/dotnet/Xrm.Tools.WebAPI/packages.config b/dotnet/Xrm.Tools.WebAPI/packages.config index 6b457f5..e6eaada 100644 --- a/dotnet/Xrm.Tools.WebAPI/packages.config +++ b/dotnet/Xrm.Tools.WebAPI/packages.config @@ -1,5 +1,26 @@  - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file