diff --git a/src/core-sdk-tasks/GenerateMSBuildExtensionsSWR.cs b/src/core-sdk-tasks/GenerateMSBuildExtensionsSWR.cs index eab79f2b7230..81f3943d2aae 100644 --- a/src/core-sdk-tasks/GenerateMSBuildExtensionsSWR.cs +++ b/src/core-sdk-tasks/GenerateMSBuildExtensionsSWR.cs @@ -24,7 +24,8 @@ public override bool Execute() AddFolder(sb, @"MSBuildSdkResolver", - @"MSBuild\Current\Bin\SdkResolvers\Microsoft.DotNet.MSBuildSdkResolver"); + @"MSBuild\Current\Bin\SdkResolvers\Microsoft.DotNet.MSBuildSdkResolver", + ngenAssemblies: true); AddFolder(sb, @"msbuildExtensions", @@ -39,7 +40,7 @@ public override bool Execute() return true; } - private void AddFolder(StringBuilder sb, string relativeSourcePath, string swrInstallDir) + private void AddFolder(StringBuilder sb, string relativeSourcePath, string swrInstallDir, bool ngenAssemblies = false) { string sourceFolder = Path.Combine(MSBuildExtensionsLayoutDirectory, relativeSourcePath); var files = Directory.GetFiles(sourceFolder) @@ -55,7 +56,16 @@ private void AddFolder(StringBuilder sb, string relativeSourcePath, string swrIn { sb.Append(@" file source=""$(PkgVS_Redist_Common_Net_Core_SDK_MSBuildExtensions)\"); sb.Append(Path.Combine(relativeSourcePath, Path.GetFileName(file))); - sb.AppendLine("\""); + sb.Append('"'); + + if (ngenAssemblies && file.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + { + sb.Append(@" vs.file.ngenApplications=""[installDir]\Common7\IDE\vsn.exe"""); + sb.Append(@" vs.file.ngenApplications=""[installDir]\MSBuild\Current\Bin\MSBuild.exe"""); + sb.Append(" vs.file.ngenArchitecture=all"); + } + + sb.AppendLine(); } sb.AppendLine(); @@ -67,6 +77,7 @@ private void AddFolder(StringBuilder sb, string relativeSourcePath, string swrIn string newRelativeSourcePath = Path.Combine(relativeSourcePath, subfolderName); string newSwrInstallDir = Path.Combine(swrInstallDir, subfolderName); + // Don't propagate ngenAssemblies to subdirectories. AddFolder(sb, newRelativeSourcePath, newSwrInstallDir); } }