diff --git a/TestAssets/TestProjects/LibraryWithUnresolvablePackageReference/LibraryWithUnresolvablePackageReference.csproj b/TestAssets/TestProjects/LibraryWithUnresolvablePackageReference/LibraryWithUnresolvablePackageReference.csproj
new file mode 100755
index 000000000..66c164859
--- /dev/null
+++ b/TestAssets/TestProjects/LibraryWithUnresolvablePackageReference/LibraryWithUnresolvablePackageReference.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netstandard1.5
+
+
+
+
+
+
+
diff --git a/src/dotnet/commands/dotnet-msbuild/MSBuildForwardingApp.cs b/src/dotnet/commands/dotnet-msbuild/MSBuildForwardingApp.cs
index 5b5e68232..6b2b0f47f 100644
--- a/src/dotnet/commands/dotnet-msbuild/MSBuildForwardingApp.cs
+++ b/src/dotnet/commands/dotnet-msbuild/MSBuildForwardingApp.cs
@@ -41,10 +41,11 @@ namespace Microsoft.DotNet.Tools.MSBuild
{
Type loggerType = typeof(MSBuildLogger);
- argsToForward = argsToForward.Concat(new[]
- {
- $"/Logger:{loggerType.FullName},{loggerType.GetTypeInfo().Assembly.Location}"
- });
+ argsToForward = argsToForward
+ .Concat(new[]
+ {
+ $"/Logger:{loggerType.FullName},{loggerType.GetTypeInfo().Assembly.Location}"
+ });
}
catch (Exception)
{
@@ -54,7 +55,7 @@ namespace Microsoft.DotNet.Tools.MSBuild
_forwardingApp = new ForwardingApp(
GetMSBuildExePath(),
- _msbuildRequiredParameters.Concat(argsToForward),
+ _msbuildRequiredParameters.Concat(argsToForward.Select(Escape)),
environmentVariables: _msbuildRequiredEnvironmentVariables);
}
@@ -77,6 +78,13 @@ namespace Microsoft.DotNet.Tools.MSBuild
return app.Option("-v|--verbosity", LocalizableStrings.VerbosityOptionDescription, CommandOptionType.SingleValue);
}
+ private static string Escape(string arg) =>
+ // this is a workaround for https://github.com/Microsoft/msbuild/issues/1622
+ (arg.StartsWith("/p:RestoreSources=", StringComparison.OrdinalIgnoreCase)) ?
+ arg.Replace(";", "%3B")
+ .Replace("://", ":%2F%2F") :
+ arg;
+
private static string GetMSBuildExePath()
{
return Path.Combine(
diff --git a/test/dotnet-msbuild.Tests/GivenDotnetMSBuildBuildsProjects.cs b/test/dotnet-msbuild.Tests/GivenDotnetMSBuildBuildsProjects.cs
index dde27668c..117f34bae 100644
--- a/test/dotnet-msbuild.Tests/GivenDotnetMSBuildBuildsProjects.cs
+++ b/test/dotnet-msbuild.Tests/GivenDotnetMSBuildBuildsProjects.cs
@@ -5,18 +5,27 @@ using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
+using System.Runtime.InteropServices;
using FluentAssertions;
using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.Tools.MSBuild;
using Microsoft.DotNet.Tools.Test.Utilities;
using NuGet.Protocol;
using Xunit;
+using Xunit.Abstractions;
using MSBuildCommand = Microsoft.DotNet.Tools.Test.Utilities.MSBuildCommand;
namespace Microsoft.DotNet.Cli.MSBuild.Tests
{
public class GivenDotnetMSBuildBuildsProjects : TestBase
{
+ private readonly ITestOutputHelper _output;
+
+ public GivenDotnetMSBuildBuildsProjects(ITestOutputHelper output)
+ {
+ _output = output;
+ }
+
[Fact]
public void ItRunsSpecifiedTargetsWithPropertiesCorrectly()
{
@@ -76,6 +85,37 @@ namespace Microsoft.DotNet.Cli.MSBuild.Tests
}
}
+ [Fact]
+ public void WhenRestoreSourcesStartsWithUnixPathThenHttpsSourceIsParsedCorrectly()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ return;
+ }
+
+ // this is a workaround for https://github.com/Microsoft/msbuild/issues/1622
+ var testInstance = TestAssets.Get("LibraryWithUnresolvablePackageReference")
+ .CreateInstance()
+ .WithSourceFiles();
+
+ var root = testInstance.Root;
+ var somePathThatExists = "/usr/local/bin";
+
+ var result = new DotnetCommand()
+ .WithWorkingDirectory(root)
+ .Execute($"msbuild /p:RestoreSources={somePathThatExists};https://api.nuget.org/v3/index.json /t:restore LibraryWithUnresolvablePackageReference.csproj");
+
+ _output.WriteLine($"[STDOUT]\n{result.StdOut}\n[STDERR]\n{result.StdErr}");
+
+ result.Should().Fail();
+
+ result.StdOut.Should()
+ .ContainVisuallySameFragment(
+@"Feeds used:
+ /usr/local/bin
+ https://api.nuget.org/v3/index.json");
+ }
+
[Fact]
public void WhenDotnetRunHelpIsInvokedAppArgumentsTextIsIncludedInOutput()
{
@@ -85,7 +125,7 @@ namespace Microsoft.DotNet.Cli.MSBuild.Tests
var result = new TestCommand("dotnet")
.WithWorkingDirectory(projectDirectory.Path)
.ExecuteWithCapturedOutput("run --help");
-
+
result.ExitCode.Should().Be(0);
result.StdOut.Should().Contain(AppArgumentsText);
}
diff --git a/test/dotnet.Tests/PackagedCommandTests.cs b/test/dotnet.Tests/PackagedCommandTests.cs
index d1f8b0c93..52d58a9e7 100644
--- a/test/dotnet.Tests/PackagedCommandTests.cs
+++ b/test/dotnet.Tests/PackagedCommandTests.cs
@@ -41,7 +41,6 @@ namespace Microsoft.DotNet.Tests
};
}
}
-
public static IEnumerable