std::wstring HOSTFXR_UTILITY::FindHighestDotNetVersion( _In_ std::vector<std::wstring> & vFolders ) { fx_ver_t max_ver(-1, -1, -1); for (const auto& dir : vFolders) { fx_ver_t fx_ver(-1, -1, -1); if (fx_ver_t::parse(dir, &fx_ver, false)) { max_ver = max(max_ver, fx_ver); } } return max_ver.as_str(); }
pal::string_t resolve_sdk_version(pal::string_t sdk_path) { trace::verbose(_X("--- Resolving SDK version from SDK dir [%s]"), sdk_path.c_str()); pal::string_t retval; std::vector<pal::string_t> versions; pal::readdir(sdk_path, &versions); fx_ver_t max_ver(-1, -1, -1); fx_ver_t max_pre(-1, -1, -1); for (const auto& version : versions) { trace::verbose(_X("Considering version... [%s]"), version.c_str()); fx_ver_t ver(-1, -1, -1); if (fx_ver_t::parse(version, &ver, true)) { max_ver = std::max(ver, max_ver); } if (fx_ver_t::parse(version, &ver, false)) { max_pre = std::max(ver, max_pre); } } // No production, use the max pre-release. if (max_ver == fx_ver_t(-1, -1, -1)) { trace::verbose(_X("No production version found, so using latest prerelease")); max_ver = max_pre; } pal::string_t max_ver_str = max_ver.as_str(); append_path(&sdk_path, max_ver_str.c_str()); trace::verbose(_X("Checking if resolved SDK dir [%s] exists"), sdk_path.c_str()); if (pal::directory_exists(sdk_path)) { retval = sdk_path; } trace::verbose(_X("Resolved SDK dir is [%s]"), retval.c_str()); return retval; }