diff --git a/.gitignore b/.gitignore
index 3584f85..3f981ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
deploy_key
-common/
\ No newline at end of file
+common/
+bin/
+obj/
\ No newline at end of file
diff --git a/tools/PrintSupportedFrameworks/PrintSupportedFrameworks.csproj b/tools/PrintSupportedFrameworks/PrintSupportedFrameworks.csproj
new file mode 100644
index 0000000..dde1549
--- /dev/null
+++ b/tools/PrintSupportedFrameworks/PrintSupportedFrameworks.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/tools/PrintSupportedFrameworks/PrintSupportedFrameworks.sln b/tools/PrintSupportedFrameworks/PrintSupportedFrameworks.sln
new file mode 100644
index 0000000..a954d53
--- /dev/null
+++ b/tools/PrintSupportedFrameworks/PrintSupportedFrameworks.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.002.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrintSupportedFrameworks", "PrintSupportedFrameworks.csproj", "{0A236E75-BDE9-4A8F-9A1A-C12531524B41}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0A236E75-BDE9-4A8F-9A1A-C12531524B41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0A236E75-BDE9-4A8F-9A1A-C12531524B41}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0A236E75-BDE9-4A8F-9A1A-C12531524B41}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0A236E75-BDE9-4A8F-9A1A-C12531524B41}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {DD42DDA9-CCB7-4CCF-80B5-207B1A7EDD58}
+ EndGlobalSection
+EndGlobal
diff --git a/tools/PrintSupportedFrameworks/Program.cs b/tools/PrintSupportedFrameworks/Program.cs
new file mode 100644
index 0000000..dc8b7d3
--- /dev/null
+++ b/tools/PrintSupportedFrameworks/Program.cs
@@ -0,0 +1,60 @@
+using System.Text;
+using NuGet.Common;
+using NuGet.Protocol;
+using NuGet.Protocol.Core.Types;
+
+//string packageName = "GroupDocs.Viewer";
+string packageName = "GroupDocs.Viewer.CrossPlatform";
+
+ILogger logger = NullLogger.Instance;
+CancellationToken cancellationToken = CancellationToken.None;
+
+SourceCacheContext cache = new SourceCacheContext();
+SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
+PackageMetadataResource resource = await repository.GetResourceAsync();
+
+IEnumerable packages = await resource.GetMetadataAsync(
+ packageName,
+ includePrerelease: false,
+ includeUnlisted: false,
+ cache,
+ logger,
+ cancellationToken);
+
+StringBuilder mdTable = new StringBuilder();
+mdTable.AppendLine("| Package version | Target frameworks |");
+mdTable.AppendLine("| --- | --- |");
+
+foreach (IPackageSearchMetadata package in packages.OrderByDescending(p => p.Published))
+{
+ //Console.WriteLine($"Version: {package.Identity.Version}");
+ //Console.WriteLine($"Description: {package.Published}");
+ //Console.WriteLine("Dependencies:");
+ //foreach (var dependencyGroup in package.DependencySets)
+ //{
+ // Console.WriteLine($" {dependencyGroup.TargetFramework.GetShortFolderName()}");
+ //}
+
+ var frameworks = package
+ .DependencySets
+ .Select(d => d.TargetFramework.GetShortFolderName())
+ .Select(d => d
+ .Replace("net20", ".NET Framework 2.0")
+ .Replace("net40", ".NET Framework 4.0")
+ .Replace("net462", ".NET Frameword 4.6.2")
+ .Replace("net6.0", ".NET 6.0")
+ .Replace("netstandard2.0", ".NET Standard 2.0")
+ .Replace("netstandard2.1", ".NET Standard 2.1")
+ );
+
+ string frameworksJoined = string.Join(", ", frameworks);
+ if (string.IsNullOrEmpty(frameworksJoined))
+ {
+ frameworksJoined = ".NET Framework 2.0";
+ }
+
+ string line = $"| [{package.Identity.Version}](https://www.nuget.org/packages/{packageName}/{package.Identity.Version}) | {frameworksJoined} |";
+ mdTable.AppendLine(line);
+}
+
+Console.WriteLine(mdTable.ToString());