/// <summary>Gets the existing or creates a new configuration file.</summary>
        /// <param name="project">The project.</param>
        /// <param name="isRetry">if set to <c>true</c> [is retry].</param>
        /// <returns>Configuration file.</returns>
        public static SpklConfig GetSpklConfigFile(Project project, bool isRetry = false)
        {
            var projectPath = ProjectWorker.GetProjectPath(project);
            var path = Path.Combine(projectPath, ExtensionConstants.SpklConfigFile);

            ExLogger.LogToFile(Logger, $"{Resource.Message_ReadingFile}: {path}", LogLevel.Info);

            try
            {
                SpklConfig spklConfig;
                using (var file = File.OpenText(path))
                {
                    var serializer = new JsonSerializer();
                    spklConfig = (SpklConfig)serializer.Deserialize(file, typeof(SpklConfig));
                }

                return spklConfig;
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(Logger, $"{Resource.ErrorMessage_UnableReadDeserializeConfig}: {path}", ex);
                MessageBox.Show($"{Resource.ErrorMessage_UnableReadDeserializeConfig}: {path}");

                if (!isRetry)
                    return RecreateConfig(project, path);

                throw;
            }
        }
        /// <summary>  Retrieves NuGet package info.</summary>
        /// <param name="packageId">The NuGet package identifier.</param>
        /// <returns>List of NuGet packages.</returns>
        public static List <NuGetPackage> GetPackagesById(string packageId)
        {
            try
            {
                ExLogger.LogToFile(Logger, $"{Resources.Resource.Message_RetrievingNuGetpackage}: {packageId}", LogLevel.Info);

                var packages = GetPackages(packageId);

                var results = new List <NuGetPackage>();
                foreach (var package in packages)
                {
                    if (package.Published != null && package.Published.Value.Year == 1900)
                    {
                        continue;
                    }

                    results.Add(CreateNuGetPackage(package));
                }

                ExLogger.LogToFile(Logger, $"Found {results.Count} packages", LogLevel.Info);

                return(new List <NuGetPackage>(results.OrderByDescending(v => v.Version)));
            }
            catch (Exception e)
            {
                ExceptionHandler.LogException(Logger, $"{Resources.Resource.ErrorMessage_FailedretrievingNuGetpackage}: {packageId}", e);
                throw;
            }
        }
        private static List <IPackage> GetPackages(string packageId)
        {
            ExLogger.LogToFile(Logger, $"{Resources.Resource.Message_UsingNuGetAPIurl}: {ExtensionConstants.NuGetApiUrl}", LogLevel.Info);

            var repo     = PackageRepositoryFactory.Default.CreateRepository(ExtensionConstants.NuGetApiUrl);
            var packages = repo.FindPackagesById(packageId).ToList();

            return(packages);
        }
        private static void WriteSpklConfigFile(string projectPath, string text)
        {
            var path = Path.Combine(projectPath, ExtensionConstants.SpklConfigFile);

            ExLogger.LogToFile(Logger, $"{Resource.Message_UpdatingFile}: {path}", LogLevel.Info);

            try
            {
                File.WriteAllText(path, text);
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(Logger, $"{Resource.ErrorMessage_UnableWriteConfig}: {path}", ex);
                MessageBox.Show($"{Resource.ErrorMessage_UnableWriteConfig}: {path}");
            }
        }
        /// <summary>Creates a new configuration file.</summary>
        /// <param name="project">The project.</param>
        public static void CreateSpklConfigFile(Project project)
        {
            ExLogger.LogToFile(Logger, $"{Resource.Message_CreatingFile}: {ExtensionConstants.SpklConfigFile}", LogLevel.Info);

            TemplateHandler.AddFileFromTemplate(project, "CSharpSpklConfig\\CSharpSpklConfig", ExtensionConstants.SpklConfigFile);
        }