private string UploadPackage()
        {
            if (!string.IsNullOrEmpty(this.PackageFileStorageLocation))
            {
                this.LogDebug("Using stored file at location {0}", this.PackageFileStorageLocation);
                return(this.PackageFileStorageLocation);
            }

            try
            {
                this.LogDebug("Preparing to upload file...");
                var account    = new CloudStorageAccount(new StorageCredentials(this.StorageAccountName, this.StorageAccessKey), true);
                var blobClient = account.CreateCloudBlobClient();
                blobClient.SingleBlobUploadThresholdInBytes = 63 * 1024 * 1024;
                var container = blobClient.GetContainerReference(BlobContainer);
                this.LogDebug("Creating container \"{0}\" if it doesn't already exist...", BlobContainer);
                container.CreateIfNotExists();
                string package = this.ResolveDirectory(this.PackageFile);
                if (!File.Exists(package))
                {
                    this.LogError("UploadPackage unable to locate package file at: {0}", package);
                    return(null);
                }
                string blobFileName = Path.GetFileNameWithoutExtension(package) + Guid.NewGuid().ToString() + (Path.HasExtension(package) ? Path.GetExtension(package) : "");
                var    blob         = container.GetBlockBlobReference(blobFileName);
                blob.StreamWriteSizeInBytes = 64 * 1024;
                this.LogInformation("Uploading package {0} to blob file {1} for deployment.", package, blobFileName);

                var transfer = new BlobTransfer(blob);
                transfer.TransferProgressChanged += (s, e) =>
                {
                    this.LogDebug("Upload Progress: {0}/{1} ({2}%) - Est. Time Remaining: {3}", e.BytesSent, e.TotalBytesToSend, e.ProgressPercentage, e.TimeRemaining);
                };
                transfer.TransferCompleted += (s, e) =>
                {
                    this.LogInformation("Package {0} uploaded successfully.", package);
                };

                var result = transfer.UploadBlobAsync(package);

                int handled = WaitHandle.WaitAny(new[] { result.AsyncWaitHandle, this.Context.CancellationToken.WaitHandle });
                if (handled == 1)
                {
                    result.Cancel();
                    this.ThrowIfCanceledOrTimeoutExpired();
                }

                return(blob.Uri.ToString());
            }
            catch (Exception ex)
            {
                this.LogError("UploadPackage error: {0}", ex.ToString());
                return(null);
            }
        }
        private string UploadPackage()
        {
            if (!string.IsNullOrEmpty(this.PackageFileStorageLocation))
            {
                this.LogDebug("Using stored file at location {0}", this.PackageFileStorageLocation);
                return this.PackageFileStorageLocation;
            }

            try
            {
                this.LogDebug("Preparing to upload file...");
                var account = new CloudStorageAccount(new StorageCredentials(this.StorageAccountName, this.StorageAccessKey), true);
                var blobClient = account.CreateCloudBlobClient();
                blobClient.SingleBlobUploadThresholdInBytes = 63 * 1024 * 1024;
                var container = blobClient.GetContainerReference(BlobContainer);
                this.LogDebug("Creating container \"{0}\" if it doesn't already exist...", BlobContainer);
                container.CreateIfNotExists();
                string package = this.ResolveDirectory(this.PackageFile);
                if (!File.Exists(package))
                {
                    this.LogError("UploadPackage unable to locate package file at: {0}", package);
                    return null;
                }
                string blobFileName = Path.GetFileNameWithoutExtension(package) + Guid.NewGuid().ToString() + (Path.HasExtension(package) ? Path.GetExtension(package) : "");
                var blob = container.GetBlockBlobReference(blobFileName);
                blob.StreamWriteSizeInBytes = 64 * 1024;
                this.LogInformation("Uploading package {0} to blob file {1} for deployment.", package, blobFileName);

                var transfer = new BlobTransfer(blob);
                transfer.TransferProgressChanged += (s, e) =>
                {
                    this.LogDebug("Upload Progress: {0}/{1} ({2}%) - Est. Time Remaining: {3}", e.BytesSent, e.TotalBytesToSend, e.ProgressPercentage, e.TimeRemaining);
                };
                transfer.TransferCompleted += (s, e) =>
                {
                    this.LogInformation("Package {0} uploaded successfully.", package);
                };

                var result = transfer.UploadBlobAsync(package);

                int handled = WaitHandle.WaitAny(new[] { result.AsyncWaitHandle, this.Context.CancellationToken.WaitHandle });
                if (handled == 1)
                {
                    result.Cancel();
                    this.ThrowIfCanceledOrTimeoutExpired();
                }

                return blob.Uri.ToString();
            }
            catch (Exception ex)
            {
                this.LogError("UploadPackage error: {0}", ex.ToString());
                return null;
            }
        }