Refactor template packaging logic to reduce duplication

This commit is contained in:
Daniel Plaisted 2020-10-20 21:32:16 -07:00
parent bc317938ab
commit e505707598
9 changed files with 216 additions and 280 deletions

View file

@ -1,6 +1,8 @@
// 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.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using NuGet.Versioning;
@ -9,26 +11,81 @@ namespace Microsoft.DotNet.Cli.Build
{
public class CalculateTemplateVersions : Task
{
// Group BundledTemplates by TemplateFrameworkVersion
// In each group, get the version of the template with UseVersionForTemplateInstallPath=true
// From that version number, get the BundledTemplateInstallPath, BundledTemplateMajorMinorVersion, and BundledTemplateMajorMinorPatchVersion
[Required]
public string AspNetCorePackageVersionTemplate { get; set; }
public ITaskItem [] BundledTemplates { get; set; }
[Required]
public string FullNugetVersion { get; set; }
[Required]
public string ProductMonikerRid { get; set; }
[Required]
public string InstallerExtension { get; set; }
[Required]
public int CombinedBuildNumberAndRevision { get; set; }
// Should be the BundledTemplates with BundledTemplateInstallPath metadata set to the value calculated for that group
[Output]
public ITaskItem [] BundledTemplatesWithInstallPaths { get; set; }
// For each group of templates (grouped by TemplateFrameworkVersion), this should be the following
// ItemSpec: NetCore60Templates
// TemplateBaseFilename: dotnet-60templates
// TemplatesMajorMinorVersion: 6.0 (from BundledTemplateMajorMinorVersion from group)
// InstallerUpgradeCode: Guid generated using GenerateGuidFromName, combining TemplateBaseFilename, FullNugetVersion, ProductMonikerRid, and InstallerExtension
// MSIVersion: Result of calling GenerateMsiVersionFromFullVersion logic with CombinedBuildNumberAndRevision and BundledTemplateMajorMinorPatchVersion from template group
[Output]
public string BundledTemplateInstallPath { get; set; }
[Output]
public string BundledTemplateMajorMinorVersion { get; set; }
[Output]
public string BundledTemplateMajorMinorPatchVersion { get; set; }
public ITaskItem [] TemplatesComponents { get; set; }
private const int _patchVersionResetOffset = 1;
public override bool Execute()
{
var result = Calculate(AspNetCorePackageVersionTemplate);
BundledTemplateInstallPath = result.BundledTemplateInstallPath;
BundledTemplateMajorMinorVersion = result.BundledTemplateMajorMinorVersion;
BundledTemplateMajorMinorPatchVersion = result.BundledTemplateMajorMinorPatchVersion;
var groups = BundledTemplates.GroupBy(bt => bt.GetMetadata("TemplateFrameworkVersion"))
.ToDictionary(g => g.Key, g =>
{
var itemWithVersion = g.SingleOrDefault(i => i.GetMetadata("UseVersionForTemplateInstallPath").Equals("true", StringComparison.OrdinalIgnoreCase));
if (itemWithVersion == null)
{
throw new InvalidOperationException("Could not find single item with UseVersionForTemplateInstallPath for templates with TemplateFrameworkVersion: " + g.Key);
}
return Calculate(itemWithVersion.GetMetadata("PackageVersion"));
});
BundledTemplatesWithInstallPaths = BundledTemplates.Select(t =>
{
var templateWithInstallPath = new TaskItem(t);
templateWithInstallPath.SetMetadata("BundledTemplateInstallPath", groups[t.GetMetadata("TemplateFrameworkVersion")].BundledTemplateInstallPath);
return templateWithInstallPath;
}).ToArray();
TemplatesComponents = groups.Select(g =>
{
string majorMinorWithoutDots = g.Value.BundledTemplateMajorMinorVersion.Replace(".", "");
var componentItem = new TaskItem($"NetCore{majorMinorWithoutDots}Templates");
var templateBaseFilename = $"dotnet-{majorMinorWithoutDots}templates";
componentItem.SetMetadata("TemplateBaseFilename", templateBaseFilename);
componentItem.SetMetadata("TemplatesMajorMinorVersion", g.Value.BundledTemplateMajorMinorVersion);
var installerUpgradeCode = GenerateGuidFromName.GenerateGuid(string.Join("-", templateBaseFilename, FullNugetVersion, ProductMonikerRid) + InstallerExtension).ToString().ToUpper();
componentItem.SetMetadata("InstallerUpgradeCode", installerUpgradeCode);
componentItem.SetMetadata("MSIVersion", GenerateMsiVersionFromFullVersion.GenerateMsiVersion(CombinedBuildNumberAndRevision, g.Value.BundledTemplateMajorMinorPatchVersion));
var brandName = System.Version.Parse(g.Key).Major >= 5 ?
$"Microsoft .NET {g.Key} Templates" :
$"Microsoft .NET Core {g.Key} Templates";
componentItem.SetMetadata("BrandNameWithoutVersion", brandName);
return componentItem;
}).ToArray();
return true;
}

View file

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace Microsoft.DotNet.Cli.Build
{
// Multiple PackageDownload items for the same package are not supported. Rather, to download multiple versions of the same
// package, the PackageDownload items can have a semicolon-separated list of versions (each in brackets) as the Version metadata.
// So this task groups a list of items with PackageVersion metadata into a list of items which can be used as PackageDownloads
public class CollatePackageDownloads : Task
{
[Required]
public ITaskItem[] Packages { get; set; }
[Output]
public ITaskItem [] PackageDownloads { get; set; }
public override bool Execute()
{
PackageDownloads = Packages.GroupBy(p => p.ItemSpec)
.Select(g =>
{
var packageDownloadItem = new TaskItem(g.Key);
packageDownloadItem.SetMetadata("Version", string.Join(";",
g.Select(p => "[" + p.GetMetadata("PackageVersion") + "]")));
return packageDownloadItem;
}).ToArray();
return true;
}
}
}

View file

@ -20,19 +20,24 @@ namespace Microsoft.DotNet.Cli.Build
public override bool Execute()
{
var parsedVersion = NuGetVersion.Parse(VersionMajorMinorPatch);
MsiVersion = GenerateMsiVersion(VersionRevision, VersionMajorMinorPatch);
return true;
}
public static string GenerateMsiVersion(int versionRevision, string versionMajorMinorPatch)
{
var parsedVersion = NuGetVersion.Parse(versionMajorMinorPatch);
var buildVersion = new Version()
{
Major = parsedVersion.Major,
Minor = parsedVersion.Minor,
Patch = parsedVersion.Patch,
VersionRevision = VersionRevision
VersionRevision = versionRevision
};
MsiVersion = buildVersion.GenerateMsiVersion();
return true;
return buildVersion.GenerateMsiVersion();
}
}
}

View file

@ -13,10 +13,6 @@
<HostFxrBrandName>Microsoft .NET Host FX Resolver $(HostFxrVersion)</HostFxrBrandName>
<SharedFrameworkName>Microsoft.NETCore.App</SharedFrameworkName>
<SharedFrameworkNugetName>$(SharedFrameworkName)</SharedFrameworkNugetName>
<BundledTemplates50BrandName>Microsoft .NET Core 5.0 Templates $(Version)</BundledTemplates50BrandName>
<BundledTemplates31BrandName>Microsoft .NET Core 3.1 Templates $(Version)</BundledTemplates31BrandName>
<BundledTemplates30BrandName>Microsoft .NET Core 3.0 Templates $(Version)</BundledTemplates30BrandName>
<BundledTemplates21BrandName>Microsoft .NET Core 2.1 Templates $(Version)</BundledTemplates21BrandName>
</PropertyGroup>
</Target>

View file

@ -39,5 +39,6 @@
<UsingTask TaskName="GetRuntimePackRids" AssemblyFile="$(CoreSdkTaskDll)"/>
<UsingTask TaskName="GenerateMSBuildExtensionsSWR" AssemblyFile="$(CoreSdkTaskDll)"/>
<UsingTask TaskName="GetLinuxNativeInstallerDependencyVersions" AssemblyFile="$(CoreSdkTaskDll)"/>
<UsingTask TaskName="CollatePackageDownloads" AssemblyFile="$(CoreSdkTaskDll)"/>
</Project>

View file

@ -1,55 +1,23 @@
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CalculateTemplatesVersions" DependsOnTargets="SetupWixProperties">
<CalculateTemplateVersions AspNetCorePackageVersionTemplate="$(AspNetCorePackageVersionFor60Templates)">
<Output TaskParameter="BundledTemplateInstallPath" PropertyName="BundledTemplates60InstallPath" />
<Output TaskParameter="BundledTemplateMajorMinorVersion" PropertyName="BundledTemplates60MajorMinorVersion" />
<Output TaskParameter="BundledTemplateMajorMinorPatchVersion" PropertyName="BundledTemplates60MajorMinorPatchVersion" />
<CalculateTemplateVersions
BundledTemplates="@(BundledTemplates)"
FullNugetVersion="$(FullNugetVersion)"
ProductMonikerRid="$(ProductMonikerRid)"
InstallerExtension="$(InstallerExtension)"
CombinedBuildNumberAndRevision="$(CombinedBuildNumberAndRevision)"
>
<Output TaskParameter="BundledTemplatesWithInstallPaths" ItemName="BundledTemplatesWithInstallPaths" />
<Output TaskParameter="TemplatesComponents" ItemName="TemplatesComponents" />
</CalculateTemplateVersions>
<CalculateTemplateVersions AspNetCorePackageVersionTemplate="$(AspNetCorePackageVersionFor50Templates)">
<Output TaskParameter="BundledTemplateInstallPath" PropertyName="BundledTemplates50InstallPath" />
<Output TaskParameter="BundledTemplateMajorMinorVersion" PropertyName="BundledTemplates50MajorMinorVersion" />
<Output TaskParameter="BundledTemplateMajorMinorPatchVersion" PropertyName="BundledTemplates50MajorMinorPatchVersion" />
</CalculateTemplateVersions>
<ItemGroup>
<TemplatesComponents>
<MSIInstallerFile>$(ArtifactsNonShippingPackagesDir)%(TemplatesComponents.TemplateBaseFilename)-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)</MSIInstallerFile>
</TemplatesComponents>
</ItemGroup>
<CalculateTemplateVersions AspNetCorePackageVersionTemplate="$(AspNetCorePackageVersionFor31Templates)">
<Output TaskParameter="BundledTemplateInstallPath" PropertyName="BundledTemplates31InstallPath" />
<Output TaskParameter="BundledTemplateMajorMinorVersion" PropertyName="BundledTemplates31MajorMinorVersion" />
<Output TaskParameter="BundledTemplateMajorMinorPatchVersion" PropertyName="BundledTemplates31MajorMinorPatchVersion" />
</CalculateTemplateVersions>
<CalculateTemplateVersions AspNetCorePackageVersionTemplate="$(AspNetCorePackageVersionFor30Templates)">
<Output TaskParameter="BundledTemplateInstallPath" PropertyName="BundledTemplates30InstallPath" />
<Output TaskParameter="BundledTemplateMajorMinorVersion" PropertyName="BundledTemplates30MajorMinorVersion" />
<Output TaskParameter="BundledTemplateMajorMinorPatchVersion" PropertyName="BundledTemplates30MajorMinorPatchVersion" />
</CalculateTemplateVersions>
<CalculateTemplateVersions AspNetCorePackageVersionTemplate="$(AspNetCorePackageVersionFor21Templates)">
<Output TaskParameter="BundledTemplateInstallPath" PropertyName="BundledTemplates21InstallPath" />
<Output TaskParameter="BundledTemplateMajorMinorVersion" PropertyName="BundledTemplates21MajorMinorVersion" />
<Output TaskParameter="BundledTemplateMajorMinorPatchVersion" PropertyName="BundledTemplates21MajorMinorPatchVersion" />
</CalculateTemplateVersions>
<GenerateMsiVersionFromFullVersion VersionRevision="$(CombinedBuildNumberAndRevision)"
VersionMajorMinorPatch="$(BundledTemplates50MajorMinorPatchVersion)">
<Output TaskParameter="MsiVersion" PropertyName="BundledTemplates50MSIVersion" />
</GenerateMsiVersionFromFullVersion>
<GenerateMsiVersionFromFullVersion VersionRevision="$(CombinedBuildNumberAndRevision)"
VersionMajorMinorPatch="$(BundledTemplates31MajorMinorPatchVersion)">
<Output TaskParameter="MsiVersion" PropertyName="BundledTemplates31MSIVersion" />
</GenerateMsiVersionFromFullVersion>
<GenerateMsiVersionFromFullVersion VersionRevision="$(CombinedBuildNumberAndRevision)"
VersionMajorMinorPatch="$(BundledTemplates30MajorMinorPatchVersion)">
<Output TaskParameter="MsiVersion" PropertyName="BundledTemplates30MSIVersion" />
</GenerateMsiVersionFromFullVersion>
<GenerateMsiVersionFromFullVersion VersionRevision="$(CombinedBuildNumberAndRevision)"
VersionMajorMinorPatch="$(BundledTemplates21MajorMinorPatchVersion)">
<Output TaskParameter="MsiVersion" PropertyName="BundledTemplates21MSIVersion" />
</GenerateMsiVersionFromFullVersion>
</Target>
<ItemGroup>
@ -67,12 +35,12 @@
<Bundled60Templates Include="Microsoft.DotNet.Web.ItemTemplates" PackageVersion="$(AspNetCorePackageVersionFor60Templates)"
Condition="'$(AspNetCorePackageVersionFor60Templates)' != '$(AspNetCorePackageVersionFor50Templates)'" />
<Bundled60Templates Include="Microsoft.DotNet.Web.ProjectTemplates.6.0" PackageVersion="$(AspNetCorePackageVersionFor60Templates)"
UseVersionForTemplateInstallPath="true"
Condition="'$(AspNetCorePackageVersionFor60Templates)' != '$(AspNetCorePackageVersionFor50Templates)'"/>
<Bundled60Templates Include="Microsoft.DotNet.Web.Spa.ProjectTemplates.6.0" PackageVersion="$(AspNetCorePackageVersionFor60Templates)"
Condition="'$(AspNetCorePackageVersionFor60Templates)' != '$(AspNetCorePackageVersionFor50Templates)'" />
<Bundled60Templates Include="NUnit3.DotNetNew.Template" PackageVersion="$(NUnit3Templates60PackageVersion)"
Condition="'$(NUnit3Templates60PackageVersion)' != '$(NUnit3Templates50PackageVersion)'" />
</ItemGroup>
<ItemGroup>
@ -82,178 +50,119 @@
<Bundled50Templates Include="Microsoft.Dotnet.Wpf.ProjectTemplates" PackageVersion="$(MicrosoftDotnetWpfProjectTemplates50PackageVersion)" />
<Bundled50Templates Include="Microsoft.Dotnet.WinForms.ProjectTemplates" PackageVersion="$(MicrosoftDotnetWinFormsProjectTemplates50PackageVersion)" />
<Bundled50Templates Include="Microsoft.DotNet.Web.ItemTemplates" PackageVersion="$(AspNetCorePackageVersionFor50Templates)" />
<Bundled50Templates Include="Microsoft.DotNet.Web.ProjectTemplates.5.0" PackageVersion="$(AspNetCorePackageVersionFor50Templates)" />
<Bundled50Templates Include="Microsoft.DotNet.Web.ProjectTemplates.5.0" PackageVersion="$(AspNetCorePackageVersionFor50Templates)" UseVersionForTemplateInstallPath="true" />
<Bundled50Templates Include="Microsoft.DotNet.Web.Spa.ProjectTemplates.5.0" PackageVersion="$(AspNetCorePackageVersionFor50Templates)" />
<Bundled50Templates Include="NUnit3.DotNetNew.Template" PackageVersion="$(NUnit3Templates50PackageVersion)" />
</ItemGroup>
<ItemGroup>
<ItemGroup Condition="!$(Architecture.StartsWith('arm'))">
<Bundled31Templates Include="Microsoft.DotNet.Common.ItemTemplates" PackageVersion="$(MicrosoftDotNetCommonItemTemplates31PackageVersion)" />
<Bundled31Templates Include="Microsoft.DotNet.Common.ProjectTemplates.3.1" PackageVersion="$(MicrosoftDotNetCommonProjectTemplates31PackageVersion)" />
<Bundled31Templates Include="Microsoft.DotNet.Test.ProjectTemplates.3.1" PackageVersion="$(MicrosoftDotNetTestProjectTemplates31PackageVersion)" />
<Bundled31Templates Include="Microsoft.Dotnet.Wpf.ProjectTemplates" PackageVersion="$(MicrosoftDotnetWpfProjectTemplates31PackageVersion)" />
<Bundled31Templates Include="Microsoft.Dotnet.WinForms.ProjectTemplates" PackageVersion="$(MicrosoftDotnetWinFormsProjectTemplates31PackageVersion)" />
<Bundled31Templates Include="Microsoft.DotNet.Web.ItemTemplates" PackageVersion="$(AspNetCorePackageVersionFor31Templates)" />
<Bundled31Templates Include="Microsoft.DotNet.Web.ProjectTemplates.3.1" PackageVersion="$(AspNetCorePackageVersionFor31Templates)" />
<Bundled31Templates Include="Microsoft.DotNet.Web.ProjectTemplates.3.1" PackageVersion="$(AspNetCorePackageVersionFor31Templates)" UseVersionForTemplateInstallPath="true" />
<Bundled31Templates Include="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.1" PackageVersion="$(AspNetCorePackageVersionFor31Templates)" />
<Bundled31Templates Include="Microsoft.AspNetCore.Components.WebAssembly.Templates" PackageVersion="$(MicrosoftAspNetCoreComponentsWebAssemblyTemplatesPackageVersion)" />
<Bundled31Templates Include="NUnit3.DotNetNew.Template" PackageVersion="$(NUnit3Templates31PackageVersion)" />
</ItemGroup>
<ItemGroup>
<ItemGroup Condition="!$(Architecture.StartsWith('arm'))">
<Bundled30Templates Include="Microsoft.DotNet.Common.ItemTemplates" PackageVersion="$(MicrosoftDotNetCommonItemTemplates30PackageVersion)" />
<Bundled30Templates Include="Microsoft.DotNet.Common.ProjectTemplates.3.0" PackageVersion="$(MicrosoftDotNetCommonProjectTemplates30PackageVersion)" />
<Bundled30Templates Include="Microsoft.DotNet.Test.ProjectTemplates.3.0" PackageVersion="$(MicrosoftDotNetTestProjectTemplates30PackageVersion)" />
<Bundled30Templates Include="Microsoft.Dotnet.Wpf.ProjectTemplates" PackageVersion="$(MicrosoftDotnetWpfProjectTemplates30PackageVersion)" />
<Bundled30Templates Include="Microsoft.Dotnet.WinForms.ProjectTemplates" PackageVersion="$(MicrosoftDotnetWinFormsProjectTemplates30PackageVersion)" />
<Bundled30Templates Include="Microsoft.DotNet.Web.ItemTemplates" PackageVersion="$(AspNetCorePackageVersionFor30Templates)" />
<Bundled30Templates Include="Microsoft.DotNet.Web.ProjectTemplates.3.0" PackageVersion="$(AspNetCorePackageVersionFor30Templates)" />
<Bundled30Templates Include="Microsoft.DotNet.Web.ProjectTemplates.3.0" PackageVersion="$(AspNetCorePackageVersionFor30Templates)" UseVersionForTemplateInstallPath="true" />
<Bundled30Templates Include="Microsoft.DotNet.Web.Spa.ProjectTemplates.3.0" PackageVersion="$(AspNetCorePackageVersionFor30Templates)" />
<Bundled30Templates Include="NUnit3.DotNetNew.Template" PackageVersion="$(NUnit3Templates30PackageVersion)" />
</ItemGroup>
<ItemGroup>
<ItemGroup Condition="!$(Architecture.StartsWith('arm'))">
<Bundled21Templates Include="Microsoft.DotNet.Common.ItemTemplates" PackageVersion="$(MicrosoftDotNetCommonItemTemplates21PackageVersion)" />
<Bundled21Templates Include="Microsoft.DotNet.Common.ProjectTemplates.2.1" PackageVersion="$(MicrosoftDotNetCommonProjectTemplates21PackageVersion)" />
<Bundled21Templates Include="Microsoft.DotNet.Test.ProjectTemplates.2.1" PackageVersion="$(MicrosoftDotNetTestProjectTemplates21PackageVersion)" />
<Bundled21Templates Include="Microsoft.DotNet.Web.ItemTemplates" PackageVersion="$(AspNetCorePackageVersionFor21Templates)" />
<Bundled21Templates Include="Microsoft.DotNet.Web.ProjectTemplates.2.1" PackageVersion="$(AspNetCorePackageVersionFor21Templates)" />
<Bundled21Templates Include="Microsoft.DotNet.Web.ProjectTemplates.2.1" PackageVersion="$(AspNetCorePackageVersionFor21Templates)" UseVersionForTemplateInstallPath="true" />
<Bundled21Templates Include="Microsoft.DotNet.Web.Spa.ProjectTemplates.2.1" PackageVersion="$(AspNetCorePackageVersionFor21Templates)" />
<Bundled21Templates Include="NUnit3.DotNetNew.Template" PackageVersion="$(NUnit3Templates21PackageVersion)" />
</ItemGroup>
<ItemGroup>
<Bundled60Templates Update="@(Bundled60Templates)">
<NupkgPathRelativeToPackageRoot>%(Identity)/%(PackageVersion)/%(Identity).%(PackageVersion).nupkg</NupkgPathRelativeToPackageRoot>
<RestoredNupkgPath>$(NuGetPackageRoot)$([MSBuild]::ValueOrDefault('%(NupkgPathRelativeToPackageRoot)', '').ToLower())</RestoredNupkgPath>
<Version>[%(PackageVersion)]</Version>
</Bundled60Templates>
</ItemGroup>
<ItemGroup>
<Bundled50Templates Update="@(Bundled50Templates)">
<NupkgPathRelativeToPackageRoot>%(Identity)/%(PackageVersion)/%(Identity).%(PackageVersion).nupkg</NupkgPathRelativeToPackageRoot>
<RestoredNupkgPath>$(NuGetPackageRoot)$([MSBuild]::ValueOrDefault('%(NupkgPathRelativeToPackageRoot)', '').ToLower())</RestoredNupkgPath>
<Version>[%(PackageVersion)]</Version>
</Bundled50Templates>
</ItemGroup>
<ItemGroup>
<Bundled31Templates Update="@(Bundled31Templates)">
<NupkgPathRelativeToPackageRoot>%(Identity)/%(PackageVersion)/%(Identity).%(PackageVersion).nupkg</NupkgPathRelativeToPackageRoot>
<RestoredNupkgPath>$(NuGetPackageRoot)$([MSBuild]::ValueOrDefault('%(NupkgPathRelativeToPackageRoot)', '').ToLower())</RestoredNupkgPath>
<Version>[%(PackageVersion)]</Version>
</Bundled31Templates>
</ItemGroup>
<ItemGroup>
<Bundled30Templates Update="@(Bundled30Templates)">
<NupkgPathRelativeToPackageRoot>%(Identity)/%(PackageVersion)/%(Identity).%(PackageVersion).nupkg</NupkgPathRelativeToPackageRoot>
<RestoredNupkgPath>$(NuGetPackageRoot)$([MSBuild]::ValueOrDefault('%(NupkgPathRelativeToPackageRoot)', '').ToLower())</RestoredNupkgPath>
<Version>[%(PackageVersion)]</Version>
</Bundled30Templates>
</ItemGroup>
<ItemGroup>
<Bundled21Templates Update="@(Bundled21Templates)">
<NupkgPathRelativeToPackageRoot>%(Identity)/%(PackageVersion)/%(Identity).%(PackageVersion).nupkg</NupkgPathRelativeToPackageRoot>
<RestoredNupkgPath>$(NuGetPackageRoot)$([MSBuild]::ValueOrDefault('%(NupkgPathRelativeToPackageRoot)', '').ToLower())</RestoredNupkgPath>
<Version>[%(PackageVersion)]</Version>
</Bundled21Templates>
<BundledTemplates Include="@(Bundled60Templates)" TemplateFrameworkVersion="6.0"/>
<BundledTemplates Include="@(Bundled50Templates)" TemplateFrameworkVersion="5.0"/>
<BundledTemplates Include="@(Bundled31Templates)" TemplateFrameworkVersion="3.1"/>
<BundledTemplates Include="@(Bundled30Templates)" TemplateFrameworkVersion="3.0"/>
<BundledTemplates Include="@(Bundled21Templates)" TemplateFrameworkVersion="2.1"/>
</ItemGroup>
<ItemGroup>
<!-- PackageDownload items must not have duplicate itemspecs, handle packages with multiple versions specially below -->
<PackageDownload Include="@(Bundled21Templates)" Exclude="@(PackageDownload)" />
<PackageDownload Include="@(Bundled30Templates)" Exclude="@(PackageDownload)" />
<PackageDownload Include="@(Bundled31Templates)" Exclude="@(PackageDownload)" />
<PackageDownload Include="@(Bundled50Templates)" Exclude="@(PackageDownload)" />
<PackageDownload Include="@(Bundled60Templates)" Exclude="@(PackageDownload)" />
<PackageDownload Update="Microsoft.DotNet.Common.ItemTemplates"
Version="[$(MicrosoftDotNetCommonItemTemplates21PackageVersion)];
[$(MicrosoftDotNetCommonItemTemplates30PackageVersion)];
[$(MicrosoftDotNetCommonItemTemplates31PackageVersion)];
[$(MicrosoftDotNetCommonItemTemplates50PackageVersion)];
[$(MicrosoftDotNetCommonItemTemplates60PackageVersion)];
" />
<PackageDownload Update="Microsoft.DotNet.Web.Spa.ProjectTemplates"
Version="[$(AspNetCorePackageVersionFor21Templates)];
" />
<PackageDownload Update="Microsoft.DotNet.Web.ItemTemplates"
Version="[$(AspNetCorePackageVersionFor21Templates)];
[$(AspNetCorePackageVersionFor30Templates)];
[$(AspNetCorePackageVersionFor31Templates)];
[$(AspNetCorePackageVersionFor50Templates)];
[$(AspNetCorePackageVersionFor60Templates)];
" />
<PackageDownload Update="NUnit3.DotNetNew.Template"
Version="[$(NUnit3Templates21PackageVersion)];
[$(NUnit3Templates30PackageVersion)];
[$(NUnit3Templates31PackageVersion)];
[$(NUnit3Templates50PackageVersion)];
" />
<PackageDownload Update="Microsoft.Dotnet.Wpf.ProjectTemplates"
Version="[$(MicrosoftDotnetWpfProjectTemplates30PackageVersion)];
[$(MicrosoftDotnetWpfProjectTemplates31PackageVersion)];
[$(MicrosoftDotnetWpfProjectTemplates50PackageVersion)];
" />
<PackageDownload Update="Microsoft.Dotnet.Winforms.ProjectTemplates"
Version="[$(MicrosoftDotnetWinFormsProjectTemplates30PackageVersion)];
[$(MicrosoftDotnetWinFormsProjectTemplates31PackageVersion)];
[$(MicrosoftDotnetWinFormsProjectTemplates50PackageVersion)];
" />
<BundledTemplates Update="@(BundledTemplates)">
<NupkgPathRelativeToPackageRoot>%(Identity)/%(PackageVersion)/%(Identity).%(PackageVersion).nupkg</NupkgPathRelativeToPackageRoot>
<RestoredNupkgPath>$(NuGetPackageRoot)$([MSBuild]::ValueOrDefault('%(NupkgPathRelativeToPackageRoot)', '').ToLower())</RestoredNupkgPath>
</BundledTemplates>
</ItemGroup>
<Target Name="DownloadBundledTemplateNupkgs">
<CollatePackageDownloads Packages="@(BundledTemplates)">
<Output TaskParameter="PackageDownloads" ItemName="BundledTemplatePackageDownload" />
</CollatePackageDownloads>
<!-- Create a separate project to for template PackageDownloads, as we want to use a task in core-sdk-tasks to collate them, but we
can't use those tasks before normal NuGet restore -->
<PropertyGroup>
<TemplatePackageDownloadProjectContent>
<![CDATA[
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(TargetFramework)</TargetFramework>
</PropertyGroup>
<ItemGroup>
@(BundledTemplatePackageDownload->'<BundledTemplatePackageDownload Include="%(Identity)" Version="%(Version)" />', '
')
</ItemGroup>
</Project>
]]>
</TemplatePackageDownloadProjectContent>
<TemplatePackageDownloadProjectDirectory>$(IntermediateOutputPath)TemplatePackageDownloader\</TemplatePackageDownloadProjectDirectory>
<TemplatePackageDownloadProjectPath>$(TemplatePackageDownloadProjectDirectory)TemplatePackageDownloader.csproj</TemplatePackageDownloadProjectPath>
</PropertyGroup>
<MakeDir Directories="$(TemplatePackageDownloadProjectDirectory)"/>
<WriteLinesToFile Lines="$(TemplatePackageDownloadProjectContent)"
File="$(TemplatePackageDownloadProjectPath)"
Overwrite="True" WriteOnlyWhenDifferent="True" />
<MSBuild Projects="$(TemplatePackageDownloadProjectPath)"
Targets="Restore"/>
</Target>
<Target Name="LayoutTemplates"
DependsOnTargets="LayoutTemplatesForSDK;LayoutTemplatesFor60MSI;LayoutTemplatesFor50MSI;LayoutTemplatesFor31MSI;LayoutTemplatesFor30MSI;LayoutTemplatesFor21MSI" />
DependsOnTargets="LayoutTemplatesForSDK;LayoutTemplatesForMSI" />
<Target Name="LayoutTemplatesForSDK"
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions">
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions;DownloadBundledTemplateNupkgs">
<ItemGroup Condition="!$(ProductMonikerRid.StartsWith('win'))">
<Bundled60Templates Remove="Microsoft.Dotnet.Wpf.ProjectTemplates" />
<Bundled60Templates Remove="Microsoft.Dotnet.WinForms.ProjectTemplates" />
<Bundled50Templates Remove="Microsoft.Dotnet.Wpf.ProjectTemplates" />
<Bundled50Templates Remove="Microsoft.Dotnet.WinForms.ProjectTemplates" />
<BundledTemplatesWithInstallPaths Remove="Microsoft.Dotnet.Wpf.ProjectTemplates" />
<BundledTemplatesWithInstallPaths Remove="Microsoft.Dotnet.WinForms.ProjectTemplates" />
</ItemGroup>
<Copy SourceFiles="%(Bundled60Templates.RestoredNupkgPath)"
DestinationFolder="$(RedistLayoutPath)templates/$(BundledTemplates60InstallPath)"/>
<Copy SourceFiles="%(BundledTemplatesWithInstallPaths.RestoredNupkgPath)"
DestinationFolder="$(RedistLayoutPath)templates/%(BundledTemplatesWithInstallPaths.BundledTemplateInstallPath)"
Condition="'%(BundledTemplatesWithInstallPaths.TemplateFrameworkVersion)' == '6.0'"/>
<!-- Since not all the templates have 6.0 versions yet, include the 5.0 versions in the layout for now -->
<Copy SourceFiles="%(Bundled50Templates.RestoredNupkgPath)"
DestinationFolder="$(RedistLayoutPath)templates/$(BundledTemplates60InstallPath)"/>
<Copy SourceFiles="%(BundledTemplatesWithInstallPaths.RestoredNupkgPath)"
DestinationFolder="$(RedistLayoutPath)templates/%(BundledTemplatesWithInstallPaths.BundledTemplateInstallPath)"
Condition="'%(BundledTemplatesWithInstallPaths.TemplateFrameworkVersion)' == '5.0'"/>
</Target>
<Target Name="LayoutTemplatesFor60MSI"
<Target Name="LayoutTemplatesForMSI"
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions"
Condition="$(ProductMonikerRid.StartsWith('win')) And '$(Architecture)' != 'arm'">
<Copy SourceFiles="%(Bundled60Templates.RestoredNupkgPath)"
DestinationFolder="$(Templates60LayoutPath)templates/$(BundledTemplates60InstallPath)"/>
</Target>
<Target Name="LayoutTemplatesFor50MSI"
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions"
Condition="$(ProductMonikerRid.StartsWith('win')) And '$(Architecture)' != 'arm'">
<Copy SourceFiles="%(Bundled50Templates.RestoredNupkgPath)"
DestinationFolder="$(Templates50LayoutPath)templates/$(BundledTemplates50InstallPath)"/>
</Target>
<Target Name="LayoutTemplatesFor31MSI"
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions"
Condition="$(ProductMonikerRid.StartsWith('win')) And !$(Architecture.StartsWith('arm'))">
<Copy SourceFiles="%(Bundled31Templates.RestoredNupkgPath)"
DestinationFolder="$(Templates31LayoutPath)templates/$(BundledTemplates31InstallPath)"/>
<Copy SourceFiles="%(BundledTemplatesWithInstallPaths.RestoredNupkgPath)"
DestinationFolder="$(BaseOutputPath)$(Configuration)\templates-%(BundledTemplatesWithInstallPaths.TemplateFrameworkVersion)\templates/%(BundledTemplatesWithInstallPaths.BundledTemplateInstallPath)"/>
</Target>
<Target Name="LayoutTemplatesFor30MSI"
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions"
Condition="$(ProductMonikerRid.StartsWith('win')) And !$(Architecture.StartsWith('arm'))">
<Copy SourceFiles="%(Bundled30Templates.RestoredNupkgPath)"
DestinationFolder="$(Templates30LayoutPath)templates/$(BundledTemplates30InstallPath)"/>
</Target>
<Target Name="LayoutTemplatesFor21MSI"
DependsOnTargets="SetupBundledComponents;CalculateTemplatesVersions"
Condition="$(ProductMonikerRid.StartsWith('win')) And !$(Architecture.StartsWith('arm'))">
<Copy SourceFiles="%(Bundled21Templates.RestoredNupkgPath)"
DestinationFolder="$(Templates21LayoutPath)templates/$(BundledTemplates21InstallPath)"/>
</Target>
</Project>

View file

@ -2,10 +2,6 @@
<PropertyGroup>
<RedistLayoutPath>$(BaseOutputPath)$(Configuration)\dotnet\</RedistLayoutPath>
<SdkInternalLayoutPath>$(BaseOutputPath)$(Configuration)\dotnet-internal\</SdkInternalLayoutPath>
<Templates50LayoutPath>$(BaseOutputPath)$(Configuration)\templates-5.0\</Templates50LayoutPath>
<Templates31LayoutPath>$(BaseOutputPath)$(Configuration)\templates-3.1\</Templates31LayoutPath>
<Templates30LayoutPath>$(BaseOutputPath)$(Configuration)\templates-3.0\</Templates30LayoutPath>
<Templates21LayoutPath>$(BaseOutputPath)$(Configuration)\templates-2.1\</Templates21LayoutPath>
<DownloadsFolder>$(IntermediateOutputPath)downloads\</DownloadsFolder>
</PropertyGroup>

View file

@ -59,10 +59,6 @@
<PropertyGroup>
<SdkMSIInstallerFile>$(ArtifactsNonShippingPackagesDir)$(ArtifactNameWithVersionSdk)$(InstallerExtension)</SdkMSIInstallerFile>
<SdkDependencyKeyName>Dotnet_CLI</SdkDependencyKeyName>
<Templates50MSIInstallerFile>$(ArtifactsNonShippingPackagesDir)dotnet-50templates-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)</Templates50MSIInstallerFile>
<Templates31MSIInstallerFile>$(ArtifactsNonShippingPackagesDir)dotnet-31templates-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)</Templates31MSIInstallerFile>
<Templates30MSIInstallerFile>$(ArtifactsNonShippingPackagesDir)dotnet-30templates-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)</Templates30MSIInstallerFile>
<Templates21MSIInstallerFile>$(ArtifactsNonShippingPackagesDir)dotnet-21templates-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)</Templates21MSIInstallerFile>
<SdkPlaceholderMSIInstallerFile>$(ArtifactsNonShippingPackagesDir)dotnet-sdkplaceholder-$(FullNugetVersion)-$(ProductMonikerRid)$(InstallerExtension)</SdkPlaceholderMSIInstallerFile>
<SdkPlaceholderDependencyKeyName>NetCore_SdkPlaceholder</SdkPlaceholderDependencyKeyName>
<CombinedFrameworkSdkHostMSIInstallerFile>$(ArtifactsShippingPackagesDir)$(ArtifactNameWithVersionCombinedHostHostFxrFrameworkSdk)$(BundleExtension)</CombinedFrameworkSdkHostMSIInstallerFile>
@ -100,10 +96,11 @@
</Target>
<Target Name="MsiTargetsSetupInputOutputs"
DependsOnTargets="GenerateLayout;SetupWixProperties">
DependsOnTargets="GenerateLayout;SetupWixProperties;SetupTemplatesMsis">
<!-- Consumed By Publish -->
<ItemGroup>
<GeneratedInstallers Include="$(SdkMSIInstallerFile);$(Templates50MSIInstallerFile);$(Templates31MSIInstallerFile);$(Templates30MSIInstallerFile);$(Templates21MSIInstallerFile);$(CombinedFrameworkSdkHostMSIInstallerFile);$(SdkPlaceholderMSIInstallerFile)" />
<GeneratedInstallers Include="$(SdkMSIInstallerFile);$(CombinedFrameworkSdkHostMSIInstallerFile);$(SdkPlaceholderMSIInstallerFile)" />
<GeneratedInstallers Include="@(TemplatesMsiComponent->'%(MSIInstallerFile)')" />
</ItemGroup>
<GenerateMsiVersion VersionRevision="$(CombinedBuildNumberAndRevision)"
@ -118,26 +115,6 @@
PropertyName="SdkInstallerUpgradeCode" />
</GenerateGuidFromName>
<GenerateGuidFromName Name="$(Templates50MSIInstallerFile)">
<Output TaskParameter="OutputGuid"
PropertyName="Templates50InstallerUpgradeCode" />
</GenerateGuidFromName>
<GenerateGuidFromName Name="$(Templates31MSIInstallerFile)">
<Output TaskParameter="OutputGuid"
PropertyName="Templates31InstallerUpgradeCode" />
</GenerateGuidFromName>
<GenerateGuidFromName Name="$(Templates30MSIInstallerFile)">
<Output TaskParameter="OutputGuid"
PropertyName="Templates30InstallerUpgradeCode" />
</GenerateGuidFromName>
<GenerateGuidFromName Name="$(Templates21MSIInstallerFile)">
<Output TaskParameter="OutputGuid"
PropertyName="Templates21InstallerUpgradeCode" />
</GenerateGuidFromName>
<GenerateGuidFromName Name="$(SdkPlaceholderMSIInstallerFile)">
<Output TaskParameter="OutputGuid"
PropertyName="SdkPlaceholderInstallerUpgradeCode" />
@ -287,40 +264,12 @@
</PropertyGroup>
<ItemGroup>
<TemplatesMsiComponent Include="NetCore50TemplatesMsi">
<LayoutPath>$(Templates50LayoutPath.TrimEnd('\'))</LayoutPath>
<MSIInstallerFile>$(Templates50MSIInstallerFile)</MSIInstallerFile>
<BrandName>$(BundledTemplates50BrandName)</BrandName>
<MsiVersion>$(BundledTemplates50MsiVersion)</MsiVersion>
<UpgradeCode>$(Templates50InstallerUpgradeCode)</UpgradeCode>
<DependencyKeyName>NetCore_Templates_5.0</DependencyKeyName>
</TemplatesMsiComponent>
</ItemGroup>
<ItemGroup Condition="!$(Architecture.StartsWith('arm'))">
<TemplatesMsiComponent Include="NetCore31TemplatesMsi">
<LayoutPath>$(Templates31LayoutPath.TrimEnd('\'))</LayoutPath>
<MSIInstallerFile>$(Templates31MSIInstallerFile)</MSIInstallerFile>
<BrandName>$(BundledTemplates31BrandName)</BrandName>
<MsiVersion>$(BundledTemplates31MsiVersion)</MsiVersion>
<UpgradeCode>$(Templates31InstallerUpgradeCode)</UpgradeCode>
<DependencyKeyName>NetCore_Templates_3.1</DependencyKeyName>
</TemplatesMsiComponent>
<TemplatesMsiComponent Include="NetCore30TemplatesMsi">
<LayoutPath>$(Templates30LayoutPath.TrimEnd('\'))</LayoutPath>
<MSIInstallerFile>$(Templates30MSIInstallerFile)</MSIInstallerFile>
<BrandName>$(BundledTemplates30BrandName)</BrandName>
<MsiVersion>$(BundledTemplates30MsiVersion)</MsiVersion>
<UpgradeCode>$(Templates30InstallerUpgradeCode)</UpgradeCode>
<DependencyKeyName>NetCore_Templates_3.0</DependencyKeyName>
</TemplatesMsiComponent>
<TemplatesMsiComponent Include="NetCore21TemplatesMsi">
<LayoutPath>$(Templates21LayoutPath.TrimEnd('\'))</LayoutPath>
<MSIInstallerFile>$(Templates21MSIInstallerFile)</MSIInstallerFile>
<BrandName>$(BundledTemplates21BrandName)</BrandName>
<MsiVersion>$(BundledTemplates21MsiVersion)</MsiVersion>
<UpgradeCode>$(Templates21InstallerUpgradeCode)</UpgradeCode>
<DependencyKeyName>NetCore_Templates_2.1</DependencyKeyName>
<TemplatesMsiComponent Include="@(TemplatesComponents)">
<LayoutPath>$(BaseOutputPath)$(Configuration)\templates-%(TemplatesComponents.TemplatesMajorMinorVersion)</LayoutPath>
<BrandName>%(TemplatesComponents.BrandNameWithoutVersion) $(Version)</BrandName>
<MsiVersion>%(TemplatesComponents.MSIVersion)</MsiVersion>
<UpgradeCode>%(TemplatesComponents.InstallerUpgradeCode)</UpgradeCode>
<DependencyKeyName>NetCore_Templates_%(TemplatesComponents.TemplatesMajorMinorVersion)</DependencyKeyName>
</TemplatesMsiComponent>
</ItemGroup>
</Target>
@ -335,6 +284,15 @@
$(SdkGenerateBundlePowershellScript)"
Outputs="$(CombinedFrameworkSdkHostMSIInstallerFile)">
<!-- Choose "latest" template MSI to go in bundle. -->
<ItemGroup>
<LatestTemplateInstallerComponent Include="@(TemplatesMsiComponent)"
Condition="'%(TemplatesMajorMinorVersion)' == '$(MajorMinorVersion)'"/>
</ItemGroup>
<PropertyGroup>
<LatestTemplateMsiInstallerFile>@(LatestTemplateInstallerComponent->'%(MSIInstallerFile)')</LatestTemplateMsiInstallerFile>
</PropertyGroup>
<Exec Command="powershell -NoProfile -NoLogo $(SdkGenerateBundlePowershellScript) ^
'$(SdkMSIInstallerFile)' ^
'$(DownloadsFolder)$(DownloadedAspNetCoreSharedFxWixLibFileName)' ^
@ -350,7 +308,7 @@
'$(DownloadsFolder)$(DownloadedArm64NetCoreAppHostPackInstallerFileName)' ^
'$(DownloadsFolder)$(DownloadedAspNetTargetingPackInstallerFileName)' ^
'$(DownloadsFolder)$(DownloadedWindowsDesktopTargetingPackInstallerFileName)' ^
'$(Templates50MSIInstallerFile)' ^
'$(LatestTemplateMsiInstallerFile)' ^
'$(CombinedFrameworkSdkHostMSIInstallerFile)' ^
'$(WixRoot)' ^
'$(SdkBrandName)' ^
@ -442,27 +400,12 @@
</PropertyGroup>
<ItemGroup>
<TemplatesNupkgComponent Include="NetCore50TemplatesNupkg">
<MSIInstallerFile>$(Templates50MSIInstallerFile)</MSIInstallerFile>
<NupkgFile>$(ArtifactsNonShippingPackagesDir)VS.Redist.Common.NetCore.Templates.$(BundledTemplates50MajorMinorVersion).$(FullNugetVersion).nupkg</NupkgFile>
<MajorMinorVersion>$(BundledTemplates50MajorMinorVersion)</MajorMinorVersion>
</TemplatesNupkgComponent>
<TemplatesNupkgComponent Include="NetCore31TemplatesNupkg">
<MSIInstallerFile>$(Templates31MSIInstallerFile)</MSIInstallerFile>
<NupkgFile>$(ArtifactsNonShippingPackagesDir)VS.Redist.Common.NetCore.Templates.$(BundledTemplates31MajorMinorVersion).$(FullNugetVersion).nupkg</NupkgFile>
<MajorMinorVersion>$(BundledTemplates31MajorMinorVersion)</MajorMinorVersion>
</TemplatesNupkgComponent>
<TemplatesNupkgComponent Include="NetCore30TemplatesNupkg">
<MSIInstallerFile>$(Templates30MSIInstallerFile)</MSIInstallerFile>
<NupkgFile>$(ArtifactsNonShippingPackagesDir)VS.Redist.Common.NetCore.Templates.$(BundledTemplates30MajorMinorVersion).$(FullNugetVersion).nupkg</NupkgFile>
<MajorMinorVersion>$(BundledTemplates30MajorMinorVersion)</MajorMinorVersion>
</TemplatesNupkgComponent>
<TemplatesNupkgComponent Include="NetCore21TemplatesNupkg">
<MSIInstallerFile>$(Templates21MSIInstallerFile)</MSIInstallerFile>
<NupkgFile>$(ArtifactsNonShippingPackagesDir)VS.Redist.Common.NetCore.Templates.$(BundledTemplates21MajorMinorVersion).$(FullNugetVersion).nupkg</NupkgFile>
<MajorMinorVersion>$(BundledTemplates21MajorMinorVersion)</MajorMinorVersion>
<TemplatesNupkgComponent Include="@(TemplatesComponents->'%(Identity)Nupkg')">
<NupkgFile>$(ArtifactsNonShippingPackagesDir)VS.Redist.Common.NetCore.Templates.%(TemplatesMajorMinorVersion).$(FullNugetVersion).nupkg</NupkgFile>
<MajorMinorVersion>%(TemplatesMajorMinorVersion)</MajorMinorVersion>
</TemplatesNupkgComponent>
</ItemGroup>
</Target>
<Target Name="GenerateVSToolsNupkg"

View file

@ -180,16 +180,10 @@
<Target Name="SignTemplatesMsis"
Condition="'$(SignCoreSdk)' == 'true'"
DependsOnTargets="SetSignProps">
DependsOnTargets="SetSignProps;SetupTemplatesMsis">
<ItemGroup>
<TemplatesMsiFilesToSign Include="$(Templates50MSIInstallerFile)" />
</ItemGroup>
<ItemGroup Condition="!$(Architecture.StartsWith('arm'))">
<TemplatesMsiFilesToSign Include="$(Templates31MSIInstallerFile)" />
<TemplatesMsiFilesToSign Include="$(Templates30MSIInstallerFile)" />
<TemplatesMsiFilesToSign Include="$(Templates21MSIInstallerFile)" />
<TemplatesMsiFilesToSign Include="@(TemplatesMsiComponent->'%(MSIInstallerFile)')" />
</ItemGroup>
<ItemGroup>