/// <summary> /// Update the project in-memory state. /// </summary> /// <param name="xml"> /// The project XML. /// </param> /// <param name="cancellationToken"> /// An optional <see cref="CancellationToken"/> that can be used to cancel the operation. /// </param> /// <returns> /// A task representing the update operation. /// </returns> public virtual async Task Update(string xml, CancellationToken cancellationToken = default) { if (xml == null) { throw new ArgumentNullException(nameof(xml)); } ClearDiagnostics(); Xml = Parser.ParseText(xml); XmlPositions = new TextPositions(xml); XmlLocator = new XmlLocator(Xml, XmlPositions); IsDirty = true; bool loaded = TryLoadMSBuildProject(); if (loaded) { MSBuildLocator = new MSBuildObjectLocator(MSBuildProject, XmlLocator, XmlPositions); } else { MSBuildLocator = null; } IsMSBuildProjectCached = !loaded; await UpdatePackageReferences(cancellationToken); }
/// <summary> /// Load and parse the project. /// </summary> /// <param name="cancellationToken"> /// An optional <see cref="CancellationToken"/> that can be used to cancel the operation. /// </param> /// <returns> /// A task representing the load operation. /// </returns> public virtual async Task Load(CancellationToken cancellationToken = default(CancellationToken)) { ClearDiagnostics(); Xml = null; XmlPositions = null; XmlLocator = null; string xml; using (StreamReader reader = ProjectFile.OpenText()) { xml = await reader.ReadToEndAsync(); } Xml = Parser.ParseText(xml); XmlPositions = new TextPositions(xml); XmlLocator = new XmlLocator(Xml, XmlPositions); IsDirty = false; await ConfigurePackageSources(cancellationToken); bool loaded = TryLoadMSBuildProject(); if (loaded) { MSBuildLocator = new MSBuildObjectLocator(MSBuildProject, XmlLocator, XmlPositions); } else { MSBuildLocator = null; } IsMSBuildProjectCached = !loaded; await UpdatePackageReferences(cancellationToken); }