Make BaseIntermediateOutputPath project specific
authorViktor Hofer <viktor.hofer@outlook.com>
Wed, 25 Jul 2018 16:14:04 +0000 (18:14 +0200)
committerViktor Hofer <viktor.hofer@outlook.com>
Wed, 22 Aug 2018 12:05:29 +0000 (14:05 +0200)
Set BaseIntermediateOutputPath and IntermediateOutputPath accordingly in
proj/depprojs and add TargetFramework* props for various configurations.

Commit migrated from https://github.com/dotnet/corefx/commit/3d223d3c55e07c110b5ebb0bc7ecb225e168da15

18 files changed:
src/libraries/BuildToolsVersion.txt
src/libraries/Common/perf/PerfRunner/PerfRunner.csproj
src/libraries/Directory.Build.props
src/libraries/Directory.Build.targets
src/libraries/System.Runtime.Extensions/tests/AssemblyResolveTests/AssemblyResolveTests.csproj
src/libraries/System.Runtime.Extensions/tests/System/AppDomainTests.cs
src/libraries/System.Runtime.Extensions/tests/TestApp/TestApp.csproj
src/libraries/System.Runtime.Extensions/tests/TestAppOutsideOfTPA/TestAppOutsideOfTPA.csproj
src/libraries/System.Runtime.Extensions/tests/VoidMainWithExitCodeApp/VoidMainWithExitCodeApp.csproj
src/libraries/System.Threading.Thread/tests/MTAMain/MTAMain.csproj
src/libraries/System.Threading.Thread/tests/STAMain/STAMain.csproj
src/libraries/external/Directory.Build.props
src/libraries/external/dir.proj
src/libraries/init-tools.msbuild
src/libraries/shims/ApiCompat.proj
src/libraries/shims/Directory.Build.props
src/libraries/shims/shims.proj
tools-local/targetgroups.props

index 5d33180..4cf02ef 100644 (file)
@@ -1 +1 @@
-2.2.0-preview1-03116-01
+2.2.0-preview1-03116-01
\ No newline at end of file
index 0d6a6a7..cbf0215 100644 (file)
@@ -2,6 +2,8 @@
   <PropertyGroup>
     <ProjectGuid>{F5E941C8-AF2F-47AB-A066-FF25470CE382}</ProjectGuid>
     <OutputType>Exe</OutputType>
+    <!-- To be consistent between netfx and others we override the SDK behavior which defaults to .dll -->
+    <TargetExt>.exe</TargetExt>
     <RootNamespace>PerfRunner</RootNamespace>
     <AssemblyName>PerfRunner</AssemblyName>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
index aaf979d..4ecb277 100644 (file)
@@ -6,10 +6,14 @@
     <DisableImplicitFrameworkDefines>true</DisableImplicitFrameworkDefines>
     <DisableImplicitConfigurationDefines>true</DisableImplicitConfigurationDefines>
     
+    <!-- Disable code paths that require project.assets.json files to be present or to be computed. -->
+    <GenerateDependencyFile>false</GenerateDependencyFile>
+    <ComputeNETCoreBuildOutputFiles>false</ComputeNETCoreBuildOutputFiles>
+
     <!--
-    The Microsoft.NET.Sdk defaults the AssemblySearchPaths earlier than buildtools, so default
-    the correct search paths here. We are rather restrictive by design - only ref assemblies should
-    be resolved by default.
+      The Microsoft.NET.Sdk defaults the AssemblySearchPaths earlier than buildtools, so default
+      the correct search paths here. We are rather restrictive by design - only ref assemblies should
+      be resolved by default.
     -->
     <AssemblySearchPaths>$(AssemblySearchPaths);$(RefPath);{RawFileName}</AssemblySearchPaths>
   </PropertyGroup>
index cb0ba0d..1596afd 100644 (file)
@@ -12,9 +12,6 @@
 
   <Import Project="..\Directory.Build.targets" />
   
-  <Target Name="_CheckForInvalidConfigurationAndPlatform" />
-  <Target Name="_CheckForUnsupportedTargetFramework" />
-  <Target Name="RunResolvePackageDependencies" />
   <Target Name="AddSkipGetTargetFrameworkToProjectReferences" Condition="'@(ProjectReference)' != ''">
     <ItemGroup>
       <ProjectReference>
   <Target Name="DumpTargets" BeforeTargets="ResolveProjectReferences">
     <Message Text="DumpTargets> $(OutputPath), C=[$(Configuration)], CG=[$(ConfigurationGroup)], OG=[$(OSGroup)], TG=[$(TargetGroup)]" Importance="Low" />
   </Target>
-
-  <PropertyGroup>
-    <!-- Workaround https://github.com/dotnet/project-system/issues/3670 by setting TargetFramework expicitly -->
-    <!-- This property is set late in the project evaluation so other properties don't try to use it. -->
-    <TargetFramework>$(TargetGroup)</TargetFramework>
-  </PropertyGroup>
 </Project> 
index 528a3e2..2869f0d 100644 (file)
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <ProjectGuid>{E60AFAE8-2EA7-471C-9E24-52A99453B26B}</ProjectGuid>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
index 60a5d4f..1676df4 100644 (file)
@@ -271,7 +271,7 @@ namespace System.Tests
         {
             CopyTestAssemblies();
 
-            string name = Path.Combine(Environment.CurrentDirectory, "TestAppOutsideOfTPA", "TestAppOutsideOfTPA.exe");
+            string name = Path.Combine(Environment.CurrentDirectory, "TestAppOutsideOfTPA.exe");
             AssertExtensions.Throws<ArgumentNullException>("assemblyFile", () => AppDomain.CurrentDomain.ExecuteAssembly(null));
             Assert.Throws<FileNotFoundException>(() => AppDomain.CurrentDomain.ExecuteAssembly("NonExistentFile.exe"));
 
@@ -589,7 +589,7 @@ namespace System.Tests
             RemoteInvoke(() => {
                 ResolveEventHandler handler = (sender, e) =>
                 {
-                    return Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, "AssemblyResolveTests", "AssemblyResolveTests.dll"));
+                    return Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, "AssemblyResolveTests.exe"));
                 };
 
                 AppDomain.CurrentDomain.AssemblyResolve += handler;
@@ -607,12 +607,12 @@ namespace System.Tests
             CopyTestAssemblies();
 
             RemoteInvoke(() => {
-                Assembly a = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, "TestAppOutsideOfTPA", "TestAppOutsideOfTPA.exe"));
+                Assembly a = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, "TestAppOutsideOfTPA.exe"));
 
                 ResolveEventHandler handler = (sender, e) =>
                 {
                     Assert.Equal(e.RequestingAssembly, a);
-                    return Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, "AssemblyResolveTests", "AssemblyResolveTests.dll"));
+                    return Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, "AssemblyResolveTests.exe"));
                 };
 
                 AppDomain.CurrentDomain.AssemblyResolve += handler;
index 5cb1951..0dd6f88 100644 (file)
@@ -1,7 +1,9 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <ProjectGuid>{24BCEC6B-B9D2-47BC-9D66-725BD6B526FA}</ProjectGuid>
     <OutputType>Exe</OutputType>
+    <!-- To be consistent between netfx and others we override the SDK behavior which defaults to .dll -->
+    <TargetExt>.exe</TargetExt>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Configurations>netstandard-Debug;netstandard-Release</Configurations>
   </PropertyGroup>
index a729a2a..29f7c12 100644 (file)
@@ -1,7 +1,9 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <ProjectGuid>{C44B33E3-F89F-40B9-B353-D380C1524988}</ProjectGuid>
     <OutputType>Exe</OutputType>
+    <!-- To be consistent between netfx and others we override the SDK behavior which defaults to .dll -->
+    <TargetExt>.exe</TargetExt>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Configurations>netstandard-Debug;netstandard-Release</Configurations>
   </PropertyGroup>
index 5682a4f..17f3eba 100644 (file)
@@ -1,7 +1,9 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <ProjectGuid>{9F312D76-9AF1-4E90-B3B0-815A1EC6C346}</ProjectGuid>
     <OutputType>Exe</OutputType>
+    <!-- To be consistent between netfx and others we override the SDK behavior which defaults to .dll -->
+    <TargetExt>.exe</TargetExt>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Configurations>netstandard-Debug;netstandard-Release</Configurations>
   </PropertyGroup>
index de77a67..02070c6 100644 (file)
@@ -1,6 +1,8 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
+    <!-- To be consistent between netfx and others we override the SDK behavior which defaults to .dll -->
+    <TargetExt>.exe</TargetExt>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <ProjectGuid>{06B19C7D-9EBE-420F-BD33-137DB18A1FEB}</ProjectGuid>
     <Configurations>netstandard-Debug;netstandard-Release</Configurations>
index 4d57890..eb71806 100644 (file)
@@ -1,6 +1,8 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>Exe</OutputType>
+    <!-- To be consistent between netfx and others we override the SDK behavior which defaults to .dll -->
+    <TargetExt>.exe</TargetExt>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <ProjectGuid>{8045E634-C181-4C6C-AE48-71AC18D1C637}</ProjectGuid>
     <Configurations>netstandard-Debug;netstandard-Release</Configurations>
index 674adbb..a78417e 100644 (file)
@@ -1,7 +1,6 @@
 <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="..\Directory.Build.props" />
   <PropertyGroup>
-    <IntermediateOutputPath>$(IntermediateOutputPath)$(OSGroup)-$(ArchGroup)/</IntermediateOutputPath>
     <NugetRuntimeIdentifier>None</NugetRuntimeIdentifier>
     <ContainsPackageReferences>true</ContainsPackageReferences>
     <!-- We need configuration-specific assets files. -->
index 03ea6de..d422e7d 100644 (file)
@@ -1,4 +1,4 @@
-<Project ToolsVersion="14.0" DefaultTargets="BuildAndTest" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <Import Project="../Directory.Build.props" />
 
   <PropertyGroup>
index 934ae47..c16d51a 100644 (file)
@@ -1,14 +1,22 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project>
+  <!-- BaseIntermediateOutputPath must be set before Microsoft.Common.props is loaded. --> 
+  <PropertyGroup>
+    <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)Tools/$(BuildToolsPackageVersion)/</BaseIntermediateOutputPath>
+  </PropertyGroup>
+
+  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
+
   <PropertyGroup>
     <TargetFramework>netcoreapp1.0</TargetFramework>
     <EnableDefaultItems>false</EnableDefaultItems>
     <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
-    <BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)Tools/$(BuildToolsPackageVersion)</BaseIntermediateOutputPath>
   </PropertyGroup>
-  <Import Project="$(MSBuildThisFileDirectory)dependencies.props" />
+
   <ItemGroup>
     <PackageReference Include="Microsoft.DotNet.BuildTools" Version="$(BuildToolsPackageVersion)" />
     <PackageReference Include="$(FeedTasksPackage)" Version="$(FeedTasksPackageVersion)" />
     <PackageReference Include="$(PublishSymbolsPackage)" Version="$(PublishSymbolsPackageVersion)" />
   </ItemGroup>
+
+  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
 </Project>
index 56405fe..fa0122e 100644 (file)
@@ -92,7 +92,7 @@
 
   <Target Name="Build" DependsOnTargets="RunApiCompat" />
   <Target Name="Clean">
-    <RemoveDir Directories="$(IntermediateOutputPath);$(GenFacadesOutputPath)" />
+    <RemoveDir Directories="$(BaseIntermediateOutputPath);$(GenFacadesOutputPath)" />
   </Target>
   <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
 
index f583307..770b365 100644 (file)
@@ -19,7 +19,7 @@
   </PropertyGroup>
 
   <PropertyGroup>
-    <IntermediateOutputPath>$(BaseIntermediateOutputPath)shims/$(TargetGroup)/</IntermediateOutputPath>
-    <GenFacadesOutputPath>$(BaseIntermediateOutputPath)shims/$(TargetGroup)/facades/</GenFacadesOutputPath>
+    <!-- shared folder for ApiCompat.proj and shims.proj -->
+    <GenFacadesOutputPath>$(RootIntermediateOutputPath)shims/$(TargetGroup)/</GenFacadesOutputPath>
   </PropertyGroup>
-</Project>
\ No newline at end of file
+</Project>
index b60eff3..bdea014 100644 (file)
@@ -78,7 +78,7 @@
 
   <Target Name="Build" DependsOnTargets="RunGenFacades;BinPlace" />
   <Target Name="Clean">
-    <RemoveDir Directories="$(IntermediateOutputPath);$(GenFacadesOutputPath)" />
+    <RemoveDir Directories="$(BaseIntermediateOutputPath);$(GenFacadesOutputPath)" />
   </Target>
   <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
 
index a0525fd..6785f67 100644 (file)
@@ -2,6 +2,9 @@
 <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
     <TargetGroups Include="netcore50">
+      <TargetFramework>netcore50</TargetFramework>
+      <TargetFrameworkIdentifier>.NETCore</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.Private.NetNative</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETCore,Version=v5.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcore50</NuGetTargetMonikerShort>
@@ -9,6 +12,9 @@
       <CompatibleWith>netstandard1.4</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="netcore50aot">
+      <TargetFramework>netcore50</TargetFramework>
+      <TargetFrameworkIdentifier>.NETCore</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
       <PackageTargetRuntimeSuffix>aot</PackageTargetRuntimeSuffix>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.Private.NetNative</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETCore,Version=v5.0</NuGetTargetMoniker>
@@ -18,6 +24,9 @@
       <CompatibleWith>netstandard1.4</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="uap10.0.16299aot">
+      <TargetFramework>uap10.0.16299</TargetFramework>
+      <TargetFrameworkIdentifier>UAP</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>10.0.16299</TargetFrameworkVersion>
       <PackageTargetRuntimeSuffix>aot</PackageTargetRuntimeSuffix>
       <NuGetTargetMoniker>UAP,Version=v10.0.16299</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>uap10.0.16299</NuGetTargetMonikerShort>
@@ -26,6 +35,9 @@
       <CompatibleWith>uap10.0.16299;netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="uap10.0.16299">
+      <TargetFramework>uap10.0.16299</TargetFramework>
+      <TargetFrameworkIdentifier>UAP</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>10.0.16299</TargetFrameworkVersion>
       <NuGetTargetMoniker>UAP,Version=v10.0.16299</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>uap10.0.16299</NuGetTargetMonikerShort>
       <UWPCompatible>true</UWPCompatible>
@@ -33,6 +45,9 @@
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="uapvnextaot">
+      <TargetFramework>$(UAPvNextTFM)</TargetFramework>
+      <TargetFrameworkIdentifier>$(UAPvNextTFI)</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>$(UAPvNextVersion)</TargetFrameworkVersion>
       <PackageTargetRuntimeSuffix>aot</PackageTargetRuntimeSuffix>
       <NuGetTargetMoniker>$(UAPvNextTFMFull)</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>$(UAPvNextTFM)</NuGetTargetMonikerShort>
@@ -41,6 +56,9 @@
       <CompatibleWith>uapvnext;netstandard2.0</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="uapvnext">
+      <TargetFramework>$(UAPvNextTFM)</TargetFramework>
+      <TargetFrameworkIdentifier>$(UAPvNextTFI)</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>$(UAPvNextVersion)</TargetFrameworkVersion>
       <NuGetTargetMoniker>$(UAPvNextTFMFull)</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>$(UAPvNextTFM)</NuGetTargetMonikerShort>
       <UWPCompatible>true</UWPCompatible>
@@ -49,6 +67,9 @@
     </TargetGroups>
     <!-- uap is an alias for uapvNext any/coreclr runtime -->
     <TargetGroups Include="uap">
+      <TargetFramework>$(UAPvNextTFM)</TargetFramework>
+      <TargetFrameworkIdentifier>$(UAPvNextTFI)</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>$(UAPvNextVersion)</TargetFrameworkVersion>
       <NuGetTargetMoniker>$(UAPvNextTFMFull)</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>$(UAPvNextTFM)</NuGetTargetMonikerShort>
       <UWPCompatible>true</UWPCompatible>
@@ -57,6 +78,9 @@
     </TargetGroups>
     <!-- uapaot is an alias for uapvNext, aot runtime -->
     <TargetGroups Include="uapaot">
+      <TargetFramework>$(UAPvNextTFM)</TargetFramework>
+      <TargetFrameworkIdentifier>$(UAPvNextTFI)</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>$(UAPvNextVersion)</TargetFrameworkVersion>
       <PackageTargetRuntimeSuffix>aot</PackageTargetRuntimeSuffix>
       <NuGetTargetMoniker>$(UAPvNextTFMFull)</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>$(UAPvNextTFM)</NuGetTargetMonikerShort>
@@ -65,6 +89,7 @@
       <CompatibleWith>uap;netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="netstandard1.0">
+      <TargetFramework>netstandard1.0</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.0</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
@@ -72,6 +97,7 @@
       <UWPCompatible>true</UWPCompatible>
     </TargetGroups>
     <TargetGroups Include="netstandard1.1">
+      <TargetFramework>netstandard1.1</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.1</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard1.0</Imports>
     </TargetGroups>
     <TargetGroups Include="netstandard1.2">
+      <TargetFramework>netstandard1.2</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.2</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.2</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard1.1</Imports>
     </TargetGroups>
     <TargetGroups Include="netstandard1.3">
+      <TargetFramework>netstandard1.3</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.3</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.3</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard1.2</Imports>
     </TargetGroups>
     <TargetGroups Include="netstandard1.4">
+      <TargetFramework>netstandard1.4</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.4</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.4</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard1.3</Imports>
     </TargetGroups>
     <TargetGroups Include="netstandard1.5">
+      <TargetFramework>netstandard1.5</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.5</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.5</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard1.4</Imports>
     </TargetGroups>
     <TargetGroups Include="netstandard1.6">
+      <TargetFramework>netstandard1.6</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v1.6</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard1.6</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard1.5</Imports>
     </TargetGroups>
     <TargetGroups Include="netstandard2.0">
+      <TargetFramework>netstandard2.0</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v2.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard2.0</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
     </TargetGroups>
     <!-- netstandard is an alias for netstandard2.0 -->
     <TargetGroups Include="netstandard">
+      <TargetFramework>netstandard2.0</TargetFramework>
       <NuGetTargetMoniker>.NETStandard,Version=v2.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netstandard2.0</NuGetTargetMonikerShort>
       <!-- By default, netstandard libraries will be held to the UWP compatibility bar;
       <Imports>netstandard2.0</Imports>
     </TargetGroups>
     <TargetGroups Include="netcoreapp1.0">
+      <TargetFramework>netcoreapp1.0</TargetFramework>
       <NuGetTargetMoniker>.NETCoreApp,Version=v1.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp1.0</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard1.6</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="netcoreapp2.0">
+      <TargetFramework>netcoreapp2.0</TargetFramework>
       <NuGetTargetMoniker>.NETCoreApp,Version=v2.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp2.0</NuGetTargetMonikerShort>
       <Imports>netcoreapp1.0</Imports>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="netcoreapp2.1">
+      <TargetFramework>netcoreapp2.1</TargetFramework>
       <NuGetTargetMoniker>.NETCoreApp,Version=v2.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp2.1</NuGetTargetMonikerShort>
       <Imports>netcoreapp2.0</Imports>
     </TargetGroups>
     <!-- netcoreapp is an alias for netcoreapp2.1 -->
     <TargetGroups Include="netcoreapp">
+      <TargetFramework>netcoreapp2.1</TargetFramework>
       <NuGetTargetMoniker>.NETCoreApp,Version=v2.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp2.1</NuGetTargetMonikerShort>
       <Imports>netcoreapp2.1</Imports>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="netcoreapp1.2">
+      <TargetFramework>netcoreapp1.2</TargetFramework>
       <NuGetTargetMoniker>.NETCoreApp,Version=v1.2</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp1.2</NuGetTargetMonikerShort>
     </TargetGroups>
     <TargetGroups Include="netcoreapp2.1aot">
+      <TargetFramework>netcoreapp2.1</TargetFramework>
       <PackageTargetRuntimeSuffix>aot</PackageTargetRuntimeSuffix>
       <NuGetTargetMoniker>.NETCoreApp,Version=v2.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp2.1</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="netcoreappaot">
+      <TargetFramework>netcoreapp2.1</TargetFramework>
       <PackageTargetRuntimeSuffix>aot</PackageTargetRuntimeSuffix>
       <NuGetTargetMoniker>.NETCoreApp,Version=v2.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>netcoreapp2.1</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net45">
+      <TargetFramework>net45</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.5</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.5</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net45</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard1.1</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net451">
+      <TargetFramework>net451</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.5.1</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.5.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net451</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard1.2</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net46">
+      <TargetFramework>net46</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.6</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.6</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net46</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard1.3</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net461">
+      <TargetFramework>net461</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.6.1</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.6.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net461</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net462">
+      <TargetFramework>net462</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.6.2</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.6.2</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net462</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net463">
+      <TargetFramework>net463</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.6.3</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.6.3</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net463</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net47">
+      <TargetFramework>net47</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.7</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.7</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net47</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net471">
+      <TargetFramework>net471</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.7.1</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.7.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net471</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="net472">
+      <TargetFramework>net472</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.7.2</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.7.2</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net472</NuGetTargetMonikerShort>
     </TargetGroups>
     <!-- netfx is an alias for net472 -->
     <TargetGroups Include="netfx">
+      <TargetFramework>net472</TargetFramework>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.NETFramework.v4.7.2</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETFramework,Version=v4.7.2</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net472</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="win8">
+      <TargetFramework>win8</TargetFramework>
+      <TargetFrameworkIdentifier>Windows</TargetFrameworkIdentifier>
+      <TargetFrameworkIdentifier>v8.0</TargetFrameworkIdentifier>
       <NuGetTargetMoniker>Windows,Version=v8.0</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>win8</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard1.1</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="wpa81">
+      <TargetFramework>wpa81</TargetFramework>
+      <TargetFrameworkIdentifier>WindowsPhoneApp</TargetFrameworkIdentifier>
+      <TargetFrameworkIdentifier>v8.1</TargetFrameworkIdentifier>
       <NuGetTargetMoniker>WindowsPhoneApp,Version=v8.1</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>wpa81</NuGetTargetMonikerShort>
       <CompatibleWith>netstandard1.2</CompatibleWith>
     </TargetGroups>
     <TargetGroups Include="portable_net45+win8+sl5">
+      <TargetFramework>portable-net45+win8+sl5</TargetFramework>
+      <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>v0.0</TargetFrameworkVersion>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.Portable.v4.0.Profile47</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETPortable,Version=v0.0,Profile=Profile47</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>portable-net45+win8+sl5</NuGetTargetMonikerShort>
     </TargetGroups>
     <TargetGroups Include="portable_net40+sl4+win8+wp8">
+      <TargetFramework>portable-net40+sl4+win8+wp8</TargetFramework>
+      <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
+      <TargetFrameworkVersion>v0.0</TargetFrameworkVersion>
       <TargetingPackNugetPackageId>Microsoft.TargetingPack.Portable.v4.0.Profile36</TargetingPackNugetPackageId>
       <NuGetTargetMoniker>.NETPortable,Version=v0.0,Profile=Profile36</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>portable-net40+sl4+win8+wp8</NuGetTargetMonikerShort>
            build when specified directly or BuildAllConfigurations is set to True.  -->
     </TargetGroups>
     <TargetGroups Include="mono">
+      <TargetFramework>net463</TargetFramework>
       <NuGetTargetMoniker>.NETFramework,Version=v4.6.3</NuGetTargetMoniker>
       <NuGetTargetMonikerShort>net463</NuGetTargetMonikerShort>
     </TargetGroups>