Skip to content
18 changes: 16 additions & 2 deletions src/Build.UnitTests/BackEnd/SdkResolverService_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ public void AssertResolverThrows()
e.Sdk.Name.ShouldBe("1sdkName");
}


[Fact]
// Scenario: MockSdkResolverWithResolvableSdkPattern2 is a specific resolver (i.e. resolver with pattern)
// and it successfully resolves sdk.
Expand Down Expand Up @@ -184,6 +183,22 @@ public void AssertFirstResolverWithPatternCanResolve()
_logger.BuildMessageEvents.Select(i => i.Message).ShouldNotContain("MockSdkResolver1 running");
}

[Fact]
public void AssertSdkResolutionMessagesAreLogged()
{
SdkResolverService.Instance.InitializeForTests(new MockLoaderStrategy());
SdkReference sdk = new SdkReference("1sdkName", "referencedVersion", "minimumVersion");

var result = SdkResolverService.Instance.ResolveSdk(BuildEventContext.InvalidSubmissionId, sdk, _loggingContext, new MockElementLocation("file"), "sln", "projectPath", interactive: false, isRunningInVisualStudio: false, failOnUnresolvedSdk: true);

// First resolver attemopted to resolve, but failed.
var errorMessage = "\nErrors:\n" + ResourceUtilities.FormatResourceStringStripCodeAndKeyword("SDKResolverReturnedNull", nameof(MockResolverReturnsNull));
_logger.BuildMessageEvents.Select(i => i.Message)
.ShouldContain(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("SDKResolverAttempt", nameof(MockResolverReturnsNull), sdk.ToString(), errorMessage));
// Second resolver succeeded.
_logger.BuildMessageEvents.Select(i => i.Message).ShouldContain(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("SucceededToResolveSDK", sdk.ToString(), nameof(MockSdkResolver1), result.Path, result.Version));
}

[Fact]
public void AssertFirstResolverErrorsSupressedWhenResolved()
{
Expand All @@ -196,7 +211,6 @@ public void AssertFirstResolverErrorsSupressedWhenResolved()
var result = SdkResolverService.Instance.ResolveSdk(BuildEventContext.InvalidSubmissionId, sdk, _loggingContext, new MockElementLocation("file"), "sln", "projectPath", interactive: false, isRunningInVisualStudio: false, failOnUnresolvedSdk: true);

result.Path.ShouldBe("resolverpath2");

// Both resolvers should run, and no ERROR string.
_logger.BuildMessageEvents.Select(i => i.Message).ShouldContain("MockSdkResolver1 running");
_logger.BuildMessageEvents.Select(i => i.Message).ShouldContain("MockSdkResolver2 running");
Expand Down
11 changes: 9 additions & 2 deletions src/Build/BackEnd/Components/SdkResolution/SdkResolverService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,6 @@ private bool TryResolveSdkUsingSpecifiedResolvers(
// Loop through resolvers which have already been sorted by priority, returning the first result that was successful
SdkLogger buildEngineLogger = new SdkLogger(loggingContext);

loggingContext.LogComment(MessageImportance.Low, "SdkResolving", sdk.ToString());

foreach (SdkResolver sdkResolver in resolvers)
{
SdkResolverContext context = new SdkResolverContext(buildEngineLogger, projectPath, solutionPath, ProjectCollection.Version, interactive, isRunningInVisualStudio)
Expand Down Expand Up @@ -355,6 +353,8 @@ private bool TryResolveSdkUsingSpecifiedResolvers(

if (result.Success)
{
loggingContext.LogComment(MessageImportance.Low, "SucceededToResolveSDK", sdk.ToString(), sdkResolver.Name, result.Path ?? "null", result.Version ?? "null");

LogWarnings(loggingContext, sdkReferenceLocation, result.Warnings);

if (!IsReferenceSameVersion(sdk, result.Version))
Expand All @@ -369,6 +369,13 @@ private bool TryResolveSdkUsingSpecifiedResolvers(
sdkResult = result;
return true;
}
else
{
string resultWarningsAndErrors = (result.Warnings?.Any() == true ? "\nWarnings:\n" + string.Join("\n", result.Warnings) : string.Empty)
+ (result.Errors?.Any() == true ? "\nErrors:\n" + string.Join("\n", result.Errors) : string.Empty);

loggingContext.LogComment(MessageImportance.Low, "SDKResolverAttempt", sdkResolver.Name, sdk.ToString(), resultWarningsAndErrors);
}

results.Add(result);
}
Expand Down
12 changes: 6 additions & 6 deletions src/Build/Resources/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1324,6 +1324,12 @@
<value>Could not resolve SDK "{0}". Exactly one of the probing messages below indicates why we could not resolve the SDK. Investigate and resolve that message to correctly specify the SDK.
{1}</value>
</data>
<data name="SucceededToResolveSDK" xml:space="preserve">
<value>The SDK "{0}" was successfully resolved by the "{1}" resolver to location "{2}" and version "{3}".</value>
</data>
<data name="SDKResolverAttempt" xml:space="preserve">
<value>The "{0}" resolver attempted to resolve the SDK "{1}". {2}</value>
</data>
<data name="CouldNotRunNuGetSdkResolver" xml:space="preserve">
<value>The NuGet-based SDK resolver failed to run because NuGet assemblies could not be located. Check your installation of MSBuild or set the environment variable "{0}" to the folder that contains the required NuGet assemblies. {1}</value>
</data>
Expand Down Expand Up @@ -1769,12 +1775,6 @@ Utilization: {0} Average Utilization: {1:###.0}</value>
LOCALIZATION: Do not localize the word SDK.
</comment>
</data>
<data name="SdkResolving" xml:space="preserve">
<value>Resolving SDK '{0}'...</value>
<comment>
LOCALIZATION: Do not localize the word SDK.
</comment>
</data>
<data name="ProjectGraphDoesNotSupportProjectReferenceWithToolset" xml:space="preserve">
<value>MSB4250: ProjectGraph does not support ProjectReference items with the ToolsVersion metadata set. Found ProjectReference "{0}" with ToolsVersion in file "{1}"</value>
<comment>
Expand Down
17 changes: 10 additions & 7 deletions src/Build/Resources/xlf/Strings.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 10 additions & 7 deletions src/Build/Resources/xlf/Strings.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 10 additions & 7 deletions src/Build/Resources/xlf/Strings.es.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 10 additions & 7 deletions src/Build/Resources/xlf/Strings.fr.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 10 additions & 7 deletions src/Build/Resources/xlf/Strings.it.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 10 additions & 7 deletions src/Build/Resources/xlf/Strings.ja.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading