in src/Tasks/Microsoft.NET.Build.Tasks/ResolvePackageAssets.cs [881:933]
private void WriteMismatchedPlatformPackageVersionMessageIfNecessary()
{
bool hasTwoPeriods(string s)
{
int firstPeriodIndex = s.IndexOf('.');
if (firstPeriodIndex < 0)
{
return false;
}
int secondPeriodIndex = s.IndexOf('.', firstPeriodIndex + 1);
return secondPeriodIndex >= 0;
}
if (_task.VerifyMatchingImplicitPackageVersion &&
_task.ExpectedPlatformPackages != null)
{
foreach (var implicitPackage in _task.ExpectedPlatformPackages)
{
var packageName = implicitPackage.ItemSpec;
var expectedVersion = implicitPackage.GetMetadata(MetadataKeys.Version);
if (string.IsNullOrEmpty(packageName) ||
string.IsNullOrEmpty(expectedVersion) ||
// If RuntimeFrameworkVersion was specified as a version range or a floating version,
// then we can't compare the versions directly, so just skip the check
expectedVersion.IndexOfAny(_specialNuGetVersionChars) >= 0)
{
continue;
}
var restoredPackage = _runtimeTarget.GetLibrary(packageName);
if (restoredPackage != null)
{
var restoredVersion = restoredPackage.Version.ToNormalizedString();
// Normalize expected version. For example, converts "2.0" to "2.0.0"
if (!hasTwoPeriods(expectedVersion))
{
expectedVersion += ".0";
}
if (restoredVersion != expectedVersion)
{
WriteItem(string.Format(Strings.MismatchedPlatformPackageVersion,
packageName,
restoredVersion,
expectedVersion));
WriteMetadata(MetadataKeys.Severity, nameof(LogLevel.Error));
}
}
}
}
}