diff --git a/build/MSBuildExtensions.targets b/build/MSBuildExtensions.targets
index 042cd2e93..f5365724a 100644
--- a/build/MSBuildExtensions.targets
+++ b/build/MSBuildExtensions.targets
@@ -132,6 +132,16 @@
<_NETCoreSdkIsPreview Condition=" '$(DropSuffix)' != 'true' ">true
+
+
+
+
+
@@ -170,6 +180,7 @@ Copyright (c) .NET Foundation. All rights reserved.
$(_NETCoreAppTargetFrameworkVersion)
$(_NETCoreAppPackageVersion)
+ $(_UseBundledNETCoreAppPackageVersionAsDefaultNetCorePatchVersion)
$(_NETStandardTargetFrameworkVersion)
$(_NETStandardLibraryPackageVersion)
$(_NETCorePlatformsPackageVersion)
@@ -182,9 +193,9 @@ Copyright (c) .NET Foundation. All rights reserved.
$(_DefaultPatchVersionForAspNetCoreApp2_1)
- 1.0.11
- 1.1.8
- 2.0.7
+ 1.0.12
+ 1.1.9
+ 2.0.9
]]>
diff --git a/build/Microsoft.DotNet.Cli.tasks b/build/Microsoft.DotNet.Cli.tasks
index 901a48f84..812c04925 100644
--- a/build/Microsoft.DotNet.Cli.tasks
+++ b/build/Microsoft.DotNet.Cli.tasks
@@ -23,6 +23,7 @@
+
diff --git a/build/NugetConfigFile.targets b/build/NugetConfigFile.targets
index 604d26b00..37d2ddb7c 100644
--- a/build/NugetConfigFile.targets
+++ b/build/NugetConfigFile.targets
@@ -5,6 +5,7 @@
+
+
]]>
diff --git a/build_projects/dotnet-cli-build/GetUseBundledVersionAsDefaultVersion.cs b/build_projects/dotnet-cli-build/GetUseBundledVersionAsDefaultVersion.cs
new file mode 100644
index 000000000..91d10694a
--- /dev/null
+++ b/build_projects/dotnet-cli-build/GetUseBundledVersionAsDefaultVersion.cs
@@ -0,0 +1,30 @@
+// 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 System.IO;
+using Microsoft.Build.Utilities;
+using Microsoft.Build.Framework;
+using Microsoft.DotNet.Cli.Build.Framework;
+using NuGet.Versioning;
+
+namespace Microsoft.DotNet.Cli.Build
+{
+ public class GetUseBundledNETCoreAppPackageVersionAsDefaultNetCorePatchVersion : Task
+ {
+ [Required]
+ public string BundledNETCoreAppPackageVersion { get; set; }
+
+ [Output]
+ public string UseBundledNETCoreAppPackageVersionAsDefaultNetCorePatchVersion { get; set; }
+
+ public override bool Execute()
+ {
+ var parsedVersion = NuGetVersion.Parse(BundledNETCoreAppPackageVersion);
+ UseBundledNETCoreAppPackageVersionAsDefaultNetCorePatchVersion =
+ (parsedVersion.Patch == 0) && parsedVersion.IsPrerelease ? "true" : "false";
+
+ return true;
+ }
+ }
+}
diff --git a/test/EndToEnd/GivenFrameworkDependentApps.cs b/test/EndToEnd/GivenFrameworkDependentApps.cs
new file mode 100644
index 000000000..605e22bd2
--- /dev/null
+++ b/test/EndToEnd/GivenFrameworkDependentApps.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Xml.Linq;
+using FluentAssertions;
+using Microsoft.DotNet.PlatformAbstractions;
+using Microsoft.DotNet.TestFramework;
+using Microsoft.DotNet.Tools.Test.Utilities;
+using NuGet.ProjectModel;
+using NuGet.Versioning;
+using Xunit;
+
+namespace EndToEnd
+{
+ public class GivenFrameworkDependentApps : TestBase
+ {
+ [Theory]
+ [ClassData(typeof(SupportedNetCoreAppVersions))]
+ public void ItDoesNotRollForwardToTheLatestVersion(string minorVersion)
+ {
+ var _testInstance = TestAssets.Get("TestAppSimple")
+ .CreateInstance(identifier: minorVersion)
+ // scope the feed to only dotnet-core feed to avoid flaky when different feed has a newer / lower version
+ .WithNuGetConfig(new RepoDirectoriesProvider().TestPackages)
+ .WithSourceFiles();
+
+ string projectDirectory = _testInstance.Root.FullName;
+
+ string projectPath = Path.Combine(projectDirectory, "TestAppSimple.csproj");
+
+ var project = XDocument.Load(projectPath);
+ var ns = project.Root.Name.Namespace;
+
+ // Update TargetFramework to the right version of .NET Core
+ project.Root.Element(ns + "PropertyGroup")
+ .Element(ns + "TargetFramework")
+ .Value = "netcoreapp" + minorVersion;
+
+ project.Save(projectPath);
+
+ // Get the resolved version of .NET Core
+ new RestoreCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .Execute()
+ .Should().Pass();
+
+ string assetsFilePath = Path.Combine(projectDirectory, "obj", "project.assets.json");
+ var assetsFile = new LockFileFormat().Read(assetsFilePath);
+
+ var versionInAssertsJson = GetNetCoreAppVersion(assetsFile);
+ versionInAssertsJson.Should().NotBeNull();
+
+ if (versionInAssertsJson.IsPrerelease && versionInAssertsJson.Patch == 0)
+ {
+ // if the bundled version is, for example, a prerelease of
+ // .NET Core 2.1.1, that we don't roll forward to that prerelease
+ // version for framework-dependent deployments.
+ return;
+ }
+
+ versionInAssertsJson.ToNormalizedString().Should().BeEquivalentTo(GetExpectedVersion(minorVersion));
+ }
+
+ private NuGetVersion GetNetCoreAppVersion(LockFile lockFile)
+ {
+ return lockFile?.Targets?.SingleOrDefault(t => t.RuntimeIdentifier == null)
+ ?.Libraries?.SingleOrDefault(l =>
+ string.Compare(l.Name, "Microsoft.NETCore.App", StringComparison.CurrentCultureIgnoreCase) == 0)
+ ?.Version;
+ }
+
+ public string GetExpectedVersion(string minorVersion)
+ {
+ if (minorVersion.StartsWith("1.0"))
+ {
+ return "1.0.5"; // special case for 1.0
+ }
+ else if (minorVersion.StartsWith("1.1"))
+ {
+ return "1.1.2"; // special case for 1.1
+ }
+ else
+ {
+ var parsed = NuGetVersion.Parse(minorVersion);
+ return new NuGetVersion(parsed.Major, parsed.Minor, 0).ToNormalizedString();
+ }
+ }
+ }
+}
diff --git a/test/EndToEnd/GivenSelfContainedAppsRollForward.cs b/test/EndToEnd/GivenSelfContainedAppsRollForward.cs
index 080197472..b624cd14f 100644
--- a/test/EndToEnd/GivenSelfContainedAppsRollForward.cs
+++ b/test/EndToEnd/GivenSelfContainedAppsRollForward.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
@@ -13,13 +12,13 @@ using Xunit;
namespace EndToEnd
{
- public class GivenSelfContainedAppsRollForward : TestBase
+ public partial class GivenSelfContainedAppsRollForward : TestBase
{
- [Theory(Skip = "Runtime 1.1 support for openSUSE and Fedora 27 needed")]
+ [Theory]
// MemberData is used instead of InlineData here so we can access it in another test to
// verify that we are covering the latest release of .NET Core
- [MemberData(nameof(SupportedNetCoreAppVersions))]
+ [ClassData(typeof(SupportedNetCoreAppVersions))]
public void ItRollsForwardToTheLatestVersion(string minorVersion)
{
var _testInstance = TestAssets.Get("TestAppSimple")
@@ -118,25 +117,11 @@ namespace EndToEnd
.Element(ns + "TargetFramework")
.Value;
- SupportedNetCoreAppVersions.Select(v => $"netcoreapp{v[0]}")
- .Should().Contain(targetFramework, $"the {nameof(SupportedNetCoreAppVersions)} property should include the default version " +
+ SupportedNetCoreAppVersions.Versions.Select(v => $"netcoreapp{v[0]}")
+ .Should().Contain(targetFramework, $"the {nameof(SupportedNetCoreAppVersions)}.{nameof(SupportedNetCoreAppVersions.Versions)} property should include the default version " +
"of .NET Core created by \"dotnet new\"");
}
}
-
- public static IEnumerable