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");
}