Add support for Visual Studio 2022 in Flax.Build
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user