コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }