From c1ed3f3cf8c7d56b12c4da3a0406bea9bb6cadfa Mon Sep 17 00:00:00 2001
From: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Date: Mon, 9 Nov 2020 11:27:43 -0800
Subject: [PATCH] [master] Target 6.0.0 shared framework in global tools in
 servicing (#27600)

- #19108
- ensure the packaged runtimeconfig.json file uses the 6.0.0 shared framework
  - disable `$(TargetLatestDotNetRuntime)` in tool projects
  - skip `@(FrameworkReference)` item update if `$(TargetLatestDotNetRuntime)` is disabled
- essentially a no-op until after the 6.0.0 release

nit: Move `$(PackAsTool)` settings together
---
 Directory.Build.targets           |  7 +------
 eng/Workarounds.targets           |  5 ++---
 src/Tools/Directory.Build.targets | 18 ++++++++++++++----
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/Directory.Build.targets b/Directory.Build.targets
index 98d5d0185ce..519185d7180 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -57,11 +57,6 @@
     <SuppressDependenciesWhenPacking Condition="'$(SuppressDependenciesWhenPacking)' == '' AND '$(IsAnalyzersProject)' == 'true'">true</SuppressDependenciesWhenPacking>
   </PropertyGroup>
 
-  <PropertyGroup Condition="'$(PackAsTool)' == 'true' AND '$(IsShippingPackage)' == 'true'">
-    <!-- This is a requirement for Microsoft tool packages only. -->
-    <PackAsToolShimRuntimeIdentifiers>win-x64;win-x86</PackAsToolShimRuntimeIdentifiers>
-  </PropertyGroup>
-
   <PropertyGroup Condition=" '$(MSBuildProjectExtension)' == '.csproj' ">
     <PackageId Condition=" '$(PackageId)' == '' ">$(AssemblyName)</PackageId>
     <IsPackable
@@ -111,7 +106,7 @@
     <IsImplementationProject Condition=" '$(IsImplementationProject)' == '' AND '$(IsAnalyzersProject)' != 'true' AND '$(IsTestAssetProject)' != 'true' AND '$(IsTestProject)' != 'true' AND '$(IsBenchmarkProject)' != 'true' AND '$(IsSampleProject)' != 'true' ">true</IsImplementationProject>
 
     <!-- This determines whether a project is available as a <Reference> to other projects in this repo. -->
-    <IsProjectReferenceProvider Condition=" '$(IsProjectReferenceProvider)' == '' AND '$(IsImplementationProject)' == 'true' AND '$(PackAsTool)' != 'true' ">true</IsProjectReferenceProvider>
+    <IsProjectReferenceProvider Condition=" '$(IsProjectReferenceProvider)' == '' AND '$(IsImplementationProject)' == 'true' ">true</IsProjectReferenceProvider>
 
     <HasReferenceAssembly
         Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' AND '$(IsAspNetCoreApp)' == 'true' ">true</HasReferenceAssembly>
diff --git a/eng/Workarounds.targets b/eng/Workarounds.targets
index 8b31bd01c0a..b7353f92da3 100644
--- a/eng/Workarounds.targets
+++ b/eng/Workarounds.targets
@@ -9,10 +9,9 @@
     <!-- Reference base shared framework at incoming dependency flow version, not bundled sdk version. -->
     <FrameworkReference
       Update="Microsoft.NETCore.App"
-      Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'"
+      Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' AND '$(TargetLatestDotNetRuntime)' != 'false' "
       RuntimeFrameworkVersion="$(MicrosoftNETCoreAppRuntimeVersion)"
-      TargetingPackVersion="$(MicrosoftNETCoreAppRefPackageVersion)"
-      />
+      TargetingPackVersion="$(MicrosoftNETCoreAppRefPackageVersion)" />
   </ItemGroup>
 
   <!--
diff --git a/src/Tools/Directory.Build.targets b/src/Tools/Directory.Build.targets
index 7928d3f6cff..854f90ab5c2 100644
--- a/src/Tools/Directory.Build.targets
+++ b/src/Tools/Directory.Build.targets
@@ -1,10 +1,20 @@
 <Project>
-  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.targets))\Directory.Build.targets" />
-
-  <PropertyGroup>
-    <UseLatestPackageReferences Condition=" '$(PackAsTool)' == 'true' ">true</UseLatestPackageReferences>
+  <PropertyGroup Condition=" '$(PackAsTool)' == 'true' ">
+    <!-- Microsoft tool packages are required to target both x64 and x86. -->
+    <PackAsToolShimRuntimeIdentifiers Condition=" '$(IsShippingPackage)' == 'true' ">win-x64;win-x86</PackAsToolShimRuntimeIdentifiers>
+    <!-- None of the tool projects are project reference providers. -->
+    <IsProjectReferenceProvider>false</IsProjectReferenceProvider>
+    <!--
+      Target the default version of .NET Core in tool projects to maximize the compatible environments. Must be set
+      before importing root Directory.Build.targets.
+    -->
+    <TargetLatestDotNetRuntime Condition=" '$(IsServicingBuild)' == 'true' ">false</TargetLatestDotNetRuntime>
+    <!-- Tool projects publish before packing. Packages should contain the latest bits. -->
+    <UseLatestPackageReferences>true</UseLatestPackageReferences>
   </PropertyGroup>
 
+  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.targets))\Directory.Build.targets" />
+
   <Target Name="CleanPublishDir" AfterTargets="CoreClean">
     <RemoveDir Directories="$(PublishDir)" />
   </Target>
-- 
GitLab