private static SdkResolverManifest ParseSdkResolverElement(XmlReader reader) { SdkResolverManifest manifest = new SdkResolverManifest(); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: { manifest.Path = reader.Name switch { "Path" => reader.ReadElementContentAsString(), _ => throw new XmlException(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("UnrecognizedElement", reader.Name)), }; } break; default: throw new XmlException(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("UnrecognizedElement", reader.Name)); } } return(manifest); }
internal void InitializeForTests(SdkResolverLoader resolverLoader = null, IList <SdkResolver> resolvers = null) { if (resolverLoader != null) { _sdkResolverLoader = resolverLoader; } _specificResolversManifestsRegistry = null; _generalResolversManifestsRegistry = null; _manifestToResolvers = null; _resolversList = null; if (resolvers != null) { if (ChangeWaves.AreFeaturesEnabled(ChangeWaves.Wave17_4)) { _specificResolversManifestsRegistry = new List <SdkResolverManifest>(); _generalResolversManifestsRegistry = new List <SdkResolverManifest>(); _manifestToResolvers = new Dictionary <SdkResolverManifest, IList <SdkResolver> >(); SdkResolverManifest sdkResolverManifest = new SdkResolverManifest(DisplayName: "TestResolversManifest", Path: null, ResolvableSdkRegex: null); _generalResolversManifestsRegistry.Add(sdkResolverManifest); _manifestToResolvers[sdkResolverManifest] = resolvers; } else { _resolversList = resolvers; } } }
private static SdkResolverManifest ParseSdkResolverElement(XmlReader reader, string filePath) { SdkResolverManifest manifest = new SdkResolverManifest(); manifest.DisplayName = filePath; reader.Read(); while (!reader.EOF) { switch (reader.NodeType) { case XmlNodeType.Element: { switch (reader.Name) { case "Path": manifest.Path = reader.ReadElementContentAsString(); break; case "ResolvableSdkPattern": string pattern = reader.ReadElementContentAsString(); try { manifest.ResolvableSdkRegex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.CultureInvariant, TimeSpan.FromMilliseconds(SdkResolverPatternRegexTimeoutMsc)); } catch (ArgumentException ex) { ErrorUtilities.ThrowInternalError("A regular expression parsing error occurred while parsing {0}.", ex, filePath); } break; default: throw new XmlException(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("UnrecognizedElement", reader.Name)); } break; } case XmlNodeType.EndElement: reader.Read(); break; default: throw new XmlException(ResourceUtilities.FormatResourceStringStripCodeAndKeyword("UnrecognizedElement", reader.Name)); } } return(manifest); }
private void RegisterResolversManifests(LoggingContext loggingContext, ElementLocation location) { lock (_lockObject) { if (_specificResolversManifestsRegistry != null && _generalResolversManifestsRegistry != null) { return; } MSBuildEventSource.Log.SdkResolverServiceFindResolversManifestsStart(); var allResolversManifests = _sdkResolverLoader.GetResolversManifests(loggingContext, location); _manifestToResolvers = new Dictionary <SdkResolverManifest, IList <SdkResolver> >(); // Load and add the manifest for the default resolvers, located directly in this dll. IList <SdkResolver> defaultResolvers = _sdkResolverLoader.GetDefaultResolvers(loggingContext, location); if (defaultResolvers.Count > 0) { MSBuildEventSource.Log.SdkResolverServiceLoadResolversStart(); SdkResolverManifest sdkDefaultResolversManifest = new SdkResolverManifest(DisplayName: "DefaultResolversManifest", Path: null, ResolvableSdkRegex: null); allResolversManifests.Add(sdkDefaultResolversManifest); _manifestToResolvers[sdkDefaultResolversManifest] = defaultResolvers; MSBuildEventSource.Log.SdkResolverServiceLoadResolversStop(sdkDefaultResolversManifest.DisplayName, defaultResolvers.Count); } MSBuildEventSource.Log.SdkResolverServiceFindResolversManifestsStop(allResolversManifests.Count); // Break the list of all resolvers manifests into two parts: manifests with specific and general resolvers. _specificResolversManifestsRegistry = new List <SdkResolverManifest>(); _generalResolversManifestsRegistry = new List <SdkResolverManifest>(); foreach (SdkResolverManifest manifest in allResolversManifests) { if (manifest.ResolvableSdkRegex == null) { _generalResolversManifestsRegistry.Add(manifest); } else { _specificResolversManifestsRegistry.Add(manifest); } } } }
private bool TryAddAssemblyFromManifest(string pathToManifest, string manifestFolder, List <string> assembliesList, ElementLocation location) { if (!string.IsNullOrEmpty(pathToManifest) && !FileUtilities.FileExistsNoThrow(pathToManifest)) { return(false); } string path = null; try { // <SdkResolver> // <Path>...</Path> // </SdkResolver> var manifest = SdkResolverManifest.Load(pathToManifest); if (manifest == null || string.IsNullOrEmpty(manifest.Path)) { ProjectFileErrorUtilities.ThrowInvalidProjectFile(new BuildEventFileInfo(location), "SdkResolverDllInManifestMissing", pathToManifest, string.Empty); } path = FileUtilities.FixFilePath(manifest.Path); } catch (XmlException e) { // Note: Not logging e.ToString() as most of the information is not useful, the Message will contain what is wrong with the XML file. ProjectFileErrorUtilities.ThrowInvalidProjectFile(new BuildEventFileInfo(location), e, "SdkResolverManifestInvalid", pathToManifest, e.Message); } if (!Path.IsPathRooted(path)) { path = Path.Combine(manifestFolder, path); path = Path.GetFullPath(path); } if (!TryAddAssembly(path, assembliesList)) { ProjectFileErrorUtilities.ThrowInvalidProjectFile(new BuildEventFileInfo(location), "SdkResolverDllInManifestMissing", pathToManifest, path); } return(true); }