in src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.Utf8JsonStreamReader.cs [749:1130]
private static void ReadMSBuildMetadata(ref Utf8JsonStreamReader jsonReader, PackageSpec packageSpec, IEnvironmentVariableReader environmentVariableReader)
{
var centralPackageVersionsManagementEnabled = false;
var centralPackageVersionOverrideDisabled = false;
var CentralPackageTransitivePinningEnabled = false;
var centralPackageFloatingVersionsEnabled = false;
List<string> configFilePaths = null;
var crossTargeting = false;
List<string> fallbackFolders = null;
List<ProjectRestoreMetadataFile> files = null;
var legacyPackagesDirectory = false;
List<string> originalTargetFrameworks = null;
string outputPath = null;
string packagesConfigPath = null;
string packagesPath = null;
string projectJsonPath = null;
string projectName = null;
string projectPath = null;
ProjectStyle? projectStyle = null;
string projectUniqueName = null;
RestoreLockProperties restoreLockProperties = null;
var skipContentFileWrite = false;
List<PackageSource> sources = null;
IList<ProjectRestoreMetadataFrameworkInfo> targetFrameworks = null;
var validateRuntimeAssets = false;
WarningProperties warningProperties = null;
RestoreAuditProperties auditProperties = null;
bool useMacros = MSBuildStringUtility.IsTrue(environmentVariableReader.GetEnvironmentVariable(MacroStringsUtility.NUGET_ENABLE_EXPERIMENTAL_MACROS));
var userSettingsDirectory = NuGetEnvironment.GetFolderPath(NuGetFolderPath.UserSettingsDirectory);
bool usingMicrosoftNetSdk = true;
NuGetVersion sdkAnalysisLevel = null;
bool useLegacyDependencyResolver = false;
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
{
while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName)
{
if (jsonReader.ValueTextEquals(CentralPackageVersionsManagementEnabledPropertyName))
{
centralPackageVersionsManagementEnabled = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(CentralPackageVersionOverrideDisabledPropertyName))
{
centralPackageVersionOverrideDisabled = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(CentralPackageTransitivePinningEnabledPropertyName))
{
CentralPackageTransitivePinningEnabled = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(CentralPackageFloatingVersionsEnabledPropertyName))
{
centralPackageFloatingVersionsEnabled = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(ConfigFilePathsPropertyName))
{
jsonReader.Read();
configFilePaths = jsonReader.ReadStringArrayAsIList() as List<string>;
ExtractMacros(configFilePaths, userSettingsDirectory, useMacros);
}
else if (jsonReader.ValueTextEquals(CrossTargetingPropertyName))
{
crossTargeting = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(FallbackFoldersPropertyName))
{
jsonReader.Read();
fallbackFolders = jsonReader.ReadStringArrayAsIList() as List<string>;
ExtractMacros(fallbackFolders, userSettingsDirectory, useMacros);
}
else if (jsonReader.ValueTextEquals(FilesPropertyName))
{
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
{
while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName)
{
var filePropertyName = jsonReader.GetString();
files ??= [];
files.Add(new ProjectRestoreMetadataFile(filePropertyName, jsonReader.ReadNextTokenAsString()));
}
}
}
else if (jsonReader.ValueTextEquals(FrameworksPropertyName))
{
targetFrameworks = ReadTargetFrameworks(ref jsonReader);
}
else if (jsonReader.ValueTextEquals(LegacyPackagesDirectoryPropertyName))
{
legacyPackagesDirectory = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(OriginalTargetFrameworksPropertyName))
{
jsonReader.Read();
originalTargetFrameworks = jsonReader.ReadStringArrayAsIList() as List<string>;
}
else if (jsonReader.ValueTextEquals(OutputPathPropertyName))
{
outputPath = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(PackagesConfigPathPropertyName))
{
packagesConfigPath = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(PackagesPathPropertyName))
{
packagesPath = ExtractMacro(jsonReader.ReadNextTokenAsString(), userSettingsDirectory, useMacros);
}
else if (jsonReader.ValueTextEquals(ProjectJsonPathPropertyName))
{
projectJsonPath = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(ProjectNamePropertyName))
{
projectName = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(ProjectPathPropertyName))
{
projectPath = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(ProjectStylePropertyName))
{
string projectStyleString = jsonReader.ReadNextTokenAsString();
if (!string.IsNullOrEmpty(projectStyleString)
&& Enum.TryParse(projectStyleString, ignoreCase: true, result: out ProjectStyle projectStyleValue))
{
projectStyle = projectStyleValue;
}
}
else if (jsonReader.ValueTextEquals(ProjectUniqueNamePropertyName))
{
projectUniqueName = ExtractMacro(jsonReader.ReadNextTokenAsString(), userSettingsDirectory, useMacros);
}
else if (jsonReader.ValueTextEquals(RestoreLockPropertiesPropertyName))
{
string nuGetLockFilePath = null;
var restoreLockedMode = false;
string restorePackagesWithLockFile = null;
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
{
while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName)
{
if (jsonReader.ValueTextEquals(NuGetLockFilePathPropertyName))
{
nuGetLockFilePath = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(RestoreLockedModePropertyName))
{
restoreLockedMode = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(RestorePackagesWithLockFilePropertyName))
{
restorePackagesWithLockFile = jsonReader.ReadNextTokenAsString();
}
else
{
jsonReader.Skip();
}
}
}
restoreLockProperties = new RestoreLockProperties(restorePackagesWithLockFile, nuGetLockFilePath, restoreLockedMode);
}
else if (jsonReader.ValueTextEquals(RestoreAuditPropertiesPropertyName))
{
string enableAudit = null, auditLevel = null, auditMode = null;
HashSet<string> suppressedAdvisories = null;
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
{
while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName)
{
if (jsonReader.ValueTextEquals(EnableAuditPropertyName))
{
enableAudit = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(AuditLevelPropertyName))
{
auditLevel = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(AuditModePropertyName))
{
auditMode = jsonReader.ReadNextTokenAsString();
}
else if (jsonReader.ValueTextEquals(AuditSuppressionsPropertyName))
{
suppressedAdvisories = ReadSuppressedAdvisories(ref jsonReader);
}
else
{
jsonReader.Skip();
}
}
}
auditProperties = new RestoreAuditProperties()
{
EnableAudit = enableAudit,
AuditLevel = auditLevel,
AuditMode = auditMode,
SuppressedAdvisories = suppressedAdvisories,
};
}
else if (jsonReader.ValueTextEquals(SkipContentFileWritePropertyName))
{
skipContentFileWrite = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(SourcesPropertyName))
{
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
{
while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName)
{
var sourcePropertyName = jsonReader.GetString();
sources ??= [];
sources.Add(new PackageSource(sourcePropertyName));
jsonReader.Skip();
}
}
}
else if (jsonReader.ValueTextEquals(ValidateRuntimeAssetsPropertyName))
{
validateRuntimeAssets = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(WarningPropertiesPropertyName))
{
var allWarningsAsErrors = false;
var noWarn = new HashSet<NuGetLogCode>();
var warnAsError = new HashSet<NuGetLogCode>();
var warningsNotAsErrors = new HashSet<NuGetLogCode>();
if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject)
{
while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName)
{
if (jsonReader.ValueTextEquals(AllWarningsAsErrorsPropertyName))
{
allWarningsAsErrors = jsonReader.ReadNextTokenAsBoolOrFalse();
}
else if (jsonReader.ValueTextEquals(NoWarnPropertyName))
{
ReadNuGetLogCodes(ref jsonReader, noWarn);
}
else if (jsonReader.ValueTextEquals(WarnAsErrorPropertyName))
{
ReadNuGetLogCodes(ref jsonReader, warnAsError);
}
else if (jsonReader.ValueTextEquals(WarnNotAsErrorPropertyName))
{
ReadNuGetLogCodes(ref jsonReader, warningsNotAsErrors);
}
else
{
jsonReader.Skip();
}
}
}
warningProperties = new WarningProperties(warnAsError, noWarn, allWarningsAsErrors, warningsNotAsErrors);
}
else if (jsonReader.ValueTextEquals(UsingMicrosoftNETSdk))
{
usingMicrosoftNetSdk = jsonReader.ReadNextTokenAsBoolOrThrowAnException(UsingMicrosoftNETSdk, Strings.Invalid_AttributeValue);
}
else if (jsonReader.ValueTextEquals(SdkAnalysisLevel))
{
string sdkAnalysisLevelString = jsonReader.ReadNextTokenAsString();
if (!string.IsNullOrEmpty(sdkAnalysisLevelString))
{
try
{
sdkAnalysisLevel = new NuGetVersion(sdkAnalysisLevelString);
}
catch (ArgumentException ex)
{
throw new ArgumentException(
string.Format(CultureInfo.CurrentCulture,
Strings.Invalid_AttributeValue,
Encoding.UTF8.GetString(SdkAnalysisLevel),
sdkAnalysisLevelString,
"9.0.100"),
ex);
}
}
}
else if (jsonReader.ValueTextEquals(UseLegacyDependencyResolverPropertyName))
{
useLegacyDependencyResolver = jsonReader.ReadNextTokenAsBoolOrThrowAnException(UseLegacyDependencyResolverPropertyName, Strings.Invalid_AttributeValue);
}
else
{
jsonReader.Skip();
}
}
}
ProjectRestoreMetadata msbuildMetadata;
if (projectStyle == ProjectStyle.PackagesConfig)
{
msbuildMetadata = new PackagesConfigProjectRestoreMetadata()
{
PackagesConfigPath = packagesConfigPath
};
}
else
{
msbuildMetadata = new ProjectRestoreMetadata();
}
msbuildMetadata.CentralPackageVersionsEnabled = centralPackageVersionsManagementEnabled;
msbuildMetadata.CentralPackageVersionOverrideDisabled = centralPackageVersionOverrideDisabled;
msbuildMetadata.CentralPackageTransitivePinningEnabled = CentralPackageTransitivePinningEnabled;
msbuildMetadata.CentralPackageFloatingVersionsEnabled = centralPackageFloatingVersionsEnabled;
msbuildMetadata.RestoreAuditProperties = auditProperties;
msbuildMetadata.SdkAnalysisLevel = sdkAnalysisLevel;
msbuildMetadata.UsingMicrosoftNETSdk = usingMicrosoftNetSdk;
msbuildMetadata.UseLegacyDependencyResolver = useLegacyDependencyResolver;
if (configFilePaths != null)
{
msbuildMetadata.ConfigFilePaths = configFilePaths;
}
msbuildMetadata.CrossTargeting = crossTargeting;
if (fallbackFolders != null)
{
msbuildMetadata.FallbackFolders = fallbackFolders;
}
if (files != null)
{
msbuildMetadata.Files = files;
}
msbuildMetadata.LegacyPackagesDirectory = legacyPackagesDirectory;
if (originalTargetFrameworks != null)
{
msbuildMetadata.OriginalTargetFrameworks = originalTargetFrameworks;
}
msbuildMetadata.OutputPath = outputPath;
msbuildMetadata.PackagesPath = packagesPath;
msbuildMetadata.ProjectJsonPath = projectJsonPath;
msbuildMetadata.ProjectName = projectName;
msbuildMetadata.ProjectPath = projectPath;
if (projectStyle.HasValue)
{
msbuildMetadata.ProjectStyle = projectStyle.Value;
}
msbuildMetadata.ProjectUniqueName = projectUniqueName;
if (restoreLockProperties != null)
{
msbuildMetadata.RestoreLockProperties = restoreLockProperties;
}
msbuildMetadata.SkipContentFileWrite = skipContentFileWrite;
if (sources != null)
{
msbuildMetadata.Sources = sources;
}
if (targetFrameworks != null)
{
msbuildMetadata.TargetFrameworks = targetFrameworks;
}
msbuildMetadata.ValidateRuntimeAssets = validateRuntimeAssets;
if (warningProperties != null)
{
msbuildMetadata.ProjectWideWarningProperties = warningProperties;
}
packageSpec.RestoreMetadata = msbuildMetadata;
}