/// <summary>
        /// Occurs after a project item finished being generated.
        /// </summary>
        /// <param name="projectItem">The generated <see cref="ProjectItem">project item</see>.</param>
        public override void ProjectItemFinishedGenerating( ProjectItem projectItem )
        {
            if ( projectItem == null )
                return;

            var writer = new ManifestExtensionWriter( Context );
            writer.ApplyExtensions( projectItem.ContainingProject, key => GetBoolean( key, false ) );
        }
        private void ApplyManifestExtensions( Project project )
        {
            Contract.Requires( project != null );

            // must have enabled extensions
            if ( !GetBoolean( "$hasExtensions$" ) )
                return;

            var writer = new ManifestExtensionWriter( Context );
            writer.ApplyExtensions( project, key => GetBoolean( key, false ) );
        }