Skip to content

Commit

Permalink
[release/8.0.2xx] NGEN Microsoft.DotNet.MSBuildSdkResolver.dll and it…
Browse files Browse the repository at this point in the history
…s dependencies (#17750)

Backport of #17732 to release/8.0.2xx

MSBuild.exe currently spends a significant amount of time JITting `Microsoft.DotNet.MSBuildSdkResolver` and its dependencies, see dotnet/msbuild#9303 for details.

This PR makes Visual Studio installer add these assemblies to the NGEN queue, which is a necessary condition for eliminating JITting. Just like `Microsoft.Build.*` assemblies, we need to NGEN these with two configurations: vsn.exe so it works in the devenv process, and MSBuild.exe so it works in MSBuild satellite processes.
  • Loading branch information
github-actions[bot] authored Nov 14, 2023
1 parent 79d9738 commit f0c4e4e
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/core-sdk-tasks/GenerateMSBuildExtensionsSWR.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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)
Expand All @@ -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();
Expand All @@ -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);
}
}
Expand Down

0 comments on commit f0c4e4e

Please sign in to comment.