Add support for Visual Studio 2022 in Flax.Build

This commit is contained in:
Wojtek Figat
2021-11-10 19:12:27 +01:00
parent cb2ddc9472
commit 13ab912bb4
13 changed files with 196 additions and 128 deletions

View File

@@ -26,6 +26,7 @@ namespace Flax.Build.Projects.VisualStudio
case VisualStudioVersion.VisualStudio2015: return "v140";
case VisualStudioVersion.VisualStudio2017: return "v141";
case VisualStudioVersion.VisualStudio2019: return "v142";
case VisualStudioVersion.VisualStudio2022: return "v143";
}
return string.Empty;
}

View File

@@ -93,87 +93,88 @@ namespace Flax.Build.Projects.VisualStudio
/// <returns>The install locations.</returns>
public static IReadOnlyList<VisualStudioInstance> GetInstances()
{
if (_installDirs == null)
if (_installDirs != null)
return _installDirs;
_installDirs = new List<VisualStudioInstance>();
// Skip if running on non-Windows system
if (Platform.BuildTargetPlatform != TargetPlatform.Windows)
return _installDirs;
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
_installDirs = new List<VisualStudioInstance>();
// Skip if running on non-Windows system
if (Platform.BuildTargetPlatform != TargetPlatform.Windows)
return _installDirs;
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
// Visual Studio 2017-2022
List<VisualStudioInstance> preReleaseInstallDirs = null;
try
{
// Visual Studio 2017-2019
List<VisualStudioInstance> preReleaseInstallDirs = null;
try
SetupConfiguration setup = new SetupConfiguration();
IEnumSetupInstances enumerator = setup.EnumAllInstances();
ISetupInstance[] instances = new ISetupInstance[1];
while (true)
{
SetupConfiguration setup = new SetupConfiguration();
IEnumSetupInstances enumerator = setup.EnumAllInstances();
enumerator.Next(1, instances, out int fetchedCount);
if (fetchedCount == 0)
break;
ISetupInstance[] instances = new ISetupInstance[1];
while (true)
ISetupInstance2 instance = (ISetupInstance2)instances[0];
if ((instance.GetState() & InstanceState.Local) == InstanceState.Local)
{
enumerator.Next(1, instances, out int fetchedCount);
if (fetchedCount == 0)
break;
ISetupInstance2 instance = (ISetupInstance2)instances[0];
if ((instance.GetState() & InstanceState.Local) == InstanceState.Local)
VisualStudioVersion version;
string displayName = instance.GetDisplayName();
if (displayName.Contains("2017"))
version = VisualStudioVersion.VisualStudio2017;
else if (displayName.Contains("2019"))
version = VisualStudioVersion.VisualStudio2019;
else if (displayName.Contains("2022"))
version = VisualStudioVersion.VisualStudio2022;
else
{
VisualStudioVersion version;
string displayName = instance.GetDisplayName();
if (displayName.Contains("2019"))
version = VisualStudioVersion.VisualStudio2019;
else if (displayName.Contains("2017"))
version = VisualStudioVersion.VisualStudio2017;
else
throw new Exception(string.Format("Unknown Visual Studio installation. Display name: {0}", displayName));
Log.Warning(string.Format("Unknown Visual Studio installation. Display name: {0}", displayName));
continue;
}
var vsInstance = new VisualStudioInstance
{
Version = version,
Path = instance.GetInstallationPath(),
};
var vsInstance = new VisualStudioInstance
{
Version = version,
Path = instance.GetInstallationPath(),
};
if (instance is ISetupInstanceCatalog catalog && catalog.IsPrerelease())
{
if (preReleaseInstallDirs == null)
preReleaseInstallDirs = new List<VisualStudioInstance>();
preReleaseInstallDirs.Add(vsInstance);
}
else
{
_installDirs.Add(vsInstance);
}
if (instance is ISetupInstanceCatalog catalog && catalog.IsPrerelease())
{
if (preReleaseInstallDirs == null)
preReleaseInstallDirs = new List<VisualStudioInstance>();
preReleaseInstallDirs.Add(vsInstance);
}
else
{
_installDirs.Add(vsInstance);
}
}
}
catch
{
// Ignore errors
}
// Add pre-release locations after the normal installations
if (preReleaseInstallDirs != null)
_installDirs.AddRange(preReleaseInstallDirs);
// Visual Studio 2015
if (WindowsPlatform.TryReadInstallDirRegistryKey32("Microsoft\\VisualStudio\\SxS\\VS7", "14.0", out var dir))
{
_installDirs.Add(new VisualStudioInstance
{
Version = VisualStudioVersion.VisualStudio2015,
Path = dir,
});
}
}
catch
{
// Ignore errors
}
foreach (var e in _installDirs)
// Add pre-release locations after the normal installations
if (preReleaseInstallDirs != null)
_installDirs.AddRange(preReleaseInstallDirs);
// Visual Studio 2015
if (WindowsPlatform.TryReadInstallDirRegistryKey32("Microsoft\\VisualStudio\\SxS\\VS7", "14.0", out var dir))
{
Log.Verbose($"Found {e.Version} at {e.Path}");
_installDirs.Add(new VisualStudioInstance
{
Version = VisualStudioVersion.VisualStudio2015,
Path = dir,
});
}
}
foreach (var e in _installDirs)
Log.Verbose($"Found {e.Version} at {e.Path}");
return _installDirs;
}
}

View File

@@ -120,6 +120,7 @@ namespace Flax.Build.Projects.VisualStudio
case VisualStudioVersion.VisualStudio2015: return "14.0";
case VisualStudioVersion.VisualStudio2017: return "15.0";
case VisualStudioVersion.VisualStudio2019: return "16.0";
case VisualStudioVersion.VisualStudio2022: return "17.0";
}
return string.Empty;
@@ -275,9 +276,15 @@ namespace Flax.Build.Projects.VisualStudio
var projects = solution.Projects.Cast<VisualStudioProject>().ToArray();
// Header
if (Version == VisualStudioVersion.VisualStudio2019)
if (Version == VisualStudioVersion.VisualStudio2022)
{
vcSolutionFileContent.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00");
vcSolutionFileContent.AppendLine("# Visual Studio Version 17");
vcSolutionFileContent.AppendLine("VisualStudioVersion = 17.0.31314.256");
vcSolutionFileContent.AppendLine("MinimumVisualStudioVersion = 10.0.40219.1");
}
else if (Version == VisualStudioVersion.VisualStudio2019)
{
//vcSolutionFileContent.AppendLine();
vcSolutionFileContent.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00");
vcSolutionFileContent.AppendLine("# Visual Studio Version 16");
vcSolutionFileContent.AppendLine("VisualStudioVersion = 16.0.28315.86");
@@ -285,7 +292,6 @@ namespace Flax.Build.Projects.VisualStudio
}
else if (Version == VisualStudioVersion.VisualStudio2017)
{
//vcSolutionFileContent.AppendLine();
vcSolutionFileContent.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00");
vcSolutionFileContent.AppendLine("# Visual Studio 15");
vcSolutionFileContent.AppendLine("VisualStudioVersion = 15.0.25807.0");
@@ -293,7 +299,6 @@ namespace Flax.Build.Projects.VisualStudio
}
else if (Version == VisualStudioVersion.VisualStudio2015)
{
//vcSolutionFileContent.AppendLine();
vcSolutionFileContent.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00");
vcSolutionFileContent.AppendLine("# Visual Studio 14");
vcSolutionFileContent.AppendLine("VisualStudioVersion = 14.0.22310.1");

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2012-2020 Flax Engine. All rights reserved.
// Copyright (c) 2012-2020 Flax Engine. All rights reserved.
namespace Flax.Build.Projects.VisualStudio
{
@@ -21,5 +21,10 @@ namespace Flax.Build.Projects.VisualStudio
/// The Visual Studio 2019.
/// </summary>
VisualStudio2019,
/// <summary>
/// The Visual Studio 2022.
/// </summary>
VisualStudio2022,
}
}