diff --git a/Compilers.sln b/Compilers.sln
index 62127a253d88a..ffba96f9a0264 100644
--- a/Compilers.sln
+++ b/Compilers.sln
@@ -165,6 +165,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.CSha
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestDiscoveryWorker", "src\Tools\TestDiscoveryWorker\TestDiscoveryWorker.csproj", "{FB617466-C4A1-4289-A512-A06182FC779F}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Compilers.Framework.Package", "src\NuGet\Microsoft.Net.Compilers.Toolset\Framework\Microsoft.Net.Compilers.Framework.Package.csproj", "{992463BF-B341-4468-92D9-C61C1028E0FE}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -423,6 +425,10 @@ Global
{FB617466-C4A1-4289-A512-A06182FC779F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FB617466-C4A1-4289-A512-A06182FC779F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB617466-C4A1-4289-A512-A06182FC779F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {992463BF-B341-4468-92D9-C61C1028E0FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {992463BF-B341-4468-92D9-C61C1028E0FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {992463BF-B341-4468-92D9-C61C1028E0FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {992463BF-B341-4468-92D9-C61C1028E0FE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -499,6 +505,7 @@ Global
{48C93F90-8776-4847-96D8-127B896D6C80} = {C65C6143-BED3-46E6-869E-9F0BE6E84C37}
{F3D9264A-7CAE-4265-AF48-0C863301F51E} = {32A48625-F0AD-419D-828B-A50BDABA38EA}
{FB617466-C4A1-4289-A512-A06182FC779F} = {FD0FAF5F-1DED-485C-99FA-84B97F3A8EEC}
+ {992463BF-B341-4468-92D9-C61C1028E0FE} = {274B96B7-F815-47E3-9CA4-4024A57A478F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6F599E08-A9EA-4FAA-897F-5D824B0210E6}
diff --git a/Roslyn.sln b/Roslyn.sln
index 552fc9c305112..23ec470e77479 100644
--- a/Roslyn.sln
+++ b/Roslyn.sln
@@ -525,6 +525,8 @@ Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Microsoft.CodeAnalysis.Visu
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestDiscoveryWorker", "src\Tools\TestDiscoveryWorker\TestDiscoveryWorker.csproj", "{8BC50AFF-1EBF-4E9A-AEBB-04F387AA800F}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Compilers.Framework.Package", "src\NuGet\Microsoft.Net.Compilers.Toolset\Framework\Microsoft.Net.Compilers.Framework.Package.csproj", "{521ADC3E-CC15-414B-9356-D87C5BCF3A24}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1283,6 +1285,10 @@ Global
{8BC50AFF-1EBF-4E9A-AEBB-04F387AA800F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BC50AFF-1EBF-4E9A-AEBB-04F387AA800F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BC50AFF-1EBF-4E9A-AEBB-04F387AA800F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {521ADC3E-CC15-414B-9356-D87C5BCF3A24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {521ADC3E-CC15-414B-9356-D87C5BCF3A24}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {521ADC3E-CC15-414B-9356-D87C5BCF3A24}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {521ADC3E-CC15-414B-9356-D87C5BCF3A24}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1522,6 +1528,7 @@ Global
{4C1B26EE-465B-4B30-9E50-0285EF7AB035} = {3E5FE3DB-45F7-4D83-9097-8F05D3B3AEC6}
{F836BDB1-4EC7-4F4C-B2E9-BCD721C9E650} = {3E5FE3DB-45F7-4D83-9097-8F05D3B3AEC6}
{8BC50AFF-1EBF-4E9A-AEBB-04F387AA800F} = {FD0FAF5F-1DED-485C-99FA-84B97F3A8EEC}
+ {521ADC3E-CC15-414B-9356-D87C5BCF3A24} = {C52D8057-43AF-40E6-A01B-6CDBB7301985}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {604E6B91-7BC0-4126-AE07-D4D2FEFC3D29}
diff --git a/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/Microsoft.Net.Compilers.Framework.Package.csproj b/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/Microsoft.Net.Compilers.Framework.Package.csproj
new file mode 100644
index 0000000000000..f13d447272395
--- /dev/null
+++ b/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/Microsoft.Net.Compilers.Framework.Package.csproj
@@ -0,0 +1,47 @@
+
+
+
+ net472
+
+ true
+ Microsoft.Net.Compilers.Framework
+ false
+ true
+
+ .NET Framework Compilers Toolset Package
+
+ Referencing this package will cause the project to be built using the C# and Visual Basic framework compilers contained in the package, as opposed to the version installed with MSBuild.
+
+ This package is an implementation detail of a .NET SDK feature. Directly referencing this package is not supported.
+
+ $(RoslynPackageDescriptionDetails)
+
+ $(TargetsForTfmSpecificContentInPackage);_GetFilesToPackage
+
+ $(NoWarn);NU5100;NU5128
+
+ <_DependsOn>InitializeDesktopCompilerArtifacts
+ <_DependsOn Condition="'$(TargetFramework)' == 'net6.0'">InitializeCoreClrCompilerArtifacts
+
+
+
+
+
+
+
+
+
+
+
+
+ <_File Include="@(DesktopCompilerArtifact)" TargetDir="tasks/net472"/>
+ <_File Include="@(DesktopCompilerResourceArtifact)" TargetDir="tasks/net472"/>
+ <_File Include="$(MSBuildProjectDirectory)\build\**\*.*" Condition="'$(TargetFramework)' == 'net472'" TargetDir="build" />
+ <_File Include="$(MSBuildProjectDirectory)\buildMultiTargeting\**\*.*" Condition="'$(TargetFramework)' == 'net472'" TargetDir="buildMultiTargeting" />
+
+
+
+
+
+
+
diff --git a/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/build/Microsoft.Net.Compilers.Framework.props b/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/build/Microsoft.Net.Compilers.Framework.props
new file mode 100644
index 0000000000000..90ad67b5feb6d
--- /dev/null
+++ b/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/build/Microsoft.Net.Compilers.Framework.props
@@ -0,0 +1,16 @@
+
+
+
+
+ <_RoslynTargetDirectoryName>net472
+ <_RoslynTasksDirectory>$(MSBuildThisFileDirectory)..\tasks\$(_RoslynTargetDirectoryName)\
+ $(_RoslynTasksDirectory)Microsoft.Build.Tasks.CodeAnalysis.dll
+ true
+ $(_RoslynTasksDirectory)Microsoft.CSharp.Core.targets
+ $(_RoslynTasksDirectory)Microsoft.VisualBasic.Core.targets
+
+
+
+
+
+
diff --git a/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/buildMultiTargeting/Microsoft.Net.Compilers.Framework.props b/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/buildMultiTargeting/Microsoft.Net.Compilers.Framework.props
new file mode 100644
index 0000000000000..1d5afc708a528
--- /dev/null
+++ b/src/NuGet/Microsoft.Net.Compilers.Toolset/Framework/buildMultiTargeting/Microsoft.Net.Compilers.Framework.props
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/Tools/BuildBoss/CompilerNuGetCheckerUtil.cs b/src/Tools/BuildBoss/CompilerNuGetCheckerUtil.cs
index 9f22bfd22049e..700cdfdf66d2c 100644
--- a/src/Tools/BuildBoss/CompilerNuGetCheckerUtil.cs
+++ b/src/Tools/BuildBoss/CompilerNuGetCheckerUtil.cs
@@ -126,6 +126,15 @@ private bool CheckPackages(TextWriter textWriter)
(@"tasks\net472", GetProjectOutputDirectory("VBCSCompiler-arm64", "net472")),
(@"tasks\net472", GetProjectOutputDirectory("Microsoft.Build.Tasks.CodeAnalysis", "net472"))); ;
+ allGood &= VerifyPackageCore(
+ textWriter,
+ FindNuGetPackage(Path.Combine(ArtifactsDirectory, "packages", Configuration, "Shipping"), "Microsoft.Net.Compilers.Framework"),
+ (@"tasks\net472", GetProjectOutputDirectory("csc", "net472")),
+ (@"tasks\net472", GetProjectOutputDirectory("vbc", "net472")),
+ (@"tasks\net472", GetProjectOutputDirectory("csi", "net472")),
+ (@"tasks\net472", GetProjectOutputDirectory("VBCSCompiler", "net472")),
+ (@"tasks\net472", GetProjectOutputDirectory("Microsoft.Build.Tasks.CodeAnalysis", "net472"))); ;
+
allGood &= VerifyPackageCore(
textWriter,
FindNuGetPackage(Path.Combine(ArtifactsDirectory, "packages", Configuration, "Shipping"), "Microsoft.Net.Compilers.Toolset"),