From 6646df9ed6f12aef0e9c97a1eaee1170c689b119 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Mon, 25 Oct 2021 22:30:45 +0200 Subject: [PATCH 01/15] Setting framework name as nullable. --- .../Microsoft.Extensions.DependencyModel/src/TargetInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs index dc94716a3c58ac..81ae98e0f9e05e 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs @@ -6,7 +6,7 @@ namespace Microsoft.Extensions.DependencyModel { public class TargetInfo { - public TargetInfo(string framework, + public TargetInfo(string? framework, string? runtime, string? runtimeSignature, bool isPortable) From bf0adc007deff4633f09d37ce48b7ae6ab97fa28 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Mon, 25 Oct 2021 22:30:57 +0200 Subject: [PATCH 02/15] Setting path to nullable. --- .../Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs index 16a4524865ad45..212f7a0be239ae 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs @@ -7,7 +7,7 @@ namespace Microsoft.Extensions.DependencyModel { public class RuntimeFile { - public RuntimeFile(string path, string? assemblyVersion, string? fileVersion) + public RuntimeFile(string? path, string? assemblyVersion, string? fileVersion) { if (string.IsNullOrEmpty(path)) { From 7a7c26022561595e78fe01fb646dc86ed803f8e9 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Mon, 25 Oct 2021 22:31:07 +0200 Subject: [PATCH 03/15] Setting runtime to nullable. --- .../src/RuntimeFallbacks.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs index bb153401a3a9ae..e8ef7552c09abd 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs @@ -12,8 +12,8 @@ public class RuntimeFallbacks public string Runtime { get; set; } public IReadOnlyList Fallbacks { get; set; } - public RuntimeFallbacks(string runtime, params string?[] fallbacks) : this(runtime, (IEnumerable)fallbacks) { } - public RuntimeFallbacks(string runtime, IEnumerable fallbacks) + public RuntimeFallbacks(string? runtime, params string?[] fallbacks) : this(runtime, (IEnumerable)fallbacks) { } + public RuntimeFallbacks(string? runtime, IEnumerable fallbacks) { if (string.IsNullOrEmpty(runtime)) { From e3c9d3576ee39d5948493d36bd2cfb128982876d Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Mon, 25 Oct 2021 22:31:17 +0200 Subject: [PATCH 04/15] Setting path to nullable. --- .../src/ResourceAssembly.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs index 04d480837c8ad0..bd4571eb518f21 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs @@ -7,7 +7,7 @@ namespace Microsoft.Extensions.DependencyModel { public class ResourceAssembly { - public ResourceAssembly(string path, string locale) + public ResourceAssembly(string? path, string locale) { if (string.IsNullOrEmpty(path)) { From ef7fd3caf7afd52817f038ec758c9970d56c9905 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Mon, 25 Oct 2021 22:34:24 +0200 Subject: [PATCH 05/15] Setting Target Name, RuntimeTargetEntrySub Path and TargetLibrary Name as nullable (string) properties. --- .../src/DependencyContextJsonReader.cs | 55 ++++++++++++------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 127e905ff3d3a2..4878ebd4027a9d 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -133,7 +133,7 @@ private DependencyContext Read(Utf8JsonReader reader) reader.ReadStartObject(); string runtime = string.Empty; - string framework = string.Empty; + string? framework = string.Empty; bool isPortable = true; string? runtimeTargetName = null; string? runtimeSignature = null; @@ -242,8 +242,13 @@ private DependencyContext Read(Utf8JsonReader reader) return target; } - private static bool IsRuntimeTarget(string name) + private static bool IsRuntimeTarget(string? name) { + if (string.IsNullOrEmpty(name)) + { + return false; + } + return name.Contains(DependencyContextStrings.VersionSeparator); } @@ -358,7 +363,7 @@ private List ReadTargets(ref Utf8JsonReader reader) while (reader.Read() && reader.IsTokenTypeProperty()) { - targets.Add(ReadTarget(ref reader, reader.GetString()!)); + targets.Add(ReadTarget(ref reader, reader.GetString())); } reader.CheckEndObject(); @@ -366,7 +371,7 @@ private List ReadTargets(ref Utf8JsonReader reader) return targets; } - private Target ReadTarget(ref Utf8JsonReader reader, string targetName) + private Target ReadTarget(ref Utf8JsonReader reader, string? targetName) { reader.ReadStartObject(); @@ -374,7 +379,7 @@ private Target ReadTarget(ref Utf8JsonReader reader, string targetName) while (reader.Read() && reader.IsTokenTypeProperty()) { - libraries.Add(ReadTargetLibrary(ref reader, reader.GetString()!)); + libraries.Add(ReadTargetLibrary(ref reader, reader.GetString())); } reader.CheckEndObject(); @@ -382,7 +387,7 @@ private Target ReadTarget(ref Utf8JsonReader reader, string targetName) return new Target(targetName, libraries); } - private TargetLibrary ReadTargetLibrary(ref Utf8JsonReader reader, string targetLibraryName) + private TargetLibrary ReadTargetLibrary(ref Utf8JsonReader reader, string? targetLibraryName) { IEnumerable? dependencies = null; List? runtimes = null; @@ -464,10 +469,14 @@ private static List ReadPropertyNames(ref Utf8JsonReader reader) while (reader.Read() && reader.IsTokenTypeProperty()) { - string libraryName = reader.GetString()!; + string? libraryName = reader.GetString(); reader.Skip(); - runtimes.Add(libraryName); + // TODO Discuss about other options? + if (string.IsNullOrEmpty(libraryName)) + { + throw new ArgumentException(null, nameof(libraryName)); + } } reader.CheckEndObject(); @@ -486,7 +495,7 @@ private static List ReadRuntimeFiles(ref Utf8JsonReader reader) string? assemblyVersion = null; string? fileVersion = null; - string path = reader.GetString()!; + string? path = reader.GetString(); reader.ReadStartObject(); @@ -523,7 +532,7 @@ private List ReadTargetLibraryRuntimeTargets(ref Utf8Jso { var runtimeTarget = new RuntimeTargetEntryStub { - Path = reader.GetString()! + Path = reader.GetString() }; reader.ReadStartObject(); @@ -565,7 +574,7 @@ private List ReadTargetLibraryResources(ref Utf8JsonReader rea while (reader.Read() && reader.IsTokenTypeProperty()) { - string path = reader.GetString()!; + string? path = reader.GetString(); string? locale = null; reader.ReadStartObject(); @@ -599,9 +608,15 @@ private Dictionary ReadLibraries(ref Utf8JsonReader reader) while (reader.Read() && reader.IsTokenTypeProperty()) { - string libraryName = reader.GetString()!; + string? libraryName = reader.GetString(); - libraries.Add(Pool(libraryName), ReadOneLibrary(ref reader)); + if (string.IsNullOrEmpty(libraryName)) + { + // TODO Discuss about other options? + throw new ArgumentException(null, nameof(libraryName)); + } + + libraries.Add(libraryName, ReadOneLibrary(ref reader)); } reader.CheckEndObject(); @@ -669,7 +684,7 @@ private static List ReadRuntimes(ref Utf8JsonReader reader) while (reader.Read() && reader.IsTokenTypeProperty()) { - string runtime = reader.GetString()!; + string? runtime = reader.GetString(); string?[] fallbacks = reader.ReadStringArray(); runtimeFallbacks.Add(new RuntimeFallbacks(runtime, fallbacks)); @@ -693,9 +708,9 @@ private IEnumerable CreateLibraries(IEnumerable? librari private Library? CreateLibrary(TargetLibrary targetLibrary, bool runtime, Dictionary? libraryStubs) { - string nameWithVersion = targetLibrary.Name; + string? nameWithVersion = targetLibrary.Name; - if (libraryStubs == null || !libraryStubs.TryGetValue(nameWithVersion, out LibraryStub stub)) + if (libraryStubs == null || string.IsNullOrEmpty(nameWithVersion) || !libraryStubs.TryGetValue(nameWithVersion, out LibraryStub stub)) { throw new InvalidOperationException(SR.Format(SR.LibraryInformationNotFound, nameWithVersion)); } @@ -804,11 +819,11 @@ private IEnumerable CreateLibraries(IEnumerable? librari private sealed class Target { - public string Name; + public string? Name; public IEnumerable Libraries; - public Target(string name, IEnumerable libraries) + public Target(string? name, IEnumerable libraries) { Name = name; Libraries = libraries; @@ -817,7 +832,7 @@ public Target(string name, IEnumerable libraries) private struct TargetLibrary { - public string Name; + public string? Name; public IEnumerable Dependencies; @@ -838,7 +853,7 @@ private struct RuntimeTargetEntryStub { public string? Type; - public string Path; + public string? Path; public string? Rid; From 834881ce3261126de3c722cb5a66256d77bc0a65 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Tue, 26 Oct 2021 02:18:21 +0200 Subject: [PATCH 06/15] Adding missing line of code. --- .../src/DependencyContextJsonReader.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 4878ebd4027a9d..0f571ce9d4db0b 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -477,6 +477,8 @@ private static List ReadPropertyNames(ref Utf8JsonReader reader) { throw new ArgumentException(null, nameof(libraryName)); } + + runtimes.Add(libraryName); } reader.CheckEndObject(); From 3560d0d598dcf4720db2d51a4a7a46c630b4e9b2 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 01:51:31 +0200 Subject: [PATCH 07/15] Adding new string resource and throwing argument exception on null/empty values. Adding unit tests to check for specific null/empty value cases --- .../src/Dependency.cs | 6 +- .../src/DependencyContextJsonReader.cs | 37 ++++++++---- .../src/Resources/Strings.resx | 57 ++++++++++--------- .../tests/DependencyContextJsonReaderTest.cs | 43 ++++++++++++++ 4 files changed, 102 insertions(+), 41 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs index 85b4f0b7e48878..85bcc1b089c578 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs @@ -9,15 +9,15 @@ namespace Microsoft.Extensions.DependencyModel { public readonly struct Dependency : IEquatable { - public Dependency(string name, string version) + public Dependency(string? name, string? version) { if (string.IsNullOrEmpty(name)) { - throw new ArgumentException(null, nameof(name)); + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(name))); } if (string.IsNullOrEmpty(version)) { - throw new ArgumentException(null, nameof(version)); + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(version))); } Name = name; Version = version; diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 0f571ce9d4db0b..19b532bc9ee140 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -373,13 +373,25 @@ private List ReadTargets(ref Utf8JsonReader reader) private Target ReadTarget(ref Utf8JsonReader reader, string? targetName) { + if (string.IsNullOrEmpty(targetName)) + { + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(targetName))); + } + reader.ReadStartObject(); var libraries = new List(); while (reader.Read() && reader.IsTokenTypeProperty()) { - libraries.Add(ReadTargetLibrary(ref reader, reader.GetString())); + string? targetLibraryName = reader.GetString(); + + if (string.IsNullOrEmpty(targetLibraryName)) + { + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(targetLibraryName))); + } + + libraries.Add(ReadTargetLibrary(ref reader, targetLibraryName)); } reader.CheckEndObject(); @@ -387,7 +399,7 @@ private Target ReadTarget(ref Utf8JsonReader reader, string? targetName) return new Target(targetName, libraries); } - private TargetLibrary ReadTargetLibrary(ref Utf8JsonReader reader, string? targetLibraryName) + private TargetLibrary ReadTargetLibrary(ref Utf8JsonReader reader, string targetLibraryName) { IEnumerable? dependencies = null; List? runtimes = null; @@ -453,7 +465,7 @@ private IEnumerable ReadTargetLibraryDependencies(ref Utf8JsonReader while (reader.TryReadStringProperty(out string? name, out string? version)) { - dependencies.Add(new Dependency(Pool(name)!, Pool(version)!)); + dependencies.Add(new Dependency(Pool(name), Pool(version))); } reader.CheckEndObject(); @@ -472,10 +484,9 @@ private static List ReadPropertyNames(ref Utf8JsonReader reader) string? libraryName = reader.GetString(); reader.Skip(); - // TODO Discuss about other options? if (string.IsNullOrEmpty(libraryName)) { - throw new ArgumentException(null, nameof(libraryName)); + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(libraryName))); } runtimes.Add(libraryName); @@ -614,8 +625,7 @@ private Dictionary ReadLibraries(ref Utf8JsonReader reader) if (string.IsNullOrEmpty(libraryName)) { - // TODO Discuss about other options? - throw new ArgumentException(null, nameof(libraryName)); + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(libraryName))); } libraries.Add(libraryName, ReadOneLibrary(ref reader)); @@ -667,10 +677,15 @@ private LibraryStub ReadOneLibrary(ref Utf8JsonReader reader) reader.CheckEndObject(); + if (string.IsNullOrEmpty(type)) + { + throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(type))); + } + return new LibraryStub() { Hash = hash, - Type = Pool(type)!, + Type = Pool(type), Serviceable = serviceable, Path = path, HashPath = hashPath, @@ -821,11 +836,11 @@ private IEnumerable CreateLibraries(IEnumerable? librari private sealed class Target { - public string? Name; + public string Name; public IEnumerable Libraries; - public Target(string? name, IEnumerable libraries) + public Target(string name, IEnumerable libraries) { Name = name; Libraries = libraries; @@ -834,7 +849,7 @@ public Target(string? name, IEnumerable libraries) private struct TargetLibrary { - public string? Name; + public string Name; public IEnumerable Dependencies; diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx b/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx index a761f3deb34d0e..e4a63636812c82 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx @@ -1,17 +1,17 @@  @@ -138,4 +138,7 @@ An item with the same key has already been added. Key: {0} - + + The required field '{0}' was not specified. + + \ No newline at end of file diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs b/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs index fcdca9eb8d40eb..871bea6e529353 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs @@ -792,5 +792,48 @@ public void IgnoresUnknownPropertiesInCompilationOptions() context.CompilationOptions.PublicSign.Should().Be(true); context.CompilationOptions.WarningsAsErrors.Should().Be(true); } + + [Fact] + public void FailsToReadNullLibraryType() + { + Assert.Throws(() => Read( +@"{ + ""libraries"":{ + ""System.Banana/1.0.0"": { + ""type"": null, + ""serviceable"": false, + ""sha512"": ""HASH-System.Banana"" + } + } +} +")); + } + + [Fact] + public void FailsToReadEmptyTargetName() + { + Assert.Throws(() => Read( +@"{ + ""targets"": { + """": {} + } + }")); + } + + [Fact] + public void FailsToReadEmptyLibraryType() + { + Assert.Throws(() => Read( +@"{ + ""libraries"":{ + ""System.Banana/1.0.0"": { + ""type"": """", + ""serviceable"": false, + ""sha512"": ""HASH-System.Banana"" + } + } +} +")); + } } } From 1871188a9fcc8546878155313fcd09f4676a0a58 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 17:43:39 +0200 Subject: [PATCH 08/15] Removing Argument from string resource. Updating PR according to comments --- .../src/Dependency.cs | 10 +--- .../src/DependencyContextJsonReader.cs | 55 ++++++++++++++----- .../src/ResourceAssembly.cs | 12 +--- .../src/Resources/Strings.resx | 2 +- .../src/RuntimeFallbacks.cs | 13 +---- .../src/RuntimeFile.cs | 9 +-- .../src/TargetInfo.cs | 8 +-- 7 files changed, 48 insertions(+), 61 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs index 85bcc1b089c578..113c5ba4558e0d 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs @@ -9,16 +9,8 @@ namespace Microsoft.Extensions.DependencyModel { public readonly struct Dependency : IEquatable { - public Dependency(string? name, string? version) + public Dependency(string name, string version) { - if (string.IsNullOrEmpty(name)) - { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(name))); - } - if (string.IsNullOrEmpty(version)) - { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(version))); - } Name = name; Version = version; } diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 19b532bc9ee140..cc6ee95b2e85f2 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -242,13 +242,8 @@ private DependencyContext Read(Utf8JsonReader reader) return target; } - private static bool IsRuntimeTarget(string? name) + private static bool IsRuntimeTarget(string name) { - if (string.IsNullOrEmpty(name)) - { - return false; - } - return name.Contains(DependencyContextStrings.VersionSeparator); } @@ -375,7 +370,7 @@ private Target ReadTarget(ref Utf8JsonReader reader, string? targetName) { if (string.IsNullOrEmpty(targetName)) { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(targetName))); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(targetName))); } reader.ReadStartObject(); @@ -388,7 +383,7 @@ private Target ReadTarget(ref Utf8JsonReader reader, string? targetName) if (string.IsNullOrEmpty(targetLibraryName)) { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(targetLibraryName))); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(targetLibraryName))); } libraries.Add(ReadTargetLibrary(ref reader, targetLibraryName)); @@ -465,6 +460,15 @@ private IEnumerable ReadTargetLibraryDependencies(ref Utf8JsonReader while (reader.TryReadStringProperty(out string? name, out string? version)) { + if (string.IsNullOrEmpty(name)) + { + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(name))); + } + if (string.IsNullOrEmpty(version)) + { + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(version))); + } + dependencies.Add(new Dependency(Pool(name), Pool(version))); } @@ -482,12 +486,12 @@ private static List ReadPropertyNames(ref Utf8JsonReader reader) while (reader.Read() && reader.IsTokenTypeProperty()) { string? libraryName = reader.GetString(); - reader.Skip(); if (string.IsNullOrEmpty(libraryName)) { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(libraryName))); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(libraryName))); } + reader.Skip(); runtimes.Add(libraryName); } @@ -510,6 +514,11 @@ private static List ReadRuntimeFiles(ref Utf8JsonReader reader) string? path = reader.GetString(); + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentException(null, nameof(path)); + } + reader.ReadStartObject(); while (reader.TryReadStringProperty(out string? propertyName, out string? propertyValue)) @@ -543,9 +552,16 @@ private List ReadTargetLibraryRuntimeTargets(ref Utf8Jso while (reader.Read() && reader.IsTokenTypeProperty()) { + var runtimePath = reader.GetString(); + + if (string.IsNullOrEmpty(runtimePath)) + { + throw new ArgumentException(null, nameof(runtimePath)); + } + var runtimeTarget = new RuntimeTargetEntryStub { - Path = reader.GetString() + Path = runtimePath }; reader.ReadStartObject(); @@ -588,6 +604,12 @@ private List ReadTargetLibraryResources(ref Utf8JsonReader rea while (reader.Read() && reader.IsTokenTypeProperty()) { string? path = reader.GetString(); + + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentException(null, nameof(path)); + } + string? locale = null; reader.ReadStartObject(); @@ -625,7 +647,7 @@ private Dictionary ReadLibraries(ref Utf8JsonReader reader) if (string.IsNullOrEmpty(libraryName)) { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(libraryName))); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(libraryName))); } libraries.Add(libraryName, ReadOneLibrary(ref reader)); @@ -679,7 +701,7 @@ private LibraryStub ReadOneLibrary(ref Utf8JsonReader reader) if (string.IsNullOrEmpty(type)) { - throw new ArgumentException(SR.Format(SR.Argument_RequiredFieldNotSpecified, nameof(type))); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(type))); } return new LibraryStub() @@ -704,6 +726,11 @@ private static List ReadRuntimes(ref Utf8JsonReader reader) string? runtime = reader.GetString(); string?[] fallbacks = reader.ReadStringArray(); + if (string.IsNullOrEmpty(runtime)) + { + throw new ArgumentException(null, nameof(runtime)); + } + runtimeFallbacks.Add(new RuntimeFallbacks(runtime, fallbacks)); } @@ -870,7 +897,7 @@ private struct RuntimeTargetEntryStub { public string? Type; - public string? Path; + public string Path; public string? Rid; diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs index bd4571eb518f21..24ffa6705ebec2 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs @@ -1,22 +1,12 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System; - namespace Microsoft.Extensions.DependencyModel { public class ResourceAssembly { - public ResourceAssembly(string? path, string locale) + public ResourceAssembly(string path, string locale) { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentException(null, nameof(path)); - } - if (string.IsNullOrEmpty(locale)) - { - throw new ArgumentException(null, nameof(locale)); - } Locale = locale; Path = path; } diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx b/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx index e4a63636812c82..0cd624c03e09da 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/Resources/Strings.resx @@ -138,7 +138,7 @@ An item with the same key has already been added. Key: {0} - + The required field '{0}' was not specified. \ No newline at end of file diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs index e8ef7552c09abd..dc44a8c5f408d4 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System; using System.Collections.Generic; using System.Linq; @@ -12,17 +11,9 @@ public class RuntimeFallbacks public string Runtime { get; set; } public IReadOnlyList Fallbacks { get; set; } - public RuntimeFallbacks(string? runtime, params string?[] fallbacks) : this(runtime, (IEnumerable)fallbacks) { } - public RuntimeFallbacks(string? runtime, IEnumerable fallbacks) + public RuntimeFallbacks(string runtime, params string?[] fallbacks) : this(runtime, (IEnumerable)fallbacks) { } + public RuntimeFallbacks(string runtime, IEnumerable fallbacks) { - if (string.IsNullOrEmpty(runtime)) - { - throw new ArgumentException(null, nameof(runtime)); - } - if (fallbacks == null) - { - throw new ArgumentNullException(nameof(fallbacks)); - } Runtime = runtime; Fallbacks = fallbacks.ToArray(); } diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs index 212f7a0be239ae..8f37dcebeacbc6 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs @@ -1,19 +1,12 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System; - namespace Microsoft.Extensions.DependencyModel { public class RuntimeFile { - public RuntimeFile(string? path, string? assemblyVersion, string? fileVersion) + public RuntimeFile(string path, string? assemblyVersion, string? fileVersion) { - if (string.IsNullOrEmpty(path)) - { - throw new ArgumentException(null, nameof(path)); - } - Path = path; AssemblyVersion = assemblyVersion; FileVersion = fileVersion; diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs index 81ae98e0f9e05e..0398ce89ee20bd 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs @@ -1,21 +1,15 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System; namespace Microsoft.Extensions.DependencyModel { public class TargetInfo { - public TargetInfo(string? framework, + public TargetInfo(string framework, string? runtime, string? runtimeSignature, bool isPortable) { - if (string.IsNullOrEmpty(framework)) - { - throw new ArgumentException(null, nameof(framework)); - } - Framework = framework; Runtime = runtime; RuntimeSignature = runtimeSignature; From ef74b15acafab68cc3a1656107217665da04b3b6 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 17:43:52 +0200 Subject: [PATCH 09/15] Updating unit tests to use FormatException --- .../tests/DependencyContextJsonReaderTest.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs b/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs index 871bea6e529353..e16ec056079a97 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/tests/DependencyContextJsonReaderTest.cs @@ -796,7 +796,7 @@ public void IgnoresUnknownPropertiesInCompilationOptions() [Fact] public void FailsToReadNullLibraryType() { - Assert.Throws(() => Read( + Assert.Throws(() => Read( @"{ ""libraries"":{ ""System.Banana/1.0.0"": { @@ -812,7 +812,7 @@ public void FailsToReadNullLibraryType() [Fact] public void FailsToReadEmptyTargetName() { - Assert.Throws(() => Read( + Assert.Throws(() => Read( @"{ ""targets"": { """": {} @@ -823,7 +823,7 @@ public void FailsToReadEmptyTargetName() [Fact] public void FailsToReadEmptyLibraryType() { - Assert.Throws(() => Read( + Assert.Throws(() => Read( @"{ ""libraries"":{ ""System.Banana/1.0.0"": { From 10338cbae4ca74f43cfa7d29c51680135ca8388e Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 17:49:00 +0200 Subject: [PATCH 10/15] Rollback of ArgumentExceptions in DependencyModels --- .../src/Dependency.cs | 8 ++++++++ .../src/DependencyContextJsonReader.cs | 2 +- .../src/ResourceAssembly.cs | 8 ++++++++ .../src/RuntimeFallbacks.cs | 8 ++++++++ .../src/RuntimeFile.cs | 7 +++++++ .../src/TargetInfo.cs | 7 +++++++ 6 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs index 113c5ba4558e0d..85b4f0b7e48878 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/Dependency.cs @@ -11,6 +11,14 @@ namespace Microsoft.Extensions.DependencyModel { public Dependency(string name, string version) { + if (string.IsNullOrEmpty(name)) + { + throw new ArgumentException(null, nameof(name)); + } + if (string.IsNullOrEmpty(version)) + { + throw new ArgumentException(null, nameof(version)); + } Name = name; Version = version; } diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index cc6ee95b2e85f2..2549454fd19713 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -133,7 +133,7 @@ private DependencyContext Read(Utf8JsonReader reader) reader.ReadStartObject(); string runtime = string.Empty; - string? framework = string.Empty; + string framework = string.Empty; bool isPortable = true; string? runtimeTargetName = null; string? runtimeSignature = null; diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs index 24ffa6705ebec2..206b062e109959 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs @@ -7,6 +7,14 @@ public class ResourceAssembly { public ResourceAssembly(string path, string locale) { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentException(null, nameof(path)); + } + if (string.IsNullOrEmpty(locale)) + { + throw new ArgumentException(null, nameof(locale)); + } Locale = locale; Path = path; } diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs index dc44a8c5f408d4..8de65401dc348c 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs @@ -14,6 +14,14 @@ public class RuntimeFallbacks public RuntimeFallbacks(string runtime, params string?[] fallbacks) : this(runtime, (IEnumerable)fallbacks) { } public RuntimeFallbacks(string runtime, IEnumerable fallbacks) { + if (string.IsNullOrEmpty(runtime)) + { + throw new ArgumentException(null, nameof(runtime)); + } + if (fallbacks == null) + { + throw new ArgumentNullException(nameof(fallbacks)); + } Runtime = runtime; Fallbacks = fallbacks.ToArray(); } diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs index 8f37dcebeacbc6..16a4524865ad45 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFile.cs @@ -1,12 +1,19 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; + namespace Microsoft.Extensions.DependencyModel { public class RuntimeFile { public RuntimeFile(string path, string? assemblyVersion, string? fileVersion) { + if (string.IsNullOrEmpty(path)) + { + throw new ArgumentException(null, nameof(path)); + } + Path = path; AssemblyVersion = assemblyVersion; FileVersion = fileVersion; diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs index 0398ce89ee20bd..413ef46c05f0f3 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; + namespace Microsoft.Extensions.DependencyModel { public class TargetInfo @@ -10,6 +12,11 @@ public TargetInfo(string framework, string? runtimeSignature, bool isPortable) { + if (string.IsNullOrEmpty(framework)) + { + throw new ArgumentException(null, nameof(framework)); + } + Framework = framework; Runtime = runtime; RuntimeSignature = runtimeSignature; From 83a32ab7795f30c7ca4efc0e25adf3537fa4f721 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 17:49:43 +0200 Subject: [PATCH 11/15] Added missing usings --- .../src/ResourceAssembly.cs | 2 ++ .../src/RuntimeFallbacks.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs index 206b062e109959..04d480837c8ad0 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/ResourceAssembly.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; + namespace Microsoft.Extensions.DependencyModel { public class ResourceAssembly diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs index 8de65401dc348c..bb153401a3a9ae 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/RuntimeFallbacks.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; using System.Collections.Generic; using System.Linq; From 459ae5761caada4b039f0885a8f4e2a21f5f17ea Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 17:52:31 +0200 Subject: [PATCH 12/15] Updating all exceptions to FormatException --- .../src/DependencyContextJsonReader.cs | 8 ++++---- .../src/TargetInfo.cs | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 2549454fd19713..426f0a6c941b67 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -516,7 +516,7 @@ private static List ReadRuntimeFiles(ref Utf8JsonReader reader) if (string.IsNullOrEmpty(path)) { - throw new ArgumentException(null, nameof(path)); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(path))); } reader.ReadStartObject(); @@ -556,7 +556,7 @@ private List ReadTargetLibraryRuntimeTargets(ref Utf8Jso if (string.IsNullOrEmpty(runtimePath)) { - throw new ArgumentException(null, nameof(runtimePath)); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(runtimePath))); } var runtimeTarget = new RuntimeTargetEntryStub @@ -607,7 +607,7 @@ private List ReadTargetLibraryResources(ref Utf8JsonReader rea if (string.IsNullOrEmpty(path)) { - throw new ArgumentException(null, nameof(path)); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(path))); } string? locale = null; @@ -728,7 +728,7 @@ private static List ReadRuntimes(ref Utf8JsonReader reader) if (string.IsNullOrEmpty(runtime)) { - throw new ArgumentException(null, nameof(runtime)); + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(runtime))); } runtimeFallbacks.Add(new RuntimeFallbacks(runtime, fallbacks)); diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs index 413ef46c05f0f3..dc94716a3c58ac 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/TargetInfo.cs @@ -1,6 +1,5 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. - using System; namespace Microsoft.Extensions.DependencyModel From acec1f612049919b731a2cf89262d23fb3257400 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Thu, 28 Oct 2021 17:53:49 +0200 Subject: [PATCH 13/15] Moving FormatException while reading target name --- .../src/DependencyContextJsonReader.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 426f0a6c941b67..4bc7c9d8da3a9d 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -358,7 +358,14 @@ private List ReadTargets(ref Utf8JsonReader reader) while (reader.Read() && reader.IsTokenTypeProperty()) { - targets.Add(ReadTarget(ref reader, reader.GetString())); + string? targetName = reader.GetString(); + + if (string.IsNullOrEmpty(targetName)) + { + throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(targetName))); + } + + targets.Add(ReadTarget(ref reader, targetName)); } reader.CheckEndObject(); @@ -366,13 +373,8 @@ private List ReadTargets(ref Utf8JsonReader reader) return targets; } - private Target ReadTarget(ref Utf8JsonReader reader, string? targetName) + private Target ReadTarget(ref Utf8JsonReader reader, string targetName) { - if (string.IsNullOrEmpty(targetName)) - { - throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(targetName))); - } - reader.ReadStartObject(); var libraries = new List(); From edfdd6d3624cbce71cc0878915eff377a5567100 Mon Sep 17 00:00:00 2001 From: Filip Jelic Date: Fri, 29 Oct 2021 01:12:27 +0200 Subject: [PATCH 14/15] Updating PR with new comments. --- .../src/DependencyContextJsonReader.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 4bc7c9d8da3a9d..8353dc9aabcbe1 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -554,7 +554,7 @@ private List ReadTargetLibraryRuntimeTargets(ref Utf8Jso while (reader.Read() && reader.IsTokenTypeProperty()) { - var runtimePath = reader.GetString(); + string? runtimePath = reader.GetString(); if (string.IsNullOrEmpty(runtimePath)) { @@ -652,7 +652,7 @@ private Dictionary ReadLibraries(ref Utf8JsonReader reader) throw new FormatException(SR.Format(SR.RequiredFieldNotSpecified, nameof(libraryName))); } - libraries.Add(libraryName, ReadOneLibrary(ref reader)); + libraries.Add(Pool(libraryName), ReadOneLibrary(ref reader)); } reader.CheckEndObject(); @@ -754,7 +754,7 @@ private IEnumerable CreateLibraries(IEnumerable? librari private Library? CreateLibrary(TargetLibrary targetLibrary, bool runtime, Dictionary? libraryStubs) { - string? nameWithVersion = targetLibrary.Name; + string nameWithVersion = targetLibrary.Name; if (libraryStubs == null || string.IsNullOrEmpty(nameWithVersion) || !libraryStubs.TryGetValue(nameWithVersion, out LibraryStub stub)) { From 457530cd6fee19695a76fdaf2df6c49b6eb6d659 Mon Sep 17 00:00:00 2001 From: Filip Date: Fri, 29 Oct 2021 01:42:49 +0200 Subject: [PATCH 15/15] Update src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs --- .../src/DependencyContextJsonReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs index 8353dc9aabcbe1..e4b26591038502 100644 --- a/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs +++ b/src/libraries/Microsoft.Extensions.DependencyModel/src/DependencyContextJsonReader.cs @@ -756,7 +756,7 @@ private IEnumerable CreateLibraries(IEnumerable? librari { string nameWithVersion = targetLibrary.Name; - if (libraryStubs == null || string.IsNullOrEmpty(nameWithVersion) || !libraryStubs.TryGetValue(nameWithVersion, out LibraryStub stub)) + if (libraryStubs == null || !libraryStubs.TryGetValue(nameWithVersion, out LibraryStub stub)) { throw new InvalidOperationException(SR.Format(SR.LibraryInformationNotFound, nameWithVersion)); }