diff --git a/src/Interactive/HostTest/NuGetPackageResolverTests.cs b/src/Interactive/HostTest/NuGetPackageResolverTests.cs index 2fc46df9c157880173a3d4809f30ae4e608660fc..4b43778129bca46aa8360622ea2f787bc5ea1072 100644 --- a/src/Interactive/HostTest/NuGetPackageResolverTests.cs +++ b/src/Interactive/HostTest/NuGetPackageResolverTests.cs @@ -155,8 +155,11 @@ public void ParsePackageNameAndVersion() ParseInvalidPackageReference("nuget:"); ParseInvalidPackageReference("NUGET:"); ParseInvalidPackageReference("nugetA/1"); - ParseInvalidPackageReference("nuget:A"); - ParseInvalidPackageReference("nuget:A.B"); + + ParseValidPackageReference("nuget:A", "A", ""); + ParseValidPackageReference("nuget:A.B", "A.B", ""); + ParseValidPackageReference("nuget: ", " ", ""); + ParseInvalidPackageReference("nuget:A/"); ParseInvalidPackageReference("nuget:A//1.0"); ParseInvalidPackageReference("nuget:/1.0.0"); @@ -199,6 +202,15 @@ public void WriteProjectJson() ""frameworks"": { ""net46"": {} } +}"); + WriteProjectJsonPackageReference("A", "", +@"{ + ""dependencies"": { + ""A"": """" + }, + ""frameworks"": { + ""net46"": {} + } }"); WriteProjectJsonPackageReference("\n\t", "\"'", @"{ diff --git a/src/Scripting/Core/Resolvers/NuGetPackageResolver.cs b/src/Scripting/Core/Resolvers/NuGetPackageResolver.cs index 1f33651255424194553abb1cc459702e9d87a45d..2258e29d8288c3a62ea9325211a406ad9a5cc302 100644 --- a/src/Scripting/Core/Resolvers/NuGetPackageResolver.cs +++ b/src/Scripting/Core/Resolvers/NuGetPackageResolver.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Immutable; +using System.Diagnostics; namespace Microsoft.CodeAnalysis.Scripting.Hosting { @@ -10,20 +11,30 @@ internal abstract class NuGetPackageResolver private const string ReferencePrefix = "nuget:"; /// - /// Syntax is "nuget:id/version". + /// Syntax is "nuget:name[/version]". /// internal static bool TryParsePackageReference(string reference, out string name, out string version) { if (reference.StartsWith(ReferencePrefix, StringComparison.Ordinal)) { var parts = reference.Substring(ReferencePrefix.Length).Split('/'); - if ((parts.Length == 2) && - (parts[0].Length > 0) && - (parts[1].Length > 0)) + Debug.Assert(parts.Length > 0); + name = parts[0]; + if (name.Length > 0) { - name = parts[0]; - version = parts[1]; - return true; + switch (parts.Length) + { + case 1: + version = string.Empty; + return true; + case 2: + version = parts[1]; + if (version.Length > 0) + { + return true; + } + break; + } } } name = null;