private void CreateVisualStudioCoreTools()

in src/Cli/ArtifactAssembler/ArtifactAssembler.cs [216:273]


        private void CreateVisualStudioCoreTools()
        {
            Console.WriteLine("Starting to assemble Visual Studio Core Tools artifacts");

            bool artifactNameProvided = !string.IsNullOrEmpty(_artifactName);
            bool isValidVisualStudioArtifact = _visualStudioArtifacts.ContainsKey(_artifactName);

            // Create a directory to store the assembled artifacts.
            var customHostTargetArtifactDir = Path.Combine(_stagingDirectory, Constants.VisualStudioOutputArtifactDirectoryName);
            Directory.CreateDirectory(customHostTargetArtifactDir);

            string[] visualStudioArtifactList = artifactNameProvided ? [_artifactName] : [.. _visualStudioArtifacts.Keys];

            foreach (string artifactName in visualStudioArtifactList)
            {
                // Break early if we don't need to assemble VS artifacts for specified artifactName
                if (artifactNameProvided && !isValidVisualStudioArtifact)
                {
                    break;
                }

                var (artifactDirName, consolidatedArtifactDirPath) = CreateInProc8CoreToolsHostHelper(artifactName, customHostTargetArtifactDir, createDirectory: true);

                // Copy in-proc6 files and delete directory after
                var inProc6ArtifactDirPath = Path.Combine(_inProc6ExtractedRootDir, artifactDirName);
                CheckIfArtifactDirectoryExists(inProc6ArtifactDirPath);
                FileUtilities.CopyDirectory(inProc6ArtifactDirPath, Path.Combine(consolidatedArtifactDirPath, Constants.InProc6DirectoryName));
                Directory.Delete(inProc6ArtifactDirPath, true);

                // Copy core-tools-host files
                var rid = GetRuntimeIdentifierForArtifactName(artifactName);
                var coreToolsHostArtifactDirPath = Path.Combine(_coreToolsHostExtractedRootDir, rid);
                CheckIfArtifactDirectoryExists(coreToolsHostArtifactDirPath);
                FileUtilities.CopyDirectory(coreToolsHostArtifactDirPath, consolidatedArtifactDirPath);
                Directory.Delete(coreToolsHostArtifactDirPath, true);
            }

            // Generate .NET 8 OSX fallback artifacts
            if (artifactNameProvided && _net8OsxArtifacts.Contains(_artifactName))
            {
                CreateInProc8CoreToolsHostHelper(_artifactName, customHostTargetArtifactDir, createDirectory: false);
            }
            else if (!artifactNameProvided)
            {
                // Create artifacts for .NET 8 OSX to use instead of the custom host
                foreach (var osxArtifact in _net8OsxArtifacts)
                {
                    CreateInProc8CoreToolsHostHelper(osxArtifact, customHostTargetArtifactDir, createDirectory: false);
                }
            }

            // Delete directories
            Directory.Delete(_inProc6ExtractedRootDir, true);
            Directory.Delete(_inProc8ExtractedRootDir, true);
            Directory.Delete(_coreToolsHostExtractedRootDir, true);

            Console.WriteLine("Finished assembling Visual Studio Core Tools artifacts");
        }