如何在 Visual Studio 2022 中设置全局 MSVC 工具集版本(不是每个项目)?

问题描述 投票:0回答:1

我在使用 Visual Studio 2022 版本 17.7.4 和虚幻引擎 5.3 时遇到问题。虚幻引擎似乎检测到我的 MSVC 工具集版本为 14.29,但我的系统上全局安装了 MSVC 工具集版本 14.37.32822。这会导致虚幻引擎和 Visual Studio 之间出现兼容性问题。

有没有办法在 Visual Studio 2022 中设置全局 MSVC 工具集版本,以便虚幻引擎 5.3 可以识别它,而无需在每个项目的基础上进行配置?我已经通过 EpicGames 安装了 UE5,因为我不从源代码构建它。

我已经检查了虚幻引擎中的项目设置,虽然我可以为各个项目指定工具集版本,但如果可能的话,我想建立一个适用于所有项目的全局设置。任何有关如何实现这一目标的指导将不胜感激。

visual-studio visual-c++ unreal-engine5
1个回答
0
投票

此答案基于UI5.3,Epic将来可能会重新编写此代码。

在 UE 中,默认工具集选择是通过 UnrealBuildTool 中定义的一组规则进行的。可以通过构建您自己的引擎版本来更改它们。

UnrealBuildTool 首先选择所有已安装的与您的目标兼容的工具集,然后对它们进行排序并使用列表中的第一个。 这个过程发生在

SelectToolChain
中的方法
Engine\Source\Programs\UnrealBuildTool\Platform\Windows\MicrosoftPlatformSDK.cs

static ToolChainInstallation? SelectToolChain(IEnumerable<ToolChainInstallation> ToolChains, Func<IOrderedEnumerable<ToolChainInstallation>, IOrderedEnumerable<ToolChainInstallation>> Preference, UnrealArch Architecture, ILogger Logger)
{
    var orderedToolChains = Preference(ToolChains.Where(x => x.Architecture == Architecture)
        .OrderByDescending(x => x.Error == null))
        .ThenByDescending(x => x.Is64Bit)
        .ThenBy(x => x.ReleaseChannel)
        .ThenBy(x => x.FamilyRank)
        .ThenByDescending(x => x.IsAutoSdk)
        .ThenByDescending(x => x.Version);
    
    ToolChainInstallation? ToolChain = orderedToolChains.FirstOrDefault();
    if (ToolChain?.Error != null)
    {
        if (!IgnoreToolchainErrors)
        {
            throw new BuildException(ToolChain.Error);
        }
        // If errors are ignored, log the warning instead
        Log.TraceWarningOnce(ToolChain.Error);
    }

    return ToolChain;
}

引擎首先优先选择 64 位版本,最新版本优于预览版本,然后按系列排名排序。系列排名是为什么非常旧的工具集可能比太新的工具集更受青睐的最可能原因,因为它是根据已知引擎可以正常工作的一系列首选工具链版本计算得出的,因此,例如,如果您有 VS2019 和 VS2022安装,并使用比 VS2022 更旧的引擎版本,您的 VS2022 工具集可能不会出现在列表中,如果是这种情况,它将获得比 2019 工具集更差的 familyRank(不在其中的工具集的默认 familyRank)列表是

PreferredVisualCppVersions.Length
)。

此列表在

Engine\Source\Programs\UnrealBuildTool\Platform\Windows\MicrosoftPlatformSDK.Versions.cs

中定义

这是我的列表,已更新以使用 VS2022 的最新预览版本:

/// <summary>
/// Ranges of tested compiler toolchains to be used, in order of preference. If multiple toolchains in a range are present, the latest version will be preferred.
/// Note that the numbers here correspond to the installation *folders* rather than precise executable versions. 
/// </summary>

static readonly VersionNumberRange[] PreferredVisualCppVersions = new VersionNumberRange[]
{
    VersionNumberRange.Parse("14.40.33807", "14.40.99999"), // VS2022 17.10.x
    VersionNumberRange.Parse("14.39.33428", "14.39.99999"), // VS2022 17.9.x
    VersionNumberRange.Parse("14.36.32532", "14.36.99999"), // VS2022 17.6.x
    VersionNumberRange.Parse("14.35.32215", "14.35.99999"), // VS2022 17.5.x
    VersionNumberRange.Parse("14.34.31933", "14.34.99999"), // VS2022 17.4.x
    VersionNumberRange.Parse("14.29.30133", "14.29.99999"), // VS2019 16.11.x
};

如果您没有自定义VS安装路径,可用的工具集位于

C:\Program Files\Microsoft Visual Studio\{VisualStudioVersion}\VC\Tools\MSVC

© www.soinside.com 2019 - 2024. All rights reserved.