public override void OnPostprocessBuild(AppConfig appConfig, BuildReport buildReport)
        {
            var uploadToAzureSettings = appConfig.GetSettings <UploadAddressableToAzureSettings>();

            var azureConfig = new AzureStorage.Config
            {
                StorageAccountName = uploadToAzureSettings.storageAccountName,
                StorageAccountKey  = uploadToAzureSettings.storageAccountKey,
                ContainerName      = uploadToAzureSettings.containerName,
            };

            // makding sure the asset bundle path doesn't end with a forward slash
            string assetBundlePath = uploadToAzureSettings.CalculateBuildPath();

            if (Directory.Exists(assetBundlePath) == false)
            {
                if (this.IsBeingUsedByAddressableSystem())
                {
                    Debug.LogErrorFormat("Unable to Upload AssetBundles To Azure.  Directory {0} does not exist.", assetBundlePath);
                }

                return;
            }

            string           blobPrefix    = GetBlobPrefix(uploadToAzureSettings);
            HashSet <string> existingFiles = GetExistingFiles(azureConfig, blobPrefix);

            foreach (var filePath in Directory.GetFiles(assetBundlePath, "*", SearchOption.AllDirectories))
            {
                string relativeFileName = filePath.Substring(assetBundlePath.Length + 1).Replace("\\", "/");
                string blobName         = blobPrefix + "/" + relativeFileName;

                if (existingFiles.Contains(blobName))
                {
                    Debug.LogFormat("Skipping AssetBundle {0}, it already exists", blobName, azureConfig.StorageAccountName);
                    continue;
                }

                Debug.LogFormat("Uploading AssetBundle {0}", blobName, azureConfig.StorageAccountName);

                try
                {
                    AzureStorage.UploadFile(azureConfig, blobName, File.ReadAllBytes(filePath));
                }
                catch (Exception exception)
                {
                    Debug.LogErrorFormat("Error uploading AssetBundle {0} To Azure.", blobName);
                    Debug.LogException(exception);

                    #if UNITY_CLOUD_BUILD
                    EditorApplication.Exit(1);
                    #endif

                    return;
                }
            }
        }
        private static HashSet <string> GetExistingFiles(AzureStorage.Config azureConfig, string blobPrefix)
        {
            HashSet <string> result = new HashSet <string>();

            if (blobPrefix.EndsWith("/") == false)
            {
                blobPrefix += "/";
            }

            foreach (string file in AzureStorage.ListFiles(azureConfig, blobPrefix))
            {
                result.Add(file);
            }

            return(result);
        }