Do no pass down to implicit restore the framework option.
This commit is contained in:
parent
94e728b9ab
commit
5e5b4de0b9
16 changed files with 242 additions and 24 deletions
|
@ -0,0 +1,24 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
using System;
|
||||
|
||||
namespace TestLibrary
|
||||
{
|
||||
public static class Helper
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the message from the helper. This comment is here to help test XML documentation file generation, please do not remove it.
|
||||
/// </summary>
|
||||
/// <returns>A message</returns>
|
||||
public static string GetMessage()
|
||||
{
|
||||
return "This string came from the test library!";
|
||||
}
|
||||
|
||||
public static void SayHi()
|
||||
{
|
||||
Console.WriteLine("Hello there!");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
using System;
|
||||
using TestLibrary;
|
||||
using Xunit;
|
||||
|
||||
namespace TestNamespace
|
||||
{
|
||||
public class VSTestXunitTests
|
||||
{
|
||||
[Fact]
|
||||
public void VSTestXunitPassTest()
|
||||
{
|
||||
Assert.Equal("This string came from the test library!", Helper.GetMessage());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void VSTestXunitFailTest()
|
||||
{
|
||||
Assert.Equal(2, 2);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), testAsset.props))\testAsset.props" />
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../TestLibrary/TestLibrary.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(CLI_TestPlatform_Version)" />
|
||||
<PackageReference Include="xunit" Version="2.2.0-beta4-build3444" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta4-build1194" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,12 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TestLibrary\TestLibrary.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,15 @@
|
|||
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
|
||||
using System;
|
||||
|
||||
namespace TestApp
|
||||
{
|
||||
class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine(TestLibrary.Helper.GetMessage());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,31 +12,36 @@ namespace Microsoft.DotNet.Tools
|
|||
{
|
||||
private bool NoRestore { get; }
|
||||
|
||||
private IEnumerable<string> ArgsToForward { get; }
|
||||
private IEnumerable<string> ParsedArguments { get; }
|
||||
|
||||
private IEnumerable<string> TrailingArguments { get; }
|
||||
|
||||
private IEnumerable<string> ArgsToForwardToRestore()
|
||||
{
|
||||
var restoreArguments = ArgsToForward.Where(a =>
|
||||
!a.StartsWith("/t:") &&
|
||||
!a.StartsWith("/target:") &&
|
||||
!a.StartsWith("/ConsoleLoggerParameters:") &&
|
||||
!a.StartsWith("/clp:"));
|
||||
var restoreArguments = ParsedArguments.Where(a =>
|
||||
!a.StartsWith("/p:TargetFramework"));
|
||||
|
||||
if (!restoreArguments.Any(a => a.StartsWith("/v:") || a.StartsWith("/verbosity:")))
|
||||
if (!restoreArguments.Any(a => a.StartsWith("/verbosity:")))
|
||||
{
|
||||
restoreArguments = restoreArguments.Concat(new string[] { "/v:q" });
|
||||
restoreArguments = restoreArguments.Concat(new string[] { "/verbosity:q" });
|
||||
}
|
||||
|
||||
return restoreArguments;
|
||||
return restoreArguments.Concat(TrailingArguments);
|
||||
}
|
||||
|
||||
private bool ShouldRunImplicitRestore => !NoRestore;
|
||||
|
||||
public RestoringCommand(IEnumerable<string> msbuildArgs, bool noRestore, string msbuildPath = null)
|
||||
public RestoringCommand(
|
||||
IEnumerable<string> msbuildArgs,
|
||||
IEnumerable<string> parsedArguments,
|
||||
IEnumerable<string> trailingArguments,
|
||||
bool noRestore,
|
||||
string msbuildPath = null)
|
||||
: base(msbuildArgs, msbuildPath)
|
||||
{
|
||||
NoRestore = noRestore;
|
||||
ArgsToForward = msbuildArgs;
|
||||
ParsedArguments = parsedArguments;
|
||||
TrailingArguments = trailingArguments;
|
||||
}
|
||||
|
||||
public override int Execute()
|
||||
|
|
|
@ -15,8 +15,13 @@ namespace Microsoft.DotNet.Tools.Build
|
|||
{
|
||||
public class BuildCommand : RestoringCommand
|
||||
{
|
||||
public BuildCommand(IEnumerable<string> msbuildArgs, bool noRestore, string msbuildPath = null)
|
||||
: base(msbuildArgs, noRestore, msbuildPath)
|
||||
public BuildCommand(
|
||||
IEnumerable<string> msbuildArgs,
|
||||
IEnumerable<string> userDefinedArguments,
|
||||
IEnumerable<string> trailingArguments,
|
||||
bool noRestore,
|
||||
string msbuildPath = null)
|
||||
: base(msbuildArgs, userDefinedArguments, trailingArguments, noRestore, msbuildPath)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -49,7 +54,12 @@ namespace Microsoft.DotNet.Tools.Build
|
|||
|
||||
bool noRestore = appliedBuildOptions.HasOption("--no-restore");
|
||||
|
||||
return new BuildCommand(msbuildArgs, noRestore, msbuildPath);
|
||||
return new BuildCommand(
|
||||
msbuildArgs,
|
||||
appliedBuildOptions.OptionValuesToBeForwarded(),
|
||||
appliedBuildOptions.Arguments,
|
||||
noRestore,
|
||||
msbuildPath);
|
||||
}
|
||||
|
||||
public static int Run(string[] args)
|
||||
|
|
|
@ -14,8 +14,13 @@ namespace Microsoft.DotNet.Tools.Pack
|
|||
{
|
||||
public class PackCommand : RestoringCommand
|
||||
{
|
||||
public PackCommand(IEnumerable<string> msbuildArgs, bool noRestore, string msbuildPath = null)
|
||||
: base(msbuildArgs, noRestore, msbuildPath)
|
||||
public PackCommand(
|
||||
IEnumerable<string> msbuildArgs,
|
||||
IEnumerable<string> userDefinedArguments,
|
||||
IEnumerable<string> trailingArguments,
|
||||
bool noRestore,
|
||||
string msbuildPath = null)
|
||||
: base(msbuildArgs, userDefinedArguments, trailingArguments, noRestore, msbuildPath)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -40,7 +45,12 @@ namespace Microsoft.DotNet.Tools.Pack
|
|||
|
||||
bool noRestore = parsedPack.HasOption("--no-restore");
|
||||
|
||||
return new PackCommand(msbuildArgs, noRestore, msbuildPath);
|
||||
return new PackCommand(
|
||||
msbuildArgs,
|
||||
parsedPack.OptionValuesToBeForwarded(),
|
||||
parsedPack.Arguments,
|
||||
noRestore,
|
||||
msbuildPath);
|
||||
}
|
||||
|
||||
public static int Run(string[] args)
|
||||
|
|
|
@ -13,8 +13,13 @@ namespace Microsoft.DotNet.Tools.Publish
|
|||
{
|
||||
public class PublishCommand : RestoringCommand
|
||||
{
|
||||
private PublishCommand(IEnumerable<string> msbuildArgs, bool noRestore, string msbuildPath = null)
|
||||
: base(msbuildArgs, noRestore, msbuildPath)
|
||||
private PublishCommand(
|
||||
IEnumerable<string> msbuildArgs,
|
||||
IEnumerable<string> userDefinedArguments,
|
||||
IEnumerable<string> trailingArguments,
|
||||
bool noRestore,
|
||||
string msbuildPath = null)
|
||||
: base(msbuildArgs, userDefinedArguments, trailingArguments, noRestore, msbuildPath)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -40,7 +45,12 @@ namespace Microsoft.DotNet.Tools.Publish
|
|||
|
||||
bool noRestore = appliedPublishOption.HasOption("--no-restore");
|
||||
|
||||
return new PublishCommand(msbuildArgs, noRestore, msbuildPath);
|
||||
return new PublishCommand(
|
||||
msbuildArgs,
|
||||
appliedPublishOption.OptionValuesToBeForwarded(),
|
||||
appliedPublishOption.Arguments,
|
||||
noRestore,
|
||||
msbuildPath);
|
||||
}
|
||||
|
||||
public static int Run(string[] args)
|
||||
|
|
|
@ -145,7 +145,8 @@ namespace Microsoft.DotNet.Tools.Run
|
|||
|
||||
buildArgs.AddRange(RestoreArgs);
|
||||
|
||||
var buildResult = new RestoringCommand(buildArgs, NoRestore).Execute();
|
||||
var buildResult =
|
||||
new RestoringCommand(buildArgs, RestoreArgs, new [] { Project }, NoRestore).Execute();
|
||||
if (buildResult != 0)
|
||||
{
|
||||
Reporter.Error.WriteLine();
|
||||
|
|
|
@ -16,8 +16,13 @@ namespace Microsoft.DotNet.Tools.Test
|
|||
{
|
||||
public class TestCommand : RestoringCommand
|
||||
{
|
||||
public TestCommand(IEnumerable<string> msbuildArgs, bool noRestore, string msbuildPath = null)
|
||||
: base(msbuildArgs, noRestore, msbuildPath)
|
||||
public TestCommand(
|
||||
IEnumerable<string> msbuildArgs,
|
||||
IEnumerable<string> userDefinedArguments,
|
||||
IEnumerable<string> trailingArguments,
|
||||
bool noRestore,
|
||||
string msbuildPath = null)
|
||||
: base(msbuildArgs, userDefinedArguments, trailingArguments, noRestore, msbuildPath)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -67,7 +72,12 @@ namespace Microsoft.DotNet.Tools.Test
|
|||
|
||||
bool noRestore = parsedTest.HasOption("--no-restore");
|
||||
|
||||
return new TestCommand(msbuildArgs, noRestore, msbuildPath);
|
||||
return new TestCommand(
|
||||
msbuildArgs,
|
||||
parsedTest.OptionValuesToBeForwarded(),
|
||||
parsedTest.Arguments,
|
||||
noRestore,
|
||||
msbuildPath);
|
||||
}
|
||||
|
||||
public static int Run(string[] args)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using FluentAssertions;
|
||||
using Microsoft.DotNet.TestFramework;
|
||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
|
@ -52,6 +53,23 @@ namespace Microsoft.DotNet.Cli.Build.Tests
|
|||
.Should().Pass();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItCanBuildAMultiTFMProjectWithImplicitRestore()
|
||||
{
|
||||
var testInstance = TestAssets.Get(
|
||||
TestAssetKinds.DesktopTestProjects,
|
||||
"NETFrameworkReferenceNETStandard20")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles();
|
||||
|
||||
string projectDirectory = Path.Combine(testInstance.Root.FullName, "MultiTFMTestApp");
|
||||
|
||||
new BuildCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.Execute("--framework netcoreapp2.0")
|
||||
.Should().Pass();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItDoesNotImplicitlyRestoreAProjectWhenBuildingWithTheNoRestoreOption()
|
||||
{
|
||||
|
|
|
@ -8,6 +8,7 @@ using System.Runtime.InteropServices;
|
|||
using FluentAssertions;
|
||||
using Microsoft.DotNet.Cli.Utils;
|
||||
using Microsoft.DotNet.PlatformAbstractions;
|
||||
using Microsoft.DotNet.TestFramework;
|
||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||
using Xunit;
|
||||
|
||||
|
@ -60,6 +61,23 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
|
|||
.Should().Pass();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItCanPublishAMultiTFMProjectWithImplicitRestore()
|
||||
{
|
||||
var testInstance = TestAssets.Get(
|
||||
TestAssetKinds.DesktopTestProjects,
|
||||
"NETFrameworkReferenceNETStandard20")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles();
|
||||
|
||||
string projectDirectory = Path.Combine(testInstance.Root.FullName, "MultiTFMTestApp");
|
||||
|
||||
new PublishCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.Execute("--framework netcoreapp2.0")
|
||||
.Should().Pass();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItDoesNotImplicitlyRestoreAProjectWhenPublishingWithTheNoRestoreOption()
|
||||
{
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System.IO;
|
||||
using FluentAssertions;
|
||||
using Microsoft.DotNet.TestFramework;
|
||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||
using Xunit;
|
||||
|
||||
|
@ -54,6 +55,24 @@ namespace Microsoft.DotNet.Cli.Run.Tests
|
|||
.And.HaveStdOutContaining("Hello World!");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItCanRunAMultiTFMProjectWithImplicitRestore()
|
||||
{
|
||||
var testInstance = TestAssets.Get(
|
||||
TestAssetKinds.DesktopTestProjects,
|
||||
"NETFrameworkReferenceNETStandard20")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles();
|
||||
|
||||
string projectDirectory = Path.Combine(testInstance.Root.FullName, "MultiTFMTestApp");
|
||||
|
||||
new RunCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput("--framework netcoreapp2.0")
|
||||
.Should().Pass()
|
||||
.And.HaveStdOutContaining("This string came from the test library!");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItDoesNotImplicitlyRestoreAProjectWhenRunningWithTheNoRestoreOption()
|
||||
{
|
||||
|
|
|
@ -7,6 +7,7 @@ using Microsoft.DotNet.TestFramework;
|
|||
using Microsoft.DotNet.Cli.Utils;
|
||||
using System.IO;
|
||||
using System;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.DotNet.Cli.Test.Tests
|
||||
{
|
||||
|
@ -75,5 +76,22 @@ namespace Microsoft.DotNet.Cli.Test.Tests
|
|||
result.StdOut.Should().Contain("Failed TestNamespace.VSTestXunitTests.VSTestXunitFailTestNetCoreApp");
|
||||
result.ExitCode.Should().Be(1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ItCanTestAMultiTFMProjectWithImplicitRestore()
|
||||
{
|
||||
var testInstance = TestAssets.Get(
|
||||
TestAssetKinds.DesktopTestProjects,
|
||||
"MultiTFMXunitProject")
|
||||
.CreateInstance()
|
||||
.WithSourceFiles();
|
||||
|
||||
string projectDirectory = Path.Combine(testInstance.Root.FullName, "XUnitProject");
|
||||
|
||||
new DotnetTestCommand()
|
||||
.WithWorkingDirectory(projectDirectory)
|
||||
.ExecuteWithCapturedOutput($"{TestBase.ConsoleLoggerOutputNormal} --framework netcoreapp2.0")
|
||||
.Should().Pass();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue