public Package CreatePackage(Application application, Core.Package source) {
			IEnumerable<Package> existingPackages = this.GetPackages(application);
			PackageContent packageContentInfo;
			try {
				packageContentInfo = this.ExtractPackageInfo(source);
			} catch (AppServerException ex) {
				Logger.Warn(this, ex, "Unable to extract package info");
				throw new InvalidOperationException(ex.Message);
			}
			Package package = new Package { Version = Version.Parse(packageContentInfo.Bootstrapper.Assembly.Version) };
			Logger.Info(this, "Detected package version = " + package.Version);
			if (existingPackages.Any(p => p.Version == package.Version)) throw new InvalidOperationException("Application " + application.Name + " already has a package with version " + package.Version.ToString(4));
			package.Application = application;
			package.File = Path.Combine(this.RootFolder, application.Name, package.Version.ToString(4), source.Source);
			package.Directory = Path.GetDirectoryName(package.File);
			source.SaveAs(package.File);
			return (package);
		}