From 6884e2f9624074ad8f5b3bac0a064f73a27b1354 Mon Sep 17 00:00:00 2001 From: David Cantu Date: Wed, 15 Jan 2020 19:35:56 -0800 Subject: [PATCH 1/7] Add benchmarks for (de)serialization using ReferenceHandling.Preserve --- .../micro/Serializers/DataGenerator.cs | 4 ++ .../Serializer/ReadPreservedReferences.cs | 60 +++++++++++++++++++ .../Serializer/WritePreservedReferences.cs | 48 +++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs create mode 100644 src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs diff --git a/src/benchmarks/micro/Serializers/DataGenerator.cs b/src/benchmarks/micro/Serializers/DataGenerator.cs index e49f9c28784..33bf8adb1e2 100644 --- a/src/benchmarks/micro/Serializers/DataGenerator.cs +++ b/src/benchmarks/micro/Serializers/DataGenerator.cs @@ -35,6 +35,8 @@ internal static T Generate() return (T)(object)CreateXmlElement(); if (typeof(T) == typeof(SimpleStructWithProperties)) return (T)(object)new SimpleStructWithProperties { Num = 1, Text = "Foo" }; + if (typeof(T) == typeof(SimpleListOfInt)) + return (T)(object)new SimpleListOfInt { 10, 20, 30 }; if (typeof(T) == typeof(ClassImplementingIXmlSerialiable)) return (T)(object)new ClassImplementingIXmlSerialiable { StringValue = "Hello world" }; if (typeof(T) == typeof(Dictionary)) @@ -361,6 +363,8 @@ public struct SimpleStructWithProperties public int Num { get; set; } public string Text { get; set; } } + + public class SimpleListOfInt : List { } public class ClassImplementingIXmlSerialiable : IXmlSerializable { diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs new file mode 100644 index 00000000000..77efdd202e9 --- /dev/null +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs @@ -0,0 +1,60 @@ +using BenchmarkDotNet.Attributes; +using MicroBenchmarks; +using MicroBenchmarks.Serializers; +using Newtonsoft.Json; +using System.Collections.Generic; +using System.Reflection; + +namespace System.Text.Json.Serialization.Tests +{ + [GenericTypeArguments(typeof(LoginViewModel))] + [GenericTypeArguments(typeof(Location))] + [GenericTypeArguments(typeof(IndexViewModel))] + [GenericTypeArguments(typeof(MyEventsListerViewModel))] + [GenericTypeArguments(typeof(SimpleListOfInt))] + [GenericTypeArguments(typeof(SimpleStructWithProperties))] + public class ReadPreservedReferences + { + [Params(false, true)] + public bool IsDataPreserved; + + private string _serialized; + private JsonSerializerOptions _options; + private JsonSerializerSettings _settings; + + [GlobalSetup] + public void Setup() + { + _options = new JsonSerializerOptions(); + + // Once the API is merged, replace this with _options.ReferenceHandling = ReferenceHandling.Preserve; + PropertyInfo referenceHandlingOption = _options.GetType().GetProperty("ReferenceHandling"); + Type refHandlingType = referenceHandlingOption.PropertyType; + PropertyInfo preserve = refHandlingType.GetProperty("Preserve", BindingFlags.Public | BindingFlags.Static); + referenceHandlingOption.SetValue(_options, preserve.GetValue(null, null)); + + _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; + + T value = DataGenerator.Generate(); + + if (IsDataPreserved) + { + _serialized = JsonConvert.SerializeObject(value, _settings); + } + else + { + // Use payload that does not contain metadata in order to see what is the penalty of having ReferenceHandling.Preserve set. + _serialized = JsonConvert.SerializeObject(value); + } + } + + + [BenchmarkCategory(Categories.CoreFX, Categories.JSON)] + [Benchmark] + public T DeserializePreserved() => JsonSerializer.Deserialize(_serialized, _options); + + [BenchmarkCategory(Categories.ThirdParty, Categories.JSON)] + [Benchmark] + public T NewtonsoftDeserializePreserved() => JsonConvert.DeserializeObject(_serialized, _settings); + } +} diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs new file mode 100644 index 00000000000..85346efc5b3 --- /dev/null +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs @@ -0,0 +1,48 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using BenchmarkDotNet.Attributes; +using MicroBenchmarks; +using MicroBenchmarks.Serializers; +using Newtonsoft.Json; +using System.Reflection; + +namespace System.Text.Json.Serialization.Tests +{ + [GenericTypeArguments(typeof(LoginViewModel))] + [GenericTypeArguments(typeof(Location))] + [GenericTypeArguments(typeof(IndexViewModel))] + [GenericTypeArguments(typeof(MyEventsListerViewModel))] + [GenericTypeArguments(typeof(SimpleListOfInt))] + [GenericTypeArguments(typeof(SimpleStructWithProperties))] + public class WritePreservedReferences + { + private T _value; + private JsonSerializerOptions _options; + private JsonSerializerSettings _settings; + + [GlobalSetup] + public void Setup() + { + _value = DataGenerator.Generate(); + + _options = new JsonSerializerOptions(); + + PropertyInfo referenceHandlingOption = _options.GetType().GetProperty("ReferenceHandling"); + Type refHandlingType = referenceHandlingOption.PropertyType; + PropertyInfo preserve = refHandlingType.GetProperty("Preserve", BindingFlags.Public | BindingFlags.Static); + referenceHandlingOption.SetValue(_options, preserve.GetValue(null, null)); + + _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; + } + + [BenchmarkCategory(Categories.CoreFX, Categories.JSON)] + [Benchmark] + public string SerializePreserved() => JsonSerializer.Serialize(_value, _options); + + [BenchmarkCategory(Categories.ThirdParty, Categories.JSON)] + [Benchmark] + public string NewtonsoftSerializePreserved() => JsonConvert.SerializeObject(_value, _settings); + } +} From 9c886e2d45b16f0630bde4094ef8d415bbc46ee6 Mon Sep 17 00:00:00 2001 From: David Cantu Date: Tue, 21 Jan 2020 13:49:57 -0800 Subject: [PATCH 2/7] Set ReferenceHandling properly now that the API is merged into runtime repo --- .../Serializer/ReadPreservedReferences.cs | 9 ++------- .../Serializer/WritePreservedReferences.cs | 8 ++------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs index 77efdd202e9..ad7aeca51b0 100644 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs @@ -26,12 +26,7 @@ public class ReadPreservedReferences public void Setup() { _options = new JsonSerializerOptions(); - - // Once the API is merged, replace this with _options.ReferenceHandling = ReferenceHandling.Preserve; - PropertyInfo referenceHandlingOption = _options.GetType().GetProperty("ReferenceHandling"); - Type refHandlingType = referenceHandlingOption.PropertyType; - PropertyInfo preserve = refHandlingType.GetProperty("Preserve", BindingFlags.Public | BindingFlags.Static); - referenceHandlingOption.SetValue(_options, preserve.GetValue(null, null)); + _options.ReferenceHandling = ReferenceHandling.Preserve; _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; @@ -54,7 +49,7 @@ public void Setup() public T DeserializePreserved() => JsonSerializer.Deserialize(_serialized, _options); [BenchmarkCategory(Categories.ThirdParty, Categories.JSON)] - [Benchmark] + [Benchmark(Baseline = true)] public T NewtonsoftDeserializePreserved() => JsonConvert.DeserializeObject(_serialized, _settings); } } diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs index 85346efc5b3..da82c968758 100644 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs @@ -28,11 +28,7 @@ public void Setup() _value = DataGenerator.Generate(); _options = new JsonSerializerOptions(); - - PropertyInfo referenceHandlingOption = _options.GetType().GetProperty("ReferenceHandling"); - Type refHandlingType = referenceHandlingOption.PropertyType; - PropertyInfo preserve = refHandlingType.GetProperty("Preserve", BindingFlags.Public | BindingFlags.Static); - referenceHandlingOption.SetValue(_options, preserve.GetValue(null, null)); + _options.ReferenceHandling = ReferenceHandling.Preserve; _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; } @@ -42,7 +38,7 @@ public void Setup() public string SerializePreserved() => JsonSerializer.Serialize(_value, _options); [BenchmarkCategory(Categories.ThirdParty, Categories.JSON)] - [Benchmark] + [Benchmark(Baseline = true)] public string NewtonsoftSerializePreserved() => JsonConvert.SerializeObject(_value, _settings); } } From 33c3f56cc7771478c41537a1c41a5deb3c918177 Mon Sep 17 00:00:00 2001 From: David Cantu Date: Tue, 21 Jan 2020 14:13:21 -0800 Subject: [PATCH 3/7] Code should only run for netcoreapp5.0 --- .../Serializer/ReadPreservedReferences.cs | 15 ++++++++++----- .../Serializer/WritePreservedReferences.cs | 8 +++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs index ad7aeca51b0..2d8237dec1c 100644 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs @@ -1,9 +1,13 @@ -using BenchmarkDotNet.Attributes; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#if !NETFRAMEWORK && !NETCOREAPP2_1 && !NETCOREAPP2_2 && !NETCOREAPP3_0 && !NETCOREAPP3_1 + +using BenchmarkDotNet.Attributes; using MicroBenchmarks; using MicroBenchmarks.Serializers; using Newtonsoft.Json; -using System.Collections.Generic; -using System.Reflection; namespace System.Text.Json.Serialization.Tests { @@ -25,8 +29,7 @@ public class ReadPreservedReferences [GlobalSetup] public void Setup() { - _options = new JsonSerializerOptions(); - _options.ReferenceHandling = ReferenceHandling.Preserve; + _options = new JsonSerializerOptions { ReferenceHandling = ReferenceHandling.Preserve }; _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; @@ -53,3 +56,5 @@ public void Setup() public T NewtonsoftDeserializePreserved() => JsonConvert.DeserializeObject(_serialized, _settings); } } + +#endif \ No newline at end of file diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs index da82c968758..010ed295f04 100644 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs @@ -2,11 +2,12 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +#if !NETFRAMEWORK && !NETCOREAPP2_1 && !NETCOREAPP2_2 && !NETCOREAPP3_0 && !NETCOREAPP3_1 + using BenchmarkDotNet.Attributes; using MicroBenchmarks; using MicroBenchmarks.Serializers; using Newtonsoft.Json; -using System.Reflection; namespace System.Text.Json.Serialization.Tests { @@ -27,8 +28,7 @@ public void Setup() { _value = DataGenerator.Generate(); - _options = new JsonSerializerOptions(); - _options.ReferenceHandling = ReferenceHandling.Preserve; + _options = new JsonSerializerOptions { ReferenceHandling = ReferenceHandling.Preserve }; _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; } @@ -42,3 +42,5 @@ public void Setup() public string NewtonsoftSerializePreserved() => JsonConvert.SerializeObject(_value, _settings); } } + +#endif \ No newline at end of file From af391ae5a43cdcfa31b481f566a909b5aa3ef7af Mon Sep 17 00:00:00 2001 From: David Cantu Date: Wed, 22 Jan 2020 16:11:53 -0800 Subject: [PATCH 4/7] Add PackageReference to System.Text.Json for 5.0 and exclude benchmarks for versions < 5.0 --- NuGet.config | 3 ++- src/benchmarks/micro/MicroBenchmarks.csproj | 10 ++++++++++ .../Serializer/ReadPreservedReferences.cs | 7 +------ .../Serializer/WritePreservedReferences.cs | 6 +----- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/NuGet.config b/NuGet.config index 4c1c6517c79..5857539b3b7 100644 --- a/NuGet.config +++ b/NuGet.config @@ -1,4 +1,4 @@ - + @@ -8,5 +8,6 @@ + diff --git a/src/benchmarks/micro/MicroBenchmarks.csproj b/src/benchmarks/micro/MicroBenchmarks.csproj index d98108602e7..e1c05e79d4a 100644 --- a/src/benchmarks/micro/MicroBenchmarks.csproj +++ b/src/benchmarks/micro/MicroBenchmarks.csproj @@ -87,6 +87,16 @@ + + + + + + + + + + diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs index 2d8237dec1c..784d520fb57 100644 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if !NETFRAMEWORK && !NETCOREAPP2_1 && !NETCOREAPP2_2 && !NETCOREAPP3_0 && !NETCOREAPP3_1 - using BenchmarkDotNet.Attributes; using MicroBenchmarks; using MicroBenchmarks.Serializers; @@ -46,7 +44,6 @@ public void Setup() } } - [BenchmarkCategory(Categories.CoreFX, Categories.JSON)] [Benchmark] public T DeserializePreserved() => JsonSerializer.Deserialize(_serialized, _options); @@ -55,6 +52,4 @@ public void Setup() [Benchmark(Baseline = true)] public T NewtonsoftDeserializePreserved() => JsonConvert.DeserializeObject(_serialized, _settings); } -} - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs index 010ed295f04..196322218a4 100644 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs +++ b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -#if !NETFRAMEWORK && !NETCOREAPP2_1 && !NETCOREAPP2_2 && !NETCOREAPP3_0 && !NETCOREAPP3_1 - using BenchmarkDotNet.Attributes; using MicroBenchmarks; using MicroBenchmarks.Serializers; @@ -41,6 +39,4 @@ public void Setup() [Benchmark(Baseline = true)] public string NewtonsoftSerializePreserved() => JsonConvert.SerializeObject(_value, _settings); } -} - -#endif \ No newline at end of file +} \ No newline at end of file From 0a7351768b2e98e892c0cb131d46d1d1b367d680 Mon Sep 17 00:00:00 2001 From: David Cantu Date: Wed, 22 Jan 2020 16:30:41 -0800 Subject: [PATCH 5/7] Fix references in csproj after merge --- src/benchmarks/micro/MicroBenchmarks.csproj | 6 +- .../Serializer/ReadPreservedReferences.cs | 55 ------------------- .../Serializer/WritePreservedReferences.cs | 42 -------------- 3 files changed, 3 insertions(+), 100 deletions(-) delete mode 100644 src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs delete mode 100644 src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs diff --git a/src/benchmarks/micro/MicroBenchmarks.csproj b/src/benchmarks/micro/MicroBenchmarks.csproj index f41493560df..f0783132bf6 100644 --- a/src/benchmarks/micro/MicroBenchmarks.csproj +++ b/src/benchmarks/micro/MicroBenchmarks.csproj @@ -88,12 +88,12 @@ - - + + - + diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs deleted file mode 100644 index 784d520fb57..00000000000 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/ReadPreservedReferences.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using BenchmarkDotNet.Attributes; -using MicroBenchmarks; -using MicroBenchmarks.Serializers; -using Newtonsoft.Json; - -namespace System.Text.Json.Serialization.Tests -{ - [GenericTypeArguments(typeof(LoginViewModel))] - [GenericTypeArguments(typeof(Location))] - [GenericTypeArguments(typeof(IndexViewModel))] - [GenericTypeArguments(typeof(MyEventsListerViewModel))] - [GenericTypeArguments(typeof(SimpleListOfInt))] - [GenericTypeArguments(typeof(SimpleStructWithProperties))] - public class ReadPreservedReferences - { - [Params(false, true)] - public bool IsDataPreserved; - - private string _serialized; - private JsonSerializerOptions _options; - private JsonSerializerSettings _settings; - - [GlobalSetup] - public void Setup() - { - _options = new JsonSerializerOptions { ReferenceHandling = ReferenceHandling.Preserve }; - - _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; - - T value = DataGenerator.Generate(); - - if (IsDataPreserved) - { - _serialized = JsonConvert.SerializeObject(value, _settings); - } - else - { - // Use payload that does not contain metadata in order to see what is the penalty of having ReferenceHandling.Preserve set. - _serialized = JsonConvert.SerializeObject(value); - } - } - - [BenchmarkCategory(Categories.CoreFX, Categories.JSON)] - [Benchmark] - public T DeserializePreserved() => JsonSerializer.Deserialize(_serialized, _options); - - [BenchmarkCategory(Categories.ThirdParty, Categories.JSON)] - [Benchmark(Baseline = true)] - public T NewtonsoftDeserializePreserved() => JsonConvert.DeserializeObject(_serialized, _settings); - } -} \ No newline at end of file diff --git a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs b/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs deleted file mode 100644 index 196322218a4..00000000000 --- a/src/benchmarks/micro/corefx/System.Text.Json/Serializer/WritePreservedReferences.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using BenchmarkDotNet.Attributes; -using MicroBenchmarks; -using MicroBenchmarks.Serializers; -using Newtonsoft.Json; - -namespace System.Text.Json.Serialization.Tests -{ - [GenericTypeArguments(typeof(LoginViewModel))] - [GenericTypeArguments(typeof(Location))] - [GenericTypeArguments(typeof(IndexViewModel))] - [GenericTypeArguments(typeof(MyEventsListerViewModel))] - [GenericTypeArguments(typeof(SimpleListOfInt))] - [GenericTypeArguments(typeof(SimpleStructWithProperties))] - public class WritePreservedReferences - { - private T _value; - private JsonSerializerOptions _options; - private JsonSerializerSettings _settings; - - [GlobalSetup] - public void Setup() - { - _value = DataGenerator.Generate(); - - _options = new JsonSerializerOptions { ReferenceHandling = ReferenceHandling.Preserve }; - - _settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; - } - - [BenchmarkCategory(Categories.CoreFX, Categories.JSON)] - [Benchmark] - public string SerializePreserved() => JsonSerializer.Serialize(_value, _options); - - [BenchmarkCategory(Categories.ThirdParty, Categories.JSON)] - [Benchmark(Baseline = true)] - public string NewtonsoftSerializePreserved() => JsonConvert.SerializeObject(_value, _settings); - } -} \ No newline at end of file From 7e4199abc726ffd3d76ac6e99503faa83fa95bca Mon Sep 17 00:00:00 2001 From: David Cantu Date: Wed, 22 Jan 2020 16:56:01 -0800 Subject: [PATCH 6/7] Remove unnecessary nuget reference. --- NuGet.config | 1 - src/benchmarks/micro/MicroBenchmarks.csproj | 5 ----- 2 files changed, 6 deletions(-) diff --git a/NuGet.config b/NuGet.config index 5857539b3b7..d9a9470afe8 100644 --- a/NuGet.config +++ b/NuGet.config @@ -8,6 +8,5 @@ - diff --git a/src/benchmarks/micro/MicroBenchmarks.csproj b/src/benchmarks/micro/MicroBenchmarks.csproj index f0783132bf6..9a759090917 100644 --- a/src/benchmarks/micro/MicroBenchmarks.csproj +++ b/src/benchmarks/micro/MicroBenchmarks.csproj @@ -92,11 +92,6 @@ - - - - - From 4feb6a6ecf6a5d1bf7933a327fa581e1d6635ef3 Mon Sep 17 00:00:00 2001 From: David Cantu Date: Wed, 22 Jan 2020 17:01:32 -0800 Subject: [PATCH 7/7] remove unnecessary changes --- NuGet.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NuGet.config b/NuGet.config index d9a9470afe8..4c1c6517c79 100644 --- a/NuGet.config +++ b/NuGet.config @@ -1,4 +1,4 @@ - +