private static async Task UploadAppToLocalPath(this IServiceFabricClient Client, string imageStore, string imageStorep, ServiceFabricApplicationSpec app)
        {
            var name = app.Manifest.ApplicationTypeName + "." + app.Manifest.ApplicationTypeVersion;

            try
            {
                Symlink.CreateSymbolicLink(Path.Combine(imageStorep, name), app.PackagePath, SymbolicLink.Directory);
                await Client.ApplicationTypes.ProvisionApplicationTypeAsync(new ProvisionApplicationTypeDescription(name), 240, CancellationToken.None);

                Symlink.DeleteIfExists(Path.Combine(imageStorep, name));
            }
            catch (FileNotFoundException)
            {
                Symlink.DeleteIfExists(Path.Combine(imageStorep, name));
                await Client.UploadApp(imageStore, app);
            }
        }
        private static async Task UploadApp(this IServiceFabricClient Client, string imageStore, ServiceFabricApplicationSpec app)
        {
            var name = app.Manifest.ApplicationTypeName + "." + app.Manifest.ApplicationTypeVersion;
            await Client.ImageStore.UploadApplicationPackageAsync(Path.GetFullPath(app.PackagePath), true, name);

            await Client.ApplicationTypes.ProvisionApplicationTypeAsync(new ProvisionApplicationTypeDescription(name), 240);

            if (imageStore == "fabric:ImageStore")
            {
                await Client.ImageStore.DeleteImageStoreContentAsync(name);
            }
            //else
            //{
            //	Directory.Delete(Path.Combine(new Uri(imageStore).LocalPath, name), true);
            //}
        }
        public static async Task DeployServiceFabricApp(this IServiceFabricClient Client, ServiceFabricApplicationSpec app, ILogger Logger = null)
        {
            var serverAppVersions = await Client.Applications.GetApplicationInfoListAsync();

            var deployed = serverAppVersions.Data.FirstOrDefault(sa => sa.Name == "fabric:/" + app.Name);

            if (deployed != null)
            {
                if (deployed.TypeVersion == app.Version)
                {
                    Logger?.LogInfo($"{app.Name} version {app.Version} is already deployed");
                    return;
                }

                var upgradeDescription = new ApplicationUpgradeDescription("fabric:/" + app.Name, app.Version, UpgradeKind.Rolling, app.Parameters, UpgradeMode.Monitored, 15);
                Logger?.LogInfo($"Upgrading app {upgradeDescription.Name} to version {upgradeDescription.TargetApplicationTypeVersion}");
                await Client.Applications.StartApplicationUpgradeAsync(app.Name, upgradeDescription);
            }
            else
            {
                var appDescription = new ApplicationDescription("fabric:/" + app.Name, app.Manifest.ApplicationTypeName, app.Manifest.ApplicationTypeVersion, app.Parameters);

                Logger?.LogInfo($"Creating app {appDescription.Name} with type {appDescription.TypeName} version {appDescription.TypeVersion}");
                Logger?.LogVerbose($"With parameters");
                if (appDescription.Parameters != null)
                {
                    foreach (var parameter in appDescription.Parameters.Keys)
                    {
                        Logger?.LogVerbose($"{parameter} =  {appDescription.Parameters[(string)parameter]}");
                    }
                }

                await Client.Applications.CreateApplicationAsync(appDescription);
            }
        }