internal NugetPackage(PackageScript packageScript, PackageRole packageRole, string packageName)
        {
            _packageScript = packageScript;
            _pkgName       = packageName;
            PkgRole        = packageRole;

            Props   = new Lazy <ProjectPlus>(() => new ProjectPlus(this, "{0}.props".format(_pkgName)));
            Targets = new Lazy <ProjectPlus>(() => new ProjectPlus(this, "{0}.targets".format(_pkgName)));

            // Acquire semaphore because executing any tasks in the AfterBuild step of the package.
            // This prevents errors when multiple consumers of the package try to copy package
            // redistributables to the same destination. (see release in the Save method)
            if (packageRole == PackageRole.@default)   // not needed in the overlay package
            {
                var semaphore = Targets.Value.LookupTarget("AfterBuild").AddTask("AcquireSemaphore");
                semaphore.SetParameter("Name", "Sync_AfterBuild_" + _pkgName);
                semaphore.AddOutputProperty("Handle", "SemaphoreHandle");
            }

            _nuSpec.metadata.id      = "Package";
            _nuSpec.metadata.version = "1.0.0";
            // _nuSpec.metadata.authors = "NAME";
            // _nuSpec.metadata.owners = "NAME";
            // _nuSpec.metadata.licenseUrl = "http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.projectUrl = "http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.iconUrl = "http://ICON_URL_HERE_OR_DELETE_THIS_LINE";
            _nuSpec.metadata.requireLicenseAcceptance = "false";
            // _nuSpec.metadata.description = "Package description";
            // _nuSpec.metadata.releaseNotes = "Summary of changes made in this release of the package.";
            // _nuSpec.metadata.copyright = "Copyright 2013";
        }
        internal NugetPackage(PackageScript packageScript, PackageRole packageRole, string packageName)
        {
            _packageScript = packageScript;
            _pkgName       = packageName;
            PkgRole        = packageRole;

            Props   = new Lazy <ProjectPlus>(() => new ProjectPlus(this, "{0}.props".format(_pkgName)));
            Targets = new Lazy <ProjectPlus>(() => new ProjectPlus(this, "{0}.targets".format(_pkgName)));

            _nuSpec.metadata.id      = "Package";
            _nuSpec.metadata.version = "1.0.0";
            // _nuSpec.metadata.authors = "NAME";
            // _nuSpec.metadata.owners = "NAME";
            // _nuSpec.metadata.licenseUrl = "http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.projectUrl = "http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.iconUrl = "http://ICON_URL_HERE_OR_DELETE_THIS_LINE";
            _nuSpec.metadata.requireLicenseAcceptance = "false";
            // _nuSpec.metadata.description = "Package description";
            // _nuSpec.metadata.releaseNotes = "Summary of changes made in this release of the package.";
            // _nuSpec.metadata.copyright = "Copyright 2013";
        }
        internal NugetPackage(PackageScript packageScript, PackageRole packageRole, string packageName)
        {
            _packageScript = packageScript;
            _pkgName = packageName;
            PkgRole = packageRole;
           
            Props = new Lazy<ProjectPlus>(() => new ProjectPlus(this, "{0}.props".format(_pkgName)));
            Targets = new Lazy<ProjectPlus>(() => new ProjectPlus(this, "{0}.targets".format(_pkgName)));

            // Acquire semaphore because executing any tasks in the AfterBuild step of the package.
            // This prevents errors when multiple consumers of the package try to copy package
            // redistributables to the same destination. (see release in the Save method)
            if (packageRole == PackageRole.@default) { // not needed in the overlay package
                var semaphore = Targets.Value.LookupTarget("AfterBuild").AddTask("AcquireSemaphore");
                semaphore.SetParameter("Name", "Sync_AfterBuild_" + _pkgName);
                semaphore.AddOutputProperty("Handle", "SemaphoreHandle");
            }

            _nuSpec.metadata.id = "Package";
            _nuSpec.metadata.version = "1.0.0";
            // _nuSpec.metadata.authors = "NAME";
            // _nuSpec.metadata.owners = "NAME";
            // _nuSpec.metadata.licenseUrl = "http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.projectUrl = "http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.iconUrl = "http://ICON_URL_HERE_OR_DELETE_THIS_LINE";
            _nuSpec.metadata.requireLicenseAcceptance = "false";
            // _nuSpec.metadata.description = "Package description";
            // _nuSpec.metadata.releaseNotes = "Summary of changes made in this release of the package.";
            // _nuSpec.metadata.copyright = "Copyright 2013";
        }
        internal NugetPackage(PackageScript packageScript, PackageRole packageRole, string packageName)
        {
            _packageScript = packageScript;
            _pkgName = packageName;
            PkgRole = packageRole;
           
            Props = new Lazy<ProjectPlus>(() => new ProjectPlus(this, "{0}.props".format(_pkgName)));
            Targets = new Lazy<ProjectPlus>(() => new ProjectPlus(this, "{0}.targets".format(_pkgName)));

            _nuSpec.metadata.id = "Package";
            _nuSpec.metadata.version = "1.0.0";
            // _nuSpec.metadata.authors = "NAME";
            // _nuSpec.metadata.owners = "NAME";
            // _nuSpec.metadata.licenseUrl = "http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.projectUrl = "http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE";
            // _nuSpec.metadata.iconUrl = "http://ICON_URL_HERE_OR_DELETE_THIS_LINE";
            _nuSpec.metadata.requireLicenseAcceptance = "false";
            // _nuSpec.metadata.description = "Package description";
            // _nuSpec.metadata.releaseNotes = "Summary of changes made in this release of the package.";
            // _nuSpec.metadata.copyright = "Copyright 2013";
        }