Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Implement roll-forward policies for .NET Core SDK resolution. #6953

Merged
merged 5 commits into from
Jul 10, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/corehost/cli/fxr/fx_muxer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -969,8 +969,8 @@ int fx_muxer_t::handle_cli(
// Did not exececute the app or run other commands, so try the CLI SDK dotnet.dll
//

pal::string_t sdk_dotnet;
if (!sdk_resolver_t::resolve_sdk_dotnet_path(host_info.dotnet_root, &sdk_dotnet))
auto sdk_dotnet = sdk_resolver::from_nearest_global_file().resolve(host_info.dotnet_root);
if (sdk_dotnet.empty())
{
assert(argc > 1);
if (pal::strcasecmp(_X("-h"), argv[1]) == 0 ||
Expand All @@ -994,7 +994,7 @@ int fx_muxer_t::handle_cli(

if (!pal::file_exists(sdk_dotnet))
{
trace::error(_X("Found dotnet SDK, but did not find dotnet.dll at [%s]"), sdk_dotnet.c_str());
trace::error(_X("Found .NET Core SDK, but did not find dotnet.dll at [%s]"), sdk_dotnet.c_str());
return StatusCode::LibHostSdkFindFailure;
}

Expand All @@ -1006,7 +1006,7 @@ int fx_muxer_t::handle_cli(
new_argv.push_back(sdk_dotnet.c_str());
new_argv.insert(new_argv.end(), argv + 1, argv + argc);

trace::verbose(_X("Using dotnet SDK dll=[%s]"), sdk_dotnet.c_str());
trace::verbose(_X("Using .NET Core SDK dll=[%s]"), sdk_dotnet.c_str());

int new_argoff;
pal::string_t app_candidate;
Expand Down
33 changes: 14 additions & 19 deletions src/corehost/cli/fxr/hostfxr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,18 +110,18 @@ SHARED_API int32_t HOSTFXR_CALLTYPE hostfxr_resolve_sdk(
working_dir = _X("");
}

pal::string_t cli_sdk;
if (!sdk_resolver_t::resolve_sdk_dotnet_path(exe_dir, working_dir, &cli_sdk))
auto sdk_path = sdk_resolver::from_nearest_global_file(working_dir).resolve(exe_dir);
if (sdk_path.empty())
{
// sdk_resolver_t::resolve_sdk_dotnet_path handles tracing for this error case.
// sdk_resolver::resolve handles tracing for this error case.
return 0;
}

unsigned long non_negative_buffer_size = static_cast<unsigned long>(buffer_size);
if (cli_sdk.size() < non_negative_buffer_size)
if (sdk_path.size() < non_negative_buffer_size)
{
size_t length = cli_sdk.copy(buffer, non_negative_buffer_size - 1);
assert(length == cli_sdk.size());
size_t length = sdk_path.copy(buffer, non_negative_buffer_size - 1);
assert(length == sdk_path.size());
assert(length < non_negative_buffer_size);
buffer[length] = 0;
}
Expand All @@ -130,7 +130,7 @@ SHARED_API int32_t HOSTFXR_CALLTYPE hostfxr_resolve_sdk(
trace::info(_X("hostfxr_resolve_sdk received a buffer that is too small to hold the located SDK path."));
}

return cli_sdk.size() + 1;
return sdk_path.size() + 1;
}

enum hostfxr_resolve_sdk2_flags_t : int32_t
Expand Down Expand Up @@ -218,31 +218,26 @@ SHARED_API int32_t HOSTFXR_CALLTYPE hostfxr_resolve_sdk2(
working_dir = _X("");
}

pal::string_t resolved_sdk_dir;
pal::string_t global_json_path;

bool success = sdk_resolver_t::resolve_sdk_dotnet_path(
exe_dir,
auto resolver = sdk_resolver::from_nearest_global_file(
working_dir,
&resolved_sdk_dir,
(flags & hostfxr_resolve_sdk2_flags_t::disallow_prerelease) != 0,
&global_json_path);
(flags & hostfxr_resolve_sdk2_flags_t::disallow_prerelease) == 0);

if (success)
auto resolved_sdk_dir = resolver.resolve(exe_dir);
if (!resolved_sdk_dir.empty())
{
result(
hostfxr_resolve_sdk2_result_key_t::resolved_sdk_dir,
resolved_sdk_dir.c_str());
}

if (!global_json_path.empty())
if (!resolver.global_file_path().empty())
{
result(
hostfxr_resolve_sdk2_result_key_t::global_json_path,
global_json_path.c_str());
resolver.global_file_path().c_str());
}

return success
return !resolved_sdk_dir.empty()
? StatusCode::Success
: StatusCode::SdkResolverResolveFailure;
}
Expand Down
Loading