in src/NuGet.Core/NuGet.Commands/RestoreCommand/RestoreCommand.cs [1019:1173]
private bool AreCentralVersionRequirementsSatisfied(RestoreRequest restoreRequest, int httpSourcesCount)
{
if (restoreRequest?.Project?.RestoreMetadata == null || !restoreRequest.Project.RestoreMetadata.CentralPackageVersionsEnabled)
{
return true;
}
bool result = true;
if (!restoreRequest.PackageSourceMapping.IsEnabled && httpSourcesCount > 1)
{
// Log a warning if there are more than one configured HTTP source and package source mapping is not enabled
_logger.Log(
RestoreLogMessage.CreateWarning(
NuGetLogCode.NU1507,
string.Format(
CultureInfo.CurrentCulture,
Strings.Warning_CentralPackageManagement_MultipleSourcesWithoutPackageSourceMapping,
httpSourcesCount,
string.Join(", ", restoreRequest.DependencyProviders.RemoteProviders.Where(i => i.IsHttp).Select(i => i.Source.Name)))));
}
List<CentralPackageVersion> packageVersionItemsWithFloatingVersion = null;
List<LibraryDependency> implicitPackageReferenceItemsWithPackageVersion = null;
List<LibraryDependency> packageReferenceItemsWithNoPackageVersion = null;
List<LibraryDependency> packageReferenceItemsWithVersion = null;
List<LibraryDependency> packageReferenceItemsWithVersionOverride = null;
foreach (TargetFrameworkInformation targetFrameworkInformation in _request.Project.TargetFrameworks)
{
foreach (LibraryDependency libraryDependency in targetFrameworkInformation.Dependencies)
{
if (libraryDependency.AutoReferenced)
{
// Implicitly defined packages that the user specified a version for
if (targetFrameworkInformation.CentralPackageVersions.ContainsKey(libraryDependency.Name))
{
implicitPackageReferenceItemsWithPackageVersion ??= new();
implicitPackageReferenceItemsWithPackageVersion.Add(libraryDependency);
}
}
else
{
// VersionOverride is specified but that functionality is disabled
if (restoreRequest.Project.RestoreMetadata.CentralPackageVersionOverrideDisabled && libraryDependency.VersionOverride != null)
{
packageReferenceItemsWithVersionOverride ??= new();
packageReferenceItemsWithVersionOverride.Add(libraryDependency);
}
// Dependencies that have a version specified
if (!libraryDependency.VersionCentrallyManaged && libraryDependency.LibraryRange.VersionRange != null && libraryDependency.VersionOverride == null)
{
packageReferenceItemsWithVersion ??= new();
packageReferenceItemsWithVersion.Add(libraryDependency);
}
// Dependencies that have no version specified
if (libraryDependency.LibraryRange?.VersionRange == null)
{
packageReferenceItemsWithNoPackageVersion ??= new();
packageReferenceItemsWithNoPackageVersion.Add(libraryDependency);
}
}
}
if (!restoreRequest.Project.RestoreMetadata.CentralPackageFloatingVersionsEnabled)
{
foreach (KeyValuePair<string, CentralPackageVersion> centralPackageVersion in targetFrameworkInformation.CentralPackageVersions.NoAllocEnumerate())
{
// Floating version dependencies
if (centralPackageVersion.Value.VersionRange.IsFloating)
{
packageVersionItemsWithFloatingVersion ??= new();
packageVersionItemsWithFloatingVersion.Add(centralPackageVersion.Value);
}
}
}
}
if (packageReferenceItemsWithVersion != null && packageReferenceItemsWithVersion.Count > 0)
{
result = false;
_logger.Log(
RestoreLogMessage.CreateError(
NuGetLogCode.NU1008,
string.Format(
CultureInfo.CurrentCulture,
Strings.Error_CentralPackageManagement_PackageReferenceWithVersionNotAllowed,
string.Join(", ", packageReferenceItemsWithVersion.Select(d => d.Name)))));
}
if (implicitPackageReferenceItemsWithPackageVersion != null && implicitPackageReferenceItemsWithPackageVersion.Count > 0)
{
result = false;
_logger.Log(
RestoreLogMessage.CreateError(
NuGetLogCode.NU1009,
string.Format(
CultureInfo.CurrentCulture,
Strings.Error_CentralPackageManagement_ImplicitPackageReferenceWithVersionNotAllowed,
string.Join(", ", implicitPackageReferenceItemsWithPackageVersion.Select(d => d.Name)))));
}
if (packageReferenceItemsWithNoPackageVersion != null && packageReferenceItemsWithNoPackageVersion.Count > 0)
{
result = false;
_logger.Log(
RestoreLogMessage.CreateError(
NuGetLogCode.NU1010,
string.Format(
CultureInfo.CurrentCulture,
Strings.Error_CentralPackageManagement_MissingPackageVersion,
string.Join(", ", packageReferenceItemsWithNoPackageVersion.Select(d => d.Name)))));
}
if (packageVersionItemsWithFloatingVersion != null && packageVersionItemsWithFloatingVersion.Count > 0)
{
result = false;
_logger.Log(
RestoreLogMessage.CreateError(
NuGetLogCode.NU1011,
string.Format(
CultureInfo.CurrentCulture,
Strings.Error_CentralPackageManagement_FloatingVersionsNotAllowed,
string.Join(", ", packageVersionItemsWithFloatingVersion.Select(i => i.Name)))));
}
if (packageReferenceItemsWithVersionOverride != null && packageReferenceItemsWithVersionOverride.Count > 0)
{
result = false;
foreach (var item in packageReferenceItemsWithVersionOverride)
{
_logger.Log(
RestoreLogMessage.CreateError(
NuGetLogCode.NU1013,
string.Format(
CultureInfo.CurrentCulture,
Strings.Error_CentralPackageManagement_VersionOverrideNotAllowed,
item.Name)));
}
}
return result;
}