diff --git a/.idea/.idea.aeqw89.tools.Publish/.idea/.gitignore b/.idea/.idea.aeqw89.tools.Publish/.idea/.gitignore
deleted file mode 100644
index 2784543..0000000
--- a/.idea/.idea.aeqw89.tools.Publish/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/projectSettingsUpdater.xml
-/.idea.aeqw89.tools.Publish.iml
-/modules.xml
-/contentModel.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/.idea.aeqw89.tools.Publish/.idea/encodings.xml b/.idea/.idea.aeqw89.tools.Publish/.idea/encodings.xml
deleted file mode 100644
index df87cf9..0000000
--- a/.idea/.idea.aeqw89.tools.Publish/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.aeqw89.tools.Publish/.idea/indexLayout.xml b/.idea/.idea.aeqw89.tools.Publish/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163..0000000
--- a/.idea/.idea.aeqw89.tools.Publish/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.aeqw89.tools.Publish/.idea/vcs.xml b/.idea/.idea.aeqw89.tools.Publish/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/.idea.aeqw89.tools.Publish/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/aeqw89.tools.Publish.sln b/aeqw89.tools.Publish.sln
deleted file mode 100644
index 5edac2c..0000000
--- a/aeqw89.tools.Publish.sln
+++ /dev/null
@@ -1,16 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aeqw89.tools.Publish", "aeqw89.tools.Publish\aeqw89.tools.Publish.csproj", "{B7F78AEB-BAC3-4D34-A655-BC0B5677EA42}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {B7F78AEB-BAC3-4D34-A655-BC0B5677EA42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B7F78AEB-BAC3-4D34-A655-BC0B5677EA42}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B7F78AEB-BAC3-4D34-A655-BC0B5677EA42}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B7F78AEB-BAC3-4D34-A655-BC0B5677EA42}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/aeqw89.tools.Publish.sln.DotSettings.user b/aeqw89.tools.Publish.sln.DotSettings.user
deleted file mode 100644
index 57d78f9..0000000
--- a/aeqw89.tools.Publish.sln.DotSettings.user
+++ /dev/null
@@ -1,15 +0,0 @@
-
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- True
- True
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/.gitignore b/aeqw89.tools.Publish/.gitignore
deleted file mode 100644
index e69de29..0000000
diff --git a/aeqw89.tools.Publish/Content.cs b/aeqw89.tools.Publish/Content.cs
deleted file mode 100644
index 03a7e7a..0000000
--- a/aeqw89.tools.Publish/Content.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal sealed class Content : Item {
- public Content(XmlElement node) : base(node) { }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/Exceptions.Designer.cs b/aeqw89.tools.Publish/Exceptions.Designer.cs
deleted file mode 100644
index ce608e7..0000000
--- a/aeqw89.tools.Publish/Exceptions.Designer.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace aeqw89.tools.Publish {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Exceptions {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Exceptions() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("aeqw89.tools.Publish.Exceptions", typeof(Exceptions).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to The cloud host '{0}' is not an entry on this user's config file..
- ///
- internal static string cloud_host_not_found {
- get {
- return ResourceManager.GetString("cloud_host_not_found", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The mode '{0}' is invalid, the valid modes are [overwrite|increment].
- ///
- internal static string could_not_parse_mode {
- get {
- return ResourceManager.GetString("could_not_parse_mode", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The increment target '{0}' is invalid, the valid increment targets are [patch|minor|patch].
- ///
- internal static string could_not_parse_target {
- get {
- return ResourceManager.GetString("could_not_parse_target", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The 'dotnet nuget push' command failed with error message '{0}'.
- ///
- internal static string dotnet_nuget_push_failure {
- get {
- return ResourceManager.GetString("dotnet_nuget_push_failure", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed to pack; ensure that 'dotnet build' succeeds before running this program..
- ///
- internal static string dotnet_pack_failure {
- get {
- return ResourceManager.GetString("dotnet_pack_failure", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Could not delete temporary directory '{0}' due to error '{1}'.
- ///
- internal static string failed_to_clean_up {
- get {
- return ResourceManager.GetString("failed_to_clean_up", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failde to prepare an upload directory on the path {0} for the remote host '{1}', after being detected as a {2} host. Server error is '{3}'.
- ///
- internal static string failed_to_prepare_server_directory {
- get {
- return ResourceManager.GetString("failed_to_prepare_server_directory", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The flag '{0}' requires exactly '{1}' parameters. You have entered '{2}'..
- ///
- internal static string flag_parameter_length_incorrect {
- get {
- return ResourceManager.GetString("flag_parameter_length_incorrect", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The '{0}' flag requires that argument with index '{1}' be of type '{2}'. You have entered '{3}' which has failed to be converted..
- ///
- internal static string flag_parameter_type_incorrect {
- get {
- return ResourceManager.GetString("flag_parameter_type_incorrect", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The directory '{0}' contains multiple .csproj files; this tool can only process one at a time..
- ///
- internal static string found_multiple_csproj {
- get {
- return ResourceManager.GetString("found_multiple_csproj", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Something went wrong loading this file; {0}.
- ///
- internal static string generic_error {
- get {
- return ResourceManager.GetString("generic_error", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to You must specify at least one destination..
- ///
- internal static string missing_destinations {
- get {
- return ResourceManager.GetString("missing_destinations", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to You must specify an increment target if you specified an increment mode; allowed increment targets are [patch|minor|major].
- ///
- internal static string missing_increment_target {
- get {
- return ResourceManager.GetString("missing_increment_target", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to You must specify a mode; allowed modes are [overwrite|increment].
- ///
- internal static string missing_mode {
- get {
- return ResourceManager.GetString("missing_mode", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to No project file was found within the current directory..
- ///
- internal static string no_project_in_directory {
- get {
- return ResourceManager.GetString("no_project_in_directory", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The project file '{0}' is irreparable becuase it is missing a '{1}' property, and the value cannot be guessed..
- ///
- internal static string project_file_irreparable {
- get {
- return ResourceManager.GetString("project_file_irreparable", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Something went wrong; an attempt was made to load a non .csproj file as a project file..
- ///
- internal static string tried_loading_non_csproj_file {
- get {
- return ResourceManager.GetString("tried_loading_non_csproj_file", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The version string '{0}' is in an unidentifiable format..
- ///
- internal static string version_string_not_formatted_correctly {
- get {
- return ResourceManager.GetString("version_string_not_formatted_correctly", resourceCulture);
- }
- }
- }
-}
diff --git a/aeqw89.tools.Publish/Exceptions.resx b/aeqw89.tools.Publish/Exceptions.resx
deleted file mode 100644
index 640185f..0000000
--- a/aeqw89.tools.Publish/Exceptions.resx
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- You must specify a mode; allowed modes are [overwrite|increment]
-
-
- The mode '{0}' is invalid, the valid modes are [overwrite|increment]
-
-
- The increment target '{0}' is invalid, the valid increment targets are [patch|minor|patch]
-
-
- You must specify an increment target if you specified an increment mode; allowed increment targets are [patch|minor|major]
-
-
- You must specify at least one destination.
-
-
- No project file was found within the current directory.
-
-
- The flag '{0}' requires exactly '{1}' parameters. You have entered '{2}'.
-
-
- The '{0}' flag requires that argument with index '{1}' be of type '{2}'. You have entered '{3}' which has failed to be converted.
-
-
- The version string '{0}' is in an unidentifiable format.
-
-
- Something went wrong; an attempt was made to load a non .csproj file as a project file.
-
-
- Something went wrong loading this file; {0}
-
-
- The directory '{0}' contains multiple .csproj files; this tool can only process one at a time.
-
-
- The project file '{0}' is irreparable becuase it is missing a '{1}' property, and the value cannot be guessed.
-
-
- Failed to pack; ensure that 'dotnet build' succeeds before running this program.
-
-
- Could not delete temporary directory '{0}' due to error '{1}'
-
-
- The cloud host '{0}' is not an entry on this user's config file.
-
-
- Failde to prepare an upload directory on the path {0} for the remote host '{1}', after being detected as a {2} host. Server error is '{3}'
-
-
- The 'dotnet nuget push' command failed with error message '{0}'
-
-
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/IncrementTarget.cs b/aeqw89.tools.Publish/IncrementTarget.cs
deleted file mode 100644
index 57242c8..0000000
--- a/aeqw89.tools.Publish/IncrementTarget.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace aeqw89.tools.Publish;
-
-public enum IncrementTarget {
- Patch,
- Minor,
- Major,
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/Item.cs b/aeqw89.tools.Publish/Item.cs
deleted file mode 100644
index 6a4ed7e..0000000
--- a/aeqw89.tools.Publish/Item.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal class Item {
- public string ElementName { get; protected set; }
- public string Include {
- get => Node.GetAttribute("Include");
- set => Node.SetAttribute("Include", value);
- }
-
- public string Version {
- get => Node.GetAttribute("Version");
- set => Node.SetAttribute("Version", value);
- }
-
- public string? Value {
- get => Node.InnerText;
- set { Node.InnerText = value ?? string.Empty; }
- }
- public XmlElement Node { get; }
-
- protected Item(XmlElement node) {
- Node = node;
- ElementName = node.Name;
- }
-
- public static Item FromElement(XmlElement element) {
- return element.Name switch {
- "PackageReference" => new PackageReference(element),
- "ProjectReference" => new ProjectReference(element),
- "Content" => new Content(element),
- _ => new Item(element),
- };
- }
-
- public void AddChild(Item child) {
- var imported = Node.OwnerDocument!.ImportNode(child.Node, true);
- Node.AppendChild(imported);
- }
-
- public string? GetAttribute(string name) => Node.HasAttribute(name) ? Node.GetAttribute(name) : null;
- public void SetAttribute(string name, string? value) {
- if (value is null) {
- if (Node.HasAttribute(name)) Node.RemoveAttribute(name);
- return;
- }
- Node.SetAttribute(name, value);
- }
-
- public IEnumerable- GetChildElements() {
- foreach (var e in Node.ChildNodes.OfType())
- yield return new Item(e);
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/ItemGroup.cs b/aeqw89.tools.Publish/ItemGroup.cs
deleted file mode 100644
index 88824a4..0000000
--- a/aeqw89.tools.Publish/ItemGroup.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal class ItemGroup {
- private readonly XmlElement _element;
- public List
- Items { get; }
-
- public void Remove() {
- _element.ParentNode!.RemoveChild(_element);
- }
-
- public ItemGroup(XmlElement element) {
- _element = element;
- Items = element.ChildNodes
- .OfType()
- .Select(Item.FromElement)
- .ToList();
- }
-
- public void Add(Item item) {
- var imported = _element.OwnerDocument!.ImportNode(item.Node, true);
- _element.AppendChild(imported);
- Items.Add(Item.FromElement((XmlElement)imported));
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/Mode.cs b/aeqw89.tools.Publish/Mode.cs
deleted file mode 100644
index 8d13c46..0000000
--- a/aeqw89.tools.Publish/Mode.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace aeqw89.tools.Publish;
-
-public enum Mode {
- Overwrite,
- Increment,
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/PackageReference.cs b/aeqw89.tools.Publish/PackageReference.cs
deleted file mode 100644
index 7413954..0000000
--- a/aeqw89.tools.Publish/PackageReference.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal sealed class PackageReference : Item {
- public PackageReference(XmlElement node) : base(node) { }
-
- // inside PackageReference
- public string? GetPackageVersion() {
- // Prefer attribute, then child
- var attr = GetAttribute("Version");
- if (!string.IsNullOrEmpty(attr)) return attr;
-
- var child = Node.SelectSingleNode("./Version") as XmlElement;
- return child?.InnerText;
- }
-
- public void SetPackageVersion(string? version) {
- if (Node.HasAttribute("Version") || (Node.SelectSingleNode("./Version") == null)) {
- // If attribute exists (or no child yet), use attribute
- SetAttribute("Version", version);
- return;
- }
-
- // Else write to existing child
- var child = (XmlElement)Node.SelectSingleNode("./Version")!;
- child.InnerText = version ?? string.Empty;
- }
-
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/PrivateAssetsValue.cs b/aeqw89.tools.Publish/PrivateAssetsValue.cs
deleted file mode 100644
index 39e923a..0000000
--- a/aeqw89.tools.Publish/PrivateAssetsValue.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace aeqw89.tools.Publish;
-
-public enum PrivateAssetsValue {
- All,
- None,
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/Program.cs b/aeqw89.tools.Publish/Program.cs
deleted file mode 100644
index 8a37de3..0000000
--- a/aeqw89.tools.Publish/Program.cs
+++ /dev/null
@@ -1,473 +0,0 @@
-using System.Collections;
-using System.Diagnostics;
-using Renci.SshNet;
-using Spectre.Console;
-using Spectre.Console.Cli;
-using VsTools.Projects;
-
-namespace aeqw89.tools.Publish;
-
-/*
- * Structure of the program:
- * - publish (executable)
- * - overwrite
- * - destinations
- * - flags
- * - increment
- * - patch|minor|major
- * - destinations
- * - flags
- * e.g. publish overwrite|increment [patch|minor|major] destinations [flags]
- */
-
-public static class Program {
- public static Mode Mode { get; set; }
- public static IncrementTarget? Target { get; set; }
- public static string[] Destinations { get; set; }
- public static Dictionary Flags { get; set; }
- public static bool Verbose { get; set; } = false;
-
- public static void ReadArgs(string[] args) {
- if (args.Length < 1) {
- ShowError(Exceptions.missing_mode.EscapeMarkup());
- ShowHelp();
- return;
- }
-
- Mode = args[0] switch {
- "overwrite" => Mode.Overwrite,
- "increment" => Mode.Increment,
- _ => (Mode)(-1)
- };
-
- if (Mode == (Mode)(-1)) {
- ShowError(Exceptions.could_not_parse_mode.EscapeMarkup(), args[0].EscapeMarkup());
- ShowHelp();
- return;
- }
-
- if (args.Length < 2) {
- if (Mode == Mode.Increment)
- ShowError(Exceptions.missing_increment_target.EscapeMarkup());
- else if (Mode == Mode.Overwrite)
- ShowError(Exceptions.missing_destinations.EscapeMarkup());
- ShowHelp();
- return;
- }
-
- Destinations = args[1..];
- Flags = [];
- if (Mode == Mode.Increment) {
- if (args.Length < 3) {
- ShowError(Exceptions.missing_destinations.EscapeMarkup());
- ShowHelp();
- return;
- }
-
- Destinations = args[2..];
-
- Target = args[1] switch {
- "patch" => IncrementTarget.Patch,
- "minor" => IncrementTarget.Minor,
- "major" => IncrementTarget.Major,
- _ => (IncrementTarget)(-1)
- };
-
- if (Target == (IncrementTarget)(-1)) {
- ShowError(Exceptions.could_not_parse_target.EscapeMarkup(), args[1].EscapeMarkup());
- ShowHelp();
- return;
- }
- }
-
- string? firstFlag = Destinations.FirstOrDefault(x => x.StartsWith('-'));
- if (firstFlag == null) return;
- string[] flags = Destinations.SkipWhile(x => x != firstFlag).ToArray();
- Flags = ReadFlags(flags);
- Destinations = Destinations.TakeWhile(x => x != firstFlag).ToArray();
- Verbose = Flags.ContainsKey("--verbose") || Flags.ContainsKey("-v");
- }
-
- private static Dictionary ReadFlags(string[] flags) {
- Dictionary result = [];
- List collected = [];
- string lastKey = flags[0];
- if (flags.Length == 1)
- result[lastKey] = [];
- foreach (var flag in flags.Skip(1)) {
- if (flag.StartsWith('-')) {
- result[lastKey] = collected.ToArray();
- collected = [];
- lastKey = flag;
- } else
- collected.Add(flag);
- }
-
- return result;
- }
-
- public static async Task Main(string[] args) {
- ReadArgs(args);
-
- string packageId = "";
- string version = "";
-
- var result = AnsiConsole.Status()
- .Spinner(Spinner.Known.Dots)
- .Start("Preparing project", ctx => {
- ctx.Status = "Locating project file";
- if (!ProjectFile.TryLoad(Environment.CurrentDirectory, out var projectFile, out var error)) {
- ShowError(error.EscapeMarkup());
- return false;
- }
-
- packageId = projectFile.GetPackageId();
-
- try {
- projectFile.Backup();
- if (Verbose)
- AnsiConsole.WriteLine(
- $"Created project file backup at {projectFile.GetDefaultBackupLocation()}");
-
- ctx.Status = "Repairing project file";
- if (!Flags.ContainsKey("--skip-repair"))
- if (!projectFile.TryRepair(out error)) {
- ShowError(error.EscapeMarkup());
- projectFile.Restore();
- return false;
- }
-
- if (Mode == Mode.Increment && !Flags.ContainsKey("--simulate")) {
- int delta = 1;
- if (Flags.TryGetValue("--delta", out var deltaStrings)) {
- if (deltaStrings.Length != 1) {
- ShowError(Exceptions.flag_parameter_length_incorrect.EscapeMarkup(), "--delta", 1,
- deltaStrings.Length);
- projectFile.Restore();
- ShowHelp();
- return false;
- }
-
- if (!int.TryParse(deltaStrings[0], out delta)) {
- ShowError(Exceptions.flag_parameter_type_incorrect.EscapeMarkup(), "--delta", 0, nameof(Int32),
- deltaStrings[0]);
- projectFile.Restore();
- ShowHelp();
- return false;
- }
- }
-
- ctx.Status = "Updating version";
- var version = projectFile.GetVersion();
- version = ChangeVersion(version,
- Target == IncrementTarget.Patch ? delta : 0,
- Target == IncrementTarget.Minor ? delta : 0,
- Target == IncrementTarget.Major ? delta : 0,
- (x, y) => x + y);
-
- projectFile.SetVersion(version);
- }
- }
- catch (Exception e) {
- ShowError(Exceptions.generic_error.EscapeMarkup(), e.ToString().EscapeMarkup());
- projectFile.Restore();
- return false;
- }
-
- version = projectFile.GetVersion();
-
- if (!Flags.ContainsKey("--simulate")) {
- try {
- var packageReferences = projectFile.GetPackageReferences();
- foreach (var reference in packageReferences.Where(x => !projectFile.IsTransitive(x)))
- projectFile.SetPrivateAssets(reference, PrivateAssetsValue.All);
- foreach (var reference in packageReferences.Where(x => projectFile.IsTransitive(x)))
- projectFile.RemovePackage(reference);
-
- HashSet visited = [];
- var projectReferences = new Queue
- (projectFile.GetProjectReferences().Cast
- ());
- while (projectReferences.Count != 0) {
- var reference = projectReferences.Dequeue();
- visited.Add(reference.Include);
-
- if (Verbose)
- AnsiConsole.WriteLine($"Processing project reference {reference.Include} out of {visited.Count} so far");
-
- projectFile.SetPrivateAssets(reference, PrivateAssetsValue.All);
- string pathToReferencedProjectFile = projectFile.GetAbsoluteIncludePath(reference);
- if (!ProjectFile.TryLoad(pathToReferencedProjectFile, out var referencedProjectFile,
- out error)) {
- ShowError(error.EscapeMarkup());
- projectFile.Restore();
- return false;
- }
-
- var referencedPackageReferences = referencedProjectFile.GetPackageReferences();
- foreach (var package in referencedPackageReferences) {
- if (Verbose)
- AnsiConsole.WriteLine($"Hoisting package {package.Include} from {pathToReferencedProjectFile}");
- var hoisted = projectFile.AddPackage(package);
- projectFile.SetTransitive(hoisted, true);
- projectFile.SetPrivateAssets(hoisted, PrivateAssetsValue.None);
- referencedProjectFile.SetPrivateAssets(package, PrivateAssetsValue.All);
- }
-
- var referencedProjectReferences = referencedProjectFile.GetProjectReferences();
- foreach (var project in referencedProjectReferences) {
- if (!visited.Contains(project.Include))
- projectReferences.Enqueue(project);
- }
- }
- } catch (Exception e) {
- ShowError(Exceptions.generic_error.EscapeMarkup(), e.ToString().EscapeMarkup());
- projectFile.Restore();
- return false;
- }
- }
-
- projectFile.Save();
- return true;
- });
-
- if (!result) {
- return;
- }
-
- var outDir = Path.GetRandomFileName();
- result = AnsiConsole.Status()
- .Spinner(Spinner.Known.Dots)
- .Start("Creating package with 'dotnet pack' ", ctx => {
- var p = Process.Start(new ProcessStartInfo() {
- FileName = "dotnet",
- Arguments = $"pack -o {outDir}",
- WorkingDirectory = Environment.CurrentDirectory,
- UseShellExecute = Verbose,
- RedirectStandardOutput = !Verbose,
- RedirectStandardError = !Verbose
- });
- p?.WaitForExit();
- return p?.ExitCode == 0;
- });
-
- if (!result) {
- ShowError(Exceptions.dotnet_pack_failure.EscapeMarkup());
- return;
- }
-
- var package = Directory.GetFiles(outDir, "*.nupkg").FirstOrDefault();
- if (package == null) {
- ShowError(Exceptions.generic_error.EscapeMarkup());
- return;
- }
-
- var inMemory = await File.ReadAllBytesAsync(package);
- var size = new FileInfo(package).Length;
- const long bufferSize = 80 * 1024; // 80 KB
- try {
- await AnsiConsole.Progress()
- .AutoClear(true)
- .HideCompleted(true)
- .Columns(new ProgressColumn[] {
- new TaskDescriptionColumn(),
- new ProgressBarColumn()
- .RemainingStyle(Style.Parse("dim gray slowblink"))
- .CompletedStyle(Style.Parse("green strikethrough"))
- .FinishedStyle("green strikethrough"),
- new DownloadedColumn(),
- new RemainingTimeColumn(),
- new TransferSpeedColumn(),
- })
- .StartAsync(async ctx => {
- await Parallel.ForEachAsync(Destinations, new ParallelOptions() {
- MaxDegreeOfParallelism = Environment.ProcessorCount,
- }, async (dest, ct) => {
- using var reader = new MemoryStream(inMemory);
- var task = ctx.AddTask(dest, new ProgressTaskSettings() {
- MaxValue = size
- });
-
- if (dest.StartsWith("local-")) {
- var name = dest[("local-".Length)..];
- var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
- name, Path.GetFileName(package));
- if (!Directory.Exists(Path.GetDirectoryName(path)))
- Directory.CreateDirectory(Path.GetDirectoryName(path)!);
- await using var writer = File.OpenWrite(path);
- var buffer = new byte[bufferSize];
- int read;
- do {
- read = await reader.ReadAsync(buffer, ct);
- writer.Write(buffer, 0, read);
- task.Increment(read);
- } while (read > 0);
- }
-
- else if (dest.StartsWith("cloud-")) {
- var name = dest[("cloud-".Length)..];
- var connectionTask = ctx.AddTaskBefore($"Preparing cloud-{name}", new ProgressTaskSettings() {
- MaxValue = 100
- }, task);
-
- if (!SshHosts.TryGetHost(name, out var host)) {
- ShowError(Exceptions.cloud_host_not_found.EscapeMarkup(), name);
- return;
- }
-
- var connectionInfo = SshHosts.GetConnection(name);
- using var sshClient = new SshClient(connectionInfo);
- if (!sshClient.IsConnected)
- await sshClient.ConnectAsync(ct);
- connectionTask.Increment(33);
-
- var winC = sshClient.RunCommand("cmd /c ver");
- var othC = sshClient.RunCommand("uname -s");
-
- var os = (winC.ExitStatus, othC.ExitStatus) switch {
- (0, _) => "windows",
- (_, 0) => "linux",
- _ => "unknown"
- };
-
- string remoteDirectory;
- string packageFileDirectory;
- if (os == "windows") {
- var userDirC = sshClient.RunCommand("cmd /c echo %USERPROFILE%");
- if (userDirC.ExitStatus != 0) {
- ShowError(Exceptions.failed_to_prepare_server_directory, "n/a", name, os, userDirC.Result);
- return;
- }
-
- var userDir = userDirC.Result.Trim();
- remoteDirectory = RemotePath.Combine(RemoteOs.Windows,userDir, "dotnet-packages");
- packageFileDirectory = RemotePath.Combine(RemoteOs.Windows, remoteDirectory, Path.GetFileName(package));
-
- var mkdirC = sshClient.RunCommand($"cmd /c if not exist \"{remoteDirectory}\" mkdir \"{remoteDirectory}\"");
- if (mkdirC.ExitStatus != 0) {
- ShowError(Exceptions.failed_to_prepare_server_directory, remoteDirectory, name, os, mkdirC.Result);
- return;
- }
- }
- else if (os == "linux") {
- var homeDirC = sshClient.RunCommand("printf %s \"$HOME\"");
- if (homeDirC.ExitStatus != 0) {
- ShowError(Exceptions.failed_to_prepare_server_directory, "n/a", name, os, homeDirC.Result);
- return;
- }
- var homeDir = homeDirC.Result.Trim(); // no CRLF on unix, but Trim() is safest
- remoteDirectory = RemotePath.Combine(RemoteOs.Unix, homeDir, ".dotnet-packages");
- packageFileDirectory = RemotePath.Combine(RemoteOs.Unix, remoteDirectory, Path.GetFileName(package));
-
- // Use -p and single quotes to handle spaces safely
- var mkdirC = sshClient.RunCommand($"mkdir -p '{remoteDirectory}'");
- if (mkdirC.ExitStatus != 0) {
- ShowError(Exceptions.failed_to_prepare_server_directory, remoteDirectory, name, os, mkdirC.Result);
- return;
- }
- }
- else {
- ShowError(Exceptions.failed_to_prepare_server_directory, "n/a", name, os, "Unsupported OS");
- return;
- }
- connectionTask.Increment(33);
-
- sshClient.Disconnect();
-
- using var client = new SftpClient(connectionInfo);
- if (!client.IsConnected)
- await client.ConnectAsync(ct);
- connectionTask.Increment(33);
- connectionTask.StopTask();
-
- await using var writer = client.OpenWrite(packageFileDirectory);
- byte[] buffer = new byte[bufferSize];
- int read;
- do {
- read = await reader.ReadAsync(buffer, ct);
- writer.Write(buffer, 0, read);
- task.Increment(read);
- } while (read > 0);
- }
-
- else if (dest == "github") {
- var p = Process.Start(new ProcessStartInfo() {
- FileName = "dotnet",
- Arguments = $"nuget push {package} --source github",
- WorkingDirectory = Environment.CurrentDirectory,
- UseShellExecute = false,
- RedirectStandardOutput = !Verbose,
- RedirectStandardError = !Verbose
- });
-
- if (p == null) {
- ShowError(Exceptions.generic_error.EscapeMarkup());
- }
-
- task.Increment(size / 2);
- if (p != null)
- await p.WaitForExitAsync(ct);
- if (p?.ExitCode != 0) {
- ShowError(Exceptions.dotnet_nuget_push_failure, p.ExitCode);
- }
- task.Increment(size / 2);
- }
-
- task.StopTask();
- });
- });
- }
- finally {
- try {
- Directory.Delete(outDir, true);
- }
- catch (Exception e) {
- ShowError(string.Format(Exceptions.failed_to_clean_up.EscapeMarkup(), outDir.EscapeMarkup(), e.ToString().EscapeMarkup()));
- }
- }
- AnsiConsole.MarkupLine("Completed processing of all destinations.");
- AnsiConsole.MarkupLine("Example usage:\n\t ".EscapeMarkup(), packageId, version);
- }
-
- ///
- /// Updates the version string by applying the specified operation to the major, minor, and patch components of the version.
- ///
- /// The current version string in the format "major.minor.patch[-tag]".
- /// The value to apply to the patch component.
- /// The value to apply to the minor component.
- /// The value to apply to the major component.
- /// A function that defines the adjustment operation to be performed on each version component.
- /// A new version string with the updated major, minor, and patch components, preserving any existing tag.
- /// Thrown if the version string is not in the correct format.
- private static string ChangeVersion(string version, int patch, int minor, int major,
- Func operation) {
- string[] split = version.Split('.');
- if (split.Length != 3) {
- throw new Exception(string.Format(Exceptions.version_string_not_formatted_correctly, version));
- }
-
- string tag = "";
- if (split[2].Contains('-')) {
- var split2 = split[2].Split('-');
- split[2] = split2[0];
- tag = "-" + split2[1];
- }
-
- if (split.Any(x => !int.TryParse(x, out _)))
- throw new Exception(string.Format(Exceptions.version_string_not_formatted_correctly, version));
-
- int[] parsedVersion = split.Select(int.Parse).ToArray();
-
- return
- $"{operation(parsedVersion[0], major)}.{operation(parsedVersion[1], minor)}.{operation(parsedVersion[2], patch)}{tag}";
- }
-
- private static void ShowError(string message, params object[] args) {
- AnsiConsole.MarkupLine($"[bold red]{message}[/]", args);
- }
-
- private static void ShowHelp() {
- AnsiConsole.Markup(("Usage: publish overwrite|increment [patch|minor|major] destinations [flags]\n" +
- "\t if mode: overwrite destinations [flags]\n" +
- "\t if mode: increment patch|minor|major [flags]\n").EscapeMarkup());
-
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/Project.cs b/aeqw89.tools.Publish/Project.cs
deleted file mode 100644
index c5d2e73..0000000
--- a/aeqw89.tools.Publish/Project.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal class Project {
- public string Path { get; }
- private XmlDocument Document { get; }
- public List PropertyGroups { get; }
- public List ItemGroups { get; }
-
- private Project(string path, XmlDocument doc) {
- Path = path;
- Document = doc;
-
- // Build PropertyGroups
- PropertyGroups = doc.DocumentElement!
- .SelectNodes("./PropertyGroup")!
- .OfType()
- .Select(e => new PropertyGroup(e))
- .ToList();
-
- // Build ItemGroups (+ their Items)
- ItemGroups = doc.DocumentElement!
- .SelectNodes("./ItemGroup")!
- .OfType()
- .Select(e => new ItemGroup(e))
- .ToList();
-
- // Ensure at least one ItemGroup exists (some csprojs omit it until first item is added)
- if (ItemGroups.Count == 0) {
- var ig = doc.CreateElement("ItemGroup", doc.DocumentElement!.NamespaceURI);
- doc.DocumentElement!.AppendChild(ig);
- ItemGroups.Add(new ItemGroup((XmlElement)ig));
- }
- }
-
- public static Project Load(string path) {
- var doc = new XmlDocument();
- doc.PreserveWhitespace = false;
- doc.Load(path);
- return new Project(path, doc);
- }
-
- public void Save() {
- var settings = new XmlWriterSettings {
- Indent = true,
- IndentChars = " ",
- NewLineChars = Environment.NewLine,
- NewLineHandling = NewLineHandling.Replace
- };
- using var writer = XmlWriter.Create(Path, settings);
- Document.Save(writer);
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/ProjectFile.cs b/aeqw89.tools.Publish/ProjectFile.cs
deleted file mode 100644
index 20f1270..0000000
--- a/aeqw89.tools.Publish/ProjectFile.cs
+++ /dev/null
@@ -1,216 +0,0 @@
-using System.Diagnostics.CodeAnalysis;
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-// -------------------------------------------------------------------------------------------------
-// Minimal replacements for VsTools.Projects so ProjectFile can keep its public surface intact
-// -------------------------------------------------------------------------------------------------
-
-// -------------------------------------------------------------------------------------------------
-// Your original public surface, now backed by System.Xml
-// -------------------------------------------------------------------------------------------------
-
-internal class ProjectFile {
- public Project Project { get; private set; }
- public string Path { get; private set; }
- private PropertyGroup MainPropertyGroup { get; set; }
-
- private ProjectFile(Project project, string path) {
- MainPropertyGroup = project.PropertyGroups.FirstOrDefault()!;
- Project = project;
- Path = path;
- }
-
- public static bool TryLoad(string path, [NotNullWhen(true)] out ProjectFile? projectFile, [NotNullWhen(false)] out string? error) {
- projectFile = null;
- error = null;
-
- if (!path.EndsWith(".csproj")) {
- if (!Directory.Exists(path)) {
- error = Exceptions.tried_loading_non_csproj_file;
- return false;
- }
-
- var csproj = Directory.EnumerateFiles(path, "*.csproj", SearchOption.TopDirectoryOnly).ToArray();
- if (csproj.Length == 0) {
- error = Exceptions.no_project_in_directory;
- return false;
- }
-
- if (csproj.Length > 1) {
- error = Exceptions.found_multiple_csproj;
- return false;
- }
-
- path = csproj[0];
- }
-
- try {
- projectFile = new ProjectFile(Project.Load(path), path);
- return true;
- }
- catch (Exception e) {
- error = string.Format(Exceptions.generic_error, e);
- return false;
- }
- }
-
- public void Backup(string? backupPath = null) {
- backupPath ??= Path + ".bak";
- File.Copy(Path, backupPath, true);
- }
-
- public string GetDefaultBackupLocation() => Path + ".bak";
-
- public bool Restore(string? backupPath = null) {
- backupPath ??= GetDefaultBackupLocation();
- if (!File.Exists(backupPath)) return false;
- File.Copy(backupPath, Path, true);
- return true;
- }
-
- public void Save() {
- // Check for empty property or item groups
- foreach (var ig in Project.ItemGroups.ToList().Where(ig => ig.Items.Count == 0)) {
- ig.Remove();
- }
- foreach (var pg in Project.PropertyGroups.ToList().Where(pg => pg.Count == 0)) {
- pg.Remove();
- }
-
- Project.Save();
- }
-
- public bool TryRepair([NotNullWhen(false)] out string? error) {
- // Ensure we have a PropertyGroup with TargetFramework
- if (MainPropertyGroup?.HasProperty("TargetFramework") != true) {
- if (!Project.PropertyGroups.Any(x => x.HasProperty("TargetFramework"))) {
- error = string.Format(Exceptions.project_file_irreparable, Path, "TargetFramework");
- return false;
- }
- MainPropertyGroup = Project.PropertyGroups.First(x => x.HasProperty("TargetFramework"));
- }
-
- List failed = [];
-
- void set(string key, string value, bool required = false) {
- if (!MainPropertyGroup.HasProperty(key) || string.IsNullOrEmpty(MainPropertyGroup.GetProperty(key))) {
- if (required) {
- failed.Add(key);
- return;
- }
- MainPropertyGroup.SetProperty(key, value);
- }
- }
-
- set("Version", "1.0.0");
- set("Title", System.IO.Path.GetFileNameWithoutExtension(Path));
- set("Authors", "");
- set("Company", "");
- set("Description", "");
- set("PackageProjectUrl", "", required: false);
- set("RepositoryUrl", "", required: true);
- set("PackageId", "", required: true);
-
- if (failed.Count > 0) {
- error = string.Format(Exceptions.project_file_irreparable, Path, string.Join(", ", failed));
- return false;
- }
-
- error = null;
- return true;
- }
-
- public List GetPackageReferences() {
- return Project.ItemGroups
- .SelectMany(g => g.Items)
- .Where(i => i.ElementName == "PackageReference")
- .OfType()
- .ToList();
- }
-
- public List GetProjectReferences() {
- return Project.ItemGroups
- .SelectMany(g => g.Items)
- .Where(i => i.ElementName == "ProjectReference")
- .OfType()
- .ToList();
- }
-
- public List GetPackageDependencies() {
- return Project.ItemGroups
- .SelectMany(g => g.Items)
- .Where(i => i.ElementName == "Content")
- .OfType()
- .ToList();
- }
-
- private void CreateOrUpdateChild(Item item, string childName, string value) {
- var child = item.Node.SelectSingleNode(childName) as XmlElement;
- if (child != null) {
- child.InnerText = value;
- return;
- }
-
- child = item.Node.OwnerDocument!.CreateElement(childName, item.Node.NamespaceURI);
- child.InnerText = value;
- item.Node.AppendChild(child);
- }
-
- public string GetPackageId() {
- return MainPropertyGroup.GetProperty("PackageId");
- }
-
- public void SetPrivateAssets(Item item, PrivateAssetsValue value) {
- if (value == PrivateAssetsValue.None) {
- var child = item.Node.SelectSingleNode("./PrivateAssets") as XmlElement;
- if (child != null)
- item.Node.RemoveChild(child);
- return;
- }
-
- CreateOrUpdateChild(item, "PrivateAssets", value.ToString().ToLowerInvariant());
- }
-
- public void SetTransitive(Item item, bool value)
- => CreateOrUpdateChild(item, "Transitive", value.ToString().ToLowerInvariant());
-
- public bool IsTransitive(Item item) {
- var transitive = item.Node.SelectSingleNode("./Transitive") as XmlElement;
- return transitive?.InnerText == "true";
- }
-
- public string GetAbsoluteIncludePath(Item item) {
- return System.IO.Path.GetFullPath(item.Include);
- }
-
- public Item AddPackage(Item otherPackage) {
- var allItems = Project.ItemGroups.SelectMany(x => x.Items);
- var existing = allItems.FirstOrDefault(x =>
- x.ElementName == "PackageReference" && x.Include == otherPackage.Include);
- if (existing != null) return existing;
-
- var itemGroup = Project.ItemGroups.First();
- // Import the original XmlElement to preserve Version (attr or child) and any metadata
- itemGroup.Add(otherPackage);
- return itemGroup.Items.Last();
- }
-
-
- public bool RemovePackage(Item otherPackage) {
- var grp = Project.ItemGroups
- .FirstOrDefault(g => g.Items.Any(y => y.ElementName == "PackageReference" && y.Include == otherPackage.Include));
-
- var pkg = grp?.Items.FirstOrDefault(x => x.ElementName == otherPackage.ElementName && x.Include == otherPackage.Include);
- if (pkg == null) return false;
-
- pkg.Node.ParentNode!.RemoveChild(pkg.Node);
- grp!.Items.Remove(pkg);
- return true;
- }
-
- public string GetVersion() => MainPropertyGroup.GetProperty("Version");
-
- public void SetVersion(string version) => MainPropertyGroup.SetProperty("Version", version);
-}
diff --git a/aeqw89.tools.Publish/ProjectReference.cs b/aeqw89.tools.Publish/ProjectReference.cs
deleted file mode 100644
index acf6799..0000000
--- a/aeqw89.tools.Publish/ProjectReference.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal sealed class ProjectReference : Item {
- public ProjectReference(XmlElement node) : base(node) { }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/PropertyGroup.cs b/aeqw89.tools.Publish/PropertyGroup.cs
deleted file mode 100644
index 56f966f..0000000
--- a/aeqw89.tools.Publish/PropertyGroup.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System.Xml;
-
-namespace aeqw89.tools.Publish;
-
-internal class PropertyGroup {
- private readonly XmlElement _element;
- public PropertyGroup(XmlElement element) => _element = element;
-
- public bool HasProperty(string name) => _element.SelectSingleNode($"./{name}") is XmlElement;
-
- public string GetProperty(string name) {
- var node = _element.SelectSingleNode($"./{name}") as XmlElement;
- return node?.InnerText ?? string.Empty;
- }
-
- public void SetProperty(string name, string value) {
- var node = _element.SelectSingleNode($"./{name}") as XmlElement;
- if (node == null) {
- node = _element.OwnerDocument!.CreateElement(name, _element.NamespaceURI);
- _element.AppendChild(node);
- }
- node.InnerText = value ?? string.Empty;
- }
-
- public int Count => _element.ChildNodes.OfType().Count();
-
- public void Remove() => _element.ParentNode!.RemoveChild(_element);
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/RemotePath.cs b/aeqw89.tools.Publish/RemotePath.cs
deleted file mode 100644
index 6f9d29b..0000000
--- a/aeqw89.tools.Publish/RemotePath.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-// Required namespaces: System, System.Linq, System.Text.RegularExpressions
-
-using System.Text.RegularExpressions;
-
-namespace aeqw89.tools.Publish;
-
-public enum RemoteOs { Windows, Unix }
-
-public static partial class RemotePath
-{
- public static string Combine(RemoteOs os, params string[] parts)
- {
- if (parts == null || parts.Length == 0) return string.Empty;
-
- // Normalize null/empty segments and trim whitespace
- var cleaned = parts.Where(p => !string.IsNullOrWhiteSpace(p))
- .Select(p => p.Trim())
- .ToArray();
- if (cleaned.Length == 0) return string.Empty;
-
- return os == RemoteOs.Windows
- ? CombineWindows(cleaned)
- : CombineUnix(cleaned);
- }
-
- private static string CombineUnix(string[] parts)
- {
- // Keep a single leading '/' if the first segment is rooted
- bool rooted = parts[0].StartsWith("/", StringComparison.Ordinal);
- var body = parts.Select((p, i) =>
- {
- var s = p.Replace("\\", "/");
- // Trim both ends except preserve leading '/' only for first segment
- if (i == 0)
- return s.TrimEnd('/');
- return s.Trim('/'); // internal segments never carry separators
- })
- .Where(s => s.Length > 0)
- .ToArray();
-
- var joined = string.Join("/", body);
- return rooted ? (joined.StartsWith("/") ? joined : "/" + joined) : joined;
- }
-
- private static string CombineWindows(string[] parts)
- {
- // Windows separators are backslashes for cmd.exe/PowerShell paths.
- // Preserve drive letters like "C:" and UNC roots like "\\server".
- var first = parts[0].Replace("/", "\\").Trim();
- var rest = parts.Skip(1)
- .Select(p => p.Replace("/", "\\").Trim('\\'))
- .Where(s => s.Length > 0)
- .ToArray();
-
- // Detect UNC root (\\server\share...) or device prefix (\\?\ or \\.\)
- bool isUncOrDevice = first.StartsWith(@"\\", StringComparison.Ordinal);
- bool isDrive = IsDrive().IsMatch(first);
-
- if (isUncOrDevice)
- {
- // Keep exactly two leading backslashes; trim trailing ones
- first = @"\\" + first.TrimStart('\\').TrimEnd('\\');
- }
- else if (isDrive)
- {
- // Normalize "C:" or "C:\" to "C:\"
- first = first.Length == 2 ? first + "\\" : first;
- }
- else
- {
- // For relative first segment, strip surrounding slashes
- first = first.Trim('\\');
- }
-
- string joined = rest.Length > 0
- ? first + (first.EndsWith("\\") ? "" : "\\") + string.Join("\\", rest)
- : first;
-
- // Collapse any accidental doubles that can appear from user input (but keep UNC prefix)
- if (!joined.StartsWith(@"\\"))
- joined = Collapse().Replace(joined, @"\");
-
- return joined;
- }
-
- [System.Text.RegularExpressions.GeneratedRegex(@"^[A-Za-z]:\\?$")]
- private static partial System.Text.RegularExpressions.Regex IsDrive();
- [GeneratedRegex(@"\\{2,}")]
- private static partial Regex Collapse();
-}
diff --git a/aeqw89.tools.Publish/SshHosts.cs b/aeqw89.tools.Publish/SshHosts.cs
deleted file mode 100644
index ff6ada2..0000000
--- a/aeqw89.tools.Publish/SshHosts.cs
+++ /dev/null
@@ -1,423 +0,0 @@
-// Required namespaces:
-// System, System.IO, System.Linq, System.Text, System.Text.RegularExpressions, System.Collections.Generic, Renci.SshNet
-
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace aeqw89.tools.Publish;
-
-public record Host(
- string Name,
- string Hostname,
- string User,
- string Password,
- int Port,
- List IdentityFiles,
- Renci.SshNet.ProxyTypes? ProxyType,
- string? ProxyHost,
- int? ProxyPort,
- string? ProxyUser,
- string? ProxyPassword
-);
-
-public static class SshHosts {
- public static List Hosts { get; set; }
-
- static SshHosts() {
- Hosts = new List();
-
- var path = Path.Combine(
- Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
- ".ssh",
- "config"
- );
-
- if (!File.Exists(path)) return;
-
- var lines = File.ReadAllLines(path);
-
- string[]? currentNames = null;
- string? currentHostName = null;
- string? currentUser = null;
- string? currentPassword = null;
- int? currentPort = null;
- List? currentIdentityFiles = null;
-
- // Proxy (explicit)
- Renci.SshNet.ProxyTypes? currentProxyType = null;
- string? currentProxyHost = null;
- int? currentProxyPort = null;
- string? currentProxyUser = null;
- string? currentProxyPassword = null;
-
- // Proxy (derived from ProxyCommand)
- string? currentProxyCommand = null;
-
- void ResetBlock()
- {
- currentNames = null;
- currentHostName = null;
- currentUser = null;
- currentPassword = null;
- currentPort = null;
- currentIdentityFiles = null;
-
- currentProxyType = null;
- currentProxyHost = null;
- currentProxyPort = null;
- currentProxyUser = null;
- currentProxyPassword = null;
-
- currentProxyCommand = null;
- }
-
- void MaybeDeriveProxyFromProxyCommand()
- {
- if (string.IsNullOrWhiteSpace(currentProxyCommand)) return;
- if (currentProxyType != null && currentProxyHost != null && currentProxyPort != null) return;
-
- // Very common forms:
- // nc -x host:port -X 5 %h %p (SOCKS5)
- // nc -x host:port -X 4 %h %p (SOCKS4)
- // nc -x host:port %h %p (default: treat as SOCKS5)
- // nc -X connect -x host:port %h %p (HTTP CONNECT)
- // connect -S host:port %h %p (treat as SOCKS5)
- var s = currentProxyCommand;
-
- // host:port extraction
- var hp = Regex.Match(s, @"(?:(?:-x|-S)\s+|\s)([A-Za-z0-9.\-]+):(\d{1,5})");
- if (hp.Success) {
- currentProxyHost ??= hp.Groups[1].Value;
- if (int.TryParse(hp.Groups[2].Value, out var pp) && pp > 0 && pp <= 65535)
- currentProxyPort ??= pp;
- }
-
- // type extraction
- if (Regex.IsMatch(s, @"-X\s+5\b", RegexOptions.IgnoreCase))
- currentProxyType ??= Renci.SshNet.ProxyTypes.Socks5;
- else if (Regex.IsMatch(s, @"-X\s+4\b", RegexOptions.IgnoreCase))
- currentProxyType ??= Renci.SshNet.ProxyTypes.Socks4;
- else if (Regex.IsMatch(s, @"-X\s+connect\b", RegexOptions.IgnoreCase))
- currentProxyType ??= Renci.SshNet.ProxyTypes.Http;
- else if (s.Contains("connect ", System.StringComparison.OrdinalIgnoreCase))
- currentProxyType ??= Renci.SshNet.ProxyTypes.Http;
- else if (s.Contains("nc ", System.StringComparison.OrdinalIgnoreCase))
- currentProxyType ??= Renci.SshNet.ProxyTypes.Socks5;
-
- // If we still don't have enough, leave proxy unset.
- }
-
- void Flush()
- {
- if (currentNames == null || currentNames.Length == 0) {
- ResetBlock();
- return;
- }
-
- // Try deriving proxy from ProxyCommand if explicit values weren't set
- MaybeDeriveProxyFromProxyCommand();
-
- foreach (var n in currentNames) {
- var hn = string.IsNullOrWhiteSpace(currentHostName) ? n : currentHostName!;
- var idFiles = new List();
- if (currentIdentityFiles != null) {
- foreach (var f in currentIdentityFiles) idFiles.Add(ExpandPath(f));
- }
-
- Hosts.Add(new Host(
- Name: n,
- Hostname: hn,
- User: currentUser ?? string.Empty,
- Password: currentPassword ?? string.Empty,
- Port: currentPort ?? 22,
- IdentityFiles: idFiles,
- ProxyType: currentProxyType,
- ProxyHost: currentProxyHost,
- ProxyPort: currentProxyPort,
- ProxyUser: currentProxyUser,
- ProxyPassword: currentProxyPassword
- ));
- }
-
- ResetBlock();
- }
-
- foreach (var raw in lines) {
- var line = raw.Trim();
- if (line.Length == 0 || line.StartsWith("#")) continue;
-
- int idx = line.IndexOfAny(new[] { ' ', '\t' });
- string key, value;
- if (idx < 0) {
- key = line;
- value = string.Empty;
- } else {
- key = line[..idx];
- value = line[idx..].Trim();
- }
-
- switch (key.ToLowerInvariant()) {
- case "host":
- Flush();
- currentNames = SplitArgs(value).ToArray();
- break;
-
- case "hostname":
- if (currentNames != null) currentHostName = value;
- break;
-
- case "user":
- if (currentNames != null) currentUser = value;
- break;
-
- case "password":
- // Non-standard; supported here as a convenience (used for password auth or key passphrase)
- if (currentNames != null) currentPassword = value;
- break;
-
- case "port":
- if (currentNames != null && int.TryParse(value, out var p) && p > 0 && p <= 65535)
- currentPort = p;
- break;
-
- case "identityfile":
- if (currentNames != null) {
- currentIdentityFiles ??= new List();
- foreach (var f in SplitArgs(value)) {
- if (!string.IsNullOrWhiteSpace(f)) currentIdentityFiles.Add(f);
- }
- }
- break;
-
- // --- Proxy settings (explicit custom keys) ---
- case "proxytype":
- if (currentNames != null) {
- var v = value.ToLowerInvariant();
- currentProxyType =
- v switch {
- "socks5" or "socks" or "socks5h" => Renci.SshNet.ProxyTypes.Socks5,
- "socks4" => Renci.SshNet.ProxyTypes.Socks4,
- "http" or "https" or "connect" => Renci.SshNet.ProxyTypes.Http,
- _ => currentProxyType
- };
- }
- break;
-
- case "proxyhost":
- if (currentNames != null) currentProxyHost = value;
- break;
-
- case "proxyport":
- if (currentNames != null && int.TryParse(value, out var prxP) && prxP > 0 && prxP <= 65535)
- currentProxyPort = prxP;
- break;
-
- case "proxyuser":
- if (currentNames != null) currentProxyUser = value;
- break;
-
- case "proxypassword":
- if (currentNames != null) currentProxyPassword = value;
- break;
-
- // --- OpenSSH-style hints we try to interpret ---
- case "proxycommand":
- if (currentNames != null) currentProxyCommand = value;
- break;
-
- // (Note: ProxyJump is non-trivial to replicate in SSH.NET; not parsed here.)
-
- default:
- break;
- }
- }
-
- Flush();
- }
-
- // Builds a ConnectionInfo from a parsed host, ensuring all ~/.ssh private keys are tried.
- private static Renci.SshNet.ConnectionInfo BuildConnection(Host h) {
- var authMethods = new List();
-
- // 1) Collect candidate key file paths: from config + everything that looks like a private key in ~/.ssh
- var keyPaths = new HashSet(StringComparer.OrdinalIgnoreCase);
-
- foreach (var f in h.IdentityFiles)
- if (!string.IsNullOrWhiteSpace(f))
- keyPaths.Add(f);
-
- foreach (var f in EnumerateAllSshPrivateKeys())
- keyPaths.Add(f);
-
- // 2) Load keys (try with passphrase, then without)
- var pkFiles = new List();
- foreach (var p in keyPaths) {
- if (!File.Exists(p)) continue;
- try {
- if (!string.IsNullOrEmpty(h.Password)) {
- try {
- pkFiles.Add(new Renci.SshNet.PrivateKeyFile(p, h.Password));
- continue;
- }
- catch { /* fall through to try without passphrase */
- }
- }
-
- pkFiles.Add(new Renci.SshNet.PrivateKeyFile(p));
- }
- catch { /* skip unreadable/unparsable key */
- }
- }
-
- if (pkFiles.Count > 0)
- authMethods.Add(new Renci.SshNet.PrivateKeyAuthenticationMethod(h.User, pkFiles.ToArray()));
-
- // 3) Optional password auth (remote account password)
- if (!string.IsNullOrEmpty(h.Password))
- authMethods.Add(new Renci.SshNet.PasswordAuthenticationMethod(h.User, h.Password));
-
- if (authMethods.Count == 0)
- throw new InvalidOperationException($"No authentication methods available for host '{h.Name}'.");
-
- // 4) Proxy-aware ConnectionInfo
- if (h.ProxyType.HasValue && !string.IsNullOrWhiteSpace(h.ProxyHost) && h.ProxyPort.HasValue) {
- return new Renci.SshNet.ConnectionInfo(
- h.Hostname,
- h.Port,
- h.User,
- h.ProxyType.Value,
- h.ProxyHost!,
- h.ProxyPort.Value,
- h.ProxyUser,
- h.ProxyPassword,
- authMethods.ToArray()
- );
- }
-
- return new Renci.SshNet.ConnectionInfo(h.Hostname, h.Port, h.User, authMethods.ToArray());
- }
-
- // Enumerate everything in ~/.ssh that *looks* like a private key.
- // Skips obvious non-keys like *.pub, known_hosts, config, and directories.
- private static IEnumerable EnumerateAllSshPrivateKeys() {
- var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
- var sshDir = Path.Combine(home, ".ssh");
- if (!Directory.Exists(sshDir)) yield break;
-
- // Common private key basenames to prioritize
- var preferred = new HashSet(StringComparer.OrdinalIgnoreCase) {
- "id_rsa", "id_ecdsa", "id_ed25519", "id_dsa"
- };
-
- // First yield preferred names if present
- foreach (var name in preferred) {
- var p = Path.Combine(sshDir, name);
- if (File.Exists(p)) yield return p;
- }
-
- // Then yield everything else that looks like a key
- foreach (var file in Directory.EnumerateFiles(sshDir)) {
- var name = Path.GetFileName(file);
-
- // Skip ones we already yielded
- if (preferred.Contains(name)) continue;
-
- // Exclude common non-key files and public keys
- if (name.EndsWith(".pub", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.Equals("config", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.Equals("known_hosts", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.Equals("authorized_keys", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.EndsWith(".crt", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.EndsWith(".csr", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.EndsWith(".pem.pub", StringComparison.OrdinalIgnoreCase)) continue; // guard for odd combos
- if (name.EndsWith(".txt", StringComparison.OrdinalIgnoreCase)) continue;
- if (name.EndsWith(".conf", StringComparison.OrdinalIgnoreCase)) continue;
-
- // Heuristic: accept files with no extension, or with .key/.pem
- var ext = Path.GetExtension(name);
- if (string.IsNullOrEmpty(ext) ||
- ext.Equals(".key", StringComparison.OrdinalIgnoreCase) ||
- ext.Equals(".pem", StringComparison.OrdinalIgnoreCase)) {
- yield return file;
- }
- }
- }
-
-
- public static Host Get(string name) {
- for (int i = 0; i < Hosts.Count; i++) {
- if (string.Equals(Hosts[i].Name, name, StringComparison.OrdinalIgnoreCase)) {
- return Hosts[i];
- }
- }
- throw new KeyNotFoundException($"SSH host '{name}' not found.");
- }
-
- public static bool TryGetHost(string name, out Host host) {
- for (int i = 0; i < Hosts.Count; i++) {
- if (string.Equals(Hosts[i].Name, name, StringComparison.OrdinalIgnoreCase)) {
- host = Hosts[i];
- return true;
- }
- }
- host = default!;
- return false;
- }
-
- public static Renci.SshNet.ConnectionInfo GetConnection(string name)
- {
- var h = Get(name);
- return BuildConnection(h);
- }
-
- public static bool TryGetConnection(string name, out Renci.SshNet.ConnectionInfo connectionInfo)
- {
- if (TryGetHost(name, out var h)) {
- try {
- connectionInfo = BuildConnection(h);
- return true;
- } catch {
- // If auth material is unusable, return false.
- }
- }
- connectionInfo = default!;
- return false;
- }
-
- // --- Helpers ---
-
- // Splits a value into whitespace-delimited tokens while respecting double/single quotes.
- static IEnumerable SplitArgs(string input)
- {
- if (string.IsNullOrWhiteSpace(input)) yield break;
-
- bool inSingle = false, inDouble = false;
- var sb = new StringBuilder();
-
- for (int i = 0; i < input.Length; i++) {
- char c = input[i];
-
- if (c == '"' && !inSingle) { inDouble = !inDouble; continue; }
- if (c == '\'' && !inDouble) { inSingle = !inSingle; continue; }
-
- if (!inSingle && !inDouble && char.IsWhiteSpace(c)) {
- if (sb.Length > 0) { yield return sb.ToString(); sb.Clear(); }
- } else {
- sb.Append(c);
- }
- }
- if (sb.Length > 0) yield return sb.ToString();
- }
-
- // Expands leading "~" to user home. Leaves %h, %r, etc. untouched.
- static string ExpandPath(string p)
- {
- if (string.IsNullOrEmpty(p)) return p;
- if (p == "~") return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
- if (p.StartsWith("~/")) {
- var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
- return Path.Combine(home, p[2..]);
- }
- return p;
- }
-}
diff --git a/aeqw89.tools.Publish/aeqw89.tools.Publish.csproj b/aeqw89.tools.Publish/aeqw89.tools.Publish.csproj
deleted file mode 100644
index 26c14ea..0000000
--- a/aeqw89.tools.Publish/aeqw89.tools.Publish.csproj
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- Exe
- net9.0
- enable
- enable
-
-
-
-
-
-
-
-
-
-
-
- ResXFileCodeGenerator
- Exceptions.Designer.cs
-
-
-
-
-
- True
- True
- Exceptions.resx
-
-
-
-
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/BouncyCastle.Cryptography.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/BouncyCastle.Cryptography.dll
deleted file mode 100644
index bf1a8a1..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/BouncyCastle.Cryptography.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
deleted file mode 100644
index 81ed3de..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll
deleted file mode 100644
index cedb2b8..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/Renci.SshNet.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/Renci.SshNet.dll
deleted file mode 100644
index af01d10..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/Renci.SshNet.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/Spectre.Console.Cli.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/Spectre.Console.Cli.dll
deleted file mode 100644
index 25b90d2..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/Spectre.Console.Cli.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/Spectre.Console.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/Spectre.Console.dll
deleted file mode 100644
index 14b1118..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/Spectre.Console.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/VsTools.Projects.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/VsTools.Projects.dll
deleted file mode 100644
index ea26afe..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/VsTools.Projects.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.deps.json b/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.deps.json
deleted file mode 100644
index d70d30a..0000000
--- a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.deps.json
+++ /dev/null
@@ -1,176 +0,0 @@
-{
- "runtimeTarget": {
- "name": ".NETCoreApp,Version=v9.0",
- "signature": ""
- },
- "compilationOptions": {},
- "targets": {
- ".NETCoreApp,Version=v9.0": {
- "aeqw89.tools.Publish/1.0.0": {
- "dependencies": {
- "SSH.NET": "2025.0.0",
- "Spectre.Console": "0.51.2-preview.0.1",
- "Spectre.Console.Cli": "0.51.2-preview.0.1",
- "VsTools.Projects": "1.2.0"
- },
- "runtime": {
- "aeqw89.tools.Publish.dll": {}
- }
- },
- "BouncyCastle.Cryptography/2.5.1": {
- "runtime": {
- "lib/net6.0/BouncyCastle.Cryptography.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.5.1.28965"
- }
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
- "runtime": {
- "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
- "assemblyVersion": "8.0.0.0",
- "fileVersion": "8.0.1024.46610"
- }
- }
- },
- "Microsoft.Extensions.Logging.Abstractions/8.0.3": {
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
- },
- "runtime": {
- "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
- "assemblyVersion": "8.0.0.0",
- "fileVersion": "8.0.1325.6609"
- }
- }
- },
- "Spectre.Console/0.51.2-preview.0.1": {
- "runtime": {
- "lib/net9.0/Spectre.Console.dll": {
- "assemblyVersion": "0.0.0.0",
- "fileVersion": "0.51.2.0"
- }
- }
- },
- "Spectre.Console.Cli/0.51.2-preview.0.1": {
- "dependencies": {
- "Spectre.Console": "0.51.2-preview.0.1"
- },
- "runtime": {
- "lib/net9.0/Spectre.Console.Cli.dll": {
- "assemblyVersion": "0.0.0.0",
- "fileVersion": "0.51.2.0"
- }
- },
- "resources": {
- "lib/net9.0/de/Spectre.Console.Cli.resources.dll": {
- "locale": "de"
- },
- "lib/net9.0/es/Spectre.Console.Cli.resources.dll": {
- "locale": "es"
- },
- "lib/net9.0/fr/Spectre.Console.Cli.resources.dll": {
- "locale": "fr"
- },
- "lib/net9.0/it/Spectre.Console.Cli.resources.dll": {
- "locale": "it"
- },
- "lib/net9.0/ja/Spectre.Console.Cli.resources.dll": {
- "locale": "ja"
- },
- "lib/net9.0/ko/Spectre.Console.Cli.resources.dll": {
- "locale": "ko"
- },
- "lib/net9.0/pt/Spectre.Console.Cli.resources.dll": {
- "locale": "pt"
- },
- "lib/net9.0/ru/Spectre.Console.Cli.resources.dll": {
- "locale": "ru"
- },
- "lib/net9.0/sv/Spectre.Console.Cli.resources.dll": {
- "locale": "sv"
- },
- "lib/net9.0/zh-Hans/Spectre.Console.Cli.resources.dll": {
- "locale": "zh-Hans"
- }
- }
- },
- "SSH.NET/2025.0.0": {
- "dependencies": {
- "BouncyCastle.Cryptography": "2.5.1",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.3"
- },
- "runtime": {
- "lib/net9.0/Renci.SshNet.dll": {
- "assemblyVersion": "2025.0.0.1",
- "fileVersion": "2025.0.0.1"
- }
- }
- },
- "VsTools.Projects/1.2.0": {
- "runtime": {
- "lib/netstandard2.0/VsTools.Projects.dll": {
- "assemblyVersion": "1.2.0.0",
- "fileVersion": "1.2.0.0"
- }
- }
- }
- }
- },
- "libraries": {
- "aeqw89.tools.Publish/1.0.0": {
- "type": "project",
- "serviceable": false,
- "sha512": ""
- },
- "BouncyCastle.Cryptography/2.5.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-zy8TMeTP+1FH2NrLaNZtdRbBdq7u5MI+NFZQOBSM69u5RFkciinwzV2eveY6Kjf5MzgsYvvl6kTStsj3JrXqkg==",
- "path": "bouncycastle.cryptography/2.5.1",
- "hashPath": "bouncycastle.cryptography.2.5.1.nupkg.sha512"
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
- "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
- "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
- },
- "Microsoft.Extensions.Logging.Abstractions/8.0.3": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==",
- "path": "microsoft.extensions.logging.abstractions/8.0.3",
- "hashPath": "microsoft.extensions.logging.abstractions.8.0.3.nupkg.sha512"
- },
- "Spectre.Console/0.51.2-preview.0.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-eTojiXsispvwl5i3o6BsBt0fV7pn+jsJ3nbQVCTCwBoYbeczNO2w7wjPfB2Tx+Y5+mplLEtSFi5Mp0aFZSP3tA==",
- "path": "spectre.console/0.51.2-preview.0.1",
- "hashPath": "spectre.console.0.51.2-preview.0.1.nupkg.sha512"
- },
- "Spectre.Console.Cli/0.51.2-preview.0.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-sgcQ28dkBJG66JU+BI/vhXvgqYOS+0S2OaW5sYkpShk0MzHO2hnnyg8Ef636NG6U+OmIALVZ69CP3oImeUUrag==",
- "path": "spectre.console.cli/0.51.2-preview.0.1",
- "hashPath": "spectre.console.cli.0.51.2-preview.0.1.nupkg.sha512"
- },
- "SSH.NET/2025.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-AKYbB+q2zFkNQbBFx5gXdv+Wje0baBtADQ35WnMKi4bg1ka74wTQtWoPd+fOWcydohdfsD0nfT8ErMOAPxtSfA==",
- "path": "ssh.net/2025.0.0",
- "hashPath": "ssh.net.2025.0.0.nupkg.sha512"
- },
- "VsTools.Projects/1.2.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Zja9D1HlSi+6goiAYUkcuE1dUC7MyoU4ZiXCNMcQ6JFNloHpwO8ne7cATi4jeMco56TB3Trzv+vtAiK4jDydlw==",
- "path": "vstools.projects/1.2.0",
- "hashPath": "vstools.projects.1.2.0.nupkg.sha512"
- }
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.dll
deleted file mode 100644
index fad0e9b..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.exe b/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.exe
deleted file mode 100644
index f4e5b71..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.exe and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.pdb b/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.pdb
deleted file mode 100644
index 2b60df2..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.pdb and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.runtimeconfig.json b/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.runtimeconfig.json
deleted file mode 100644
index b19c3c8..0000000
--- a/aeqw89.tools.Publish/bin/Debug/net9.0/aeqw89.tools.Publish.runtimeconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "runtimeOptions": {
- "tfm": "net9.0",
- "framework": {
- "name": "Microsoft.NETCore.App",
- "version": "9.0.0"
- },
- "configProperties": {
- "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
- }
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/de/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/de/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index bd395dd..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/de/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/es/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/es/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index af1475b..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/es/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/fr/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/fr/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index 9c85f1f..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/fr/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/it/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/it/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index da89f62..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/it/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/ja/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/ja/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index 3976be2..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/ja/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/ko/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/ko/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index 135f75c..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/ko/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/pt/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/pt/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index 89a1669..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/pt/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/ru/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/ru/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index d758506..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/ru/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/sv/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/sv/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index 89ba50f..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/sv/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/bin/Debug/net9.0/zh-Hans/Spectre.Console.Cli.resources.dll b/aeqw89.tools.Publish/bin/Debug/net9.0/zh-Hans/Spectre.Console.Cli.resources.dll
deleted file mode 100644
index 63207c4..0000000
Binary files a/aeqw89.tools.Publish/bin/Debug/net9.0/zh-Hans/Spectre.Console.Cli.resources.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/aeqw89.tools.Publish/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs
deleted file mode 100644
index feda5e9..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs
+++ /dev/null
@@ -1,4 +0,0 @@
-//
-using System;
-using System.Reflection;
-[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.t.65D2674F.Up2Date b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.t.65D2674F.Up2Date
deleted file mode 100644
index e69de29..0000000
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.AssemblyInfo.cs b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.AssemblyInfo.cs
deleted file mode 100644
index 7f89470..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.AssemblyInfo.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Reflection;
-
-[assembly: System.Reflection.AssemblyCompanyAttribute("aeqw89.tools.Publish")]
-[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
-[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
-[assembly: System.Reflection.AssemblyProductAttribute("aeqw89.tools.Publish")]
-[assembly: System.Reflection.AssemblyTitleAttribute("aeqw89.tools.Publish")]
-[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
-
-// Generated by the MSBuild WriteCodeFragment class.
-
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.AssemblyInfoInputs.cache b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.AssemblyInfoInputs.cache
deleted file mode 100644
index 2fd6cbf..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.AssemblyInfoInputs.cache
+++ /dev/null
@@ -1 +0,0 @@
-e3dc9f23098d7e7631e5f51a024428b60b92087a4a264306a861bae3c79e94dd
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.Exceptions.resources b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.Exceptions.resources
deleted file mode 100644
index 571f5bd..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.Exceptions.resources and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.GeneratedMSBuildEditorConfig.editorconfig b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.GeneratedMSBuildEditorConfig.editorconfig
deleted file mode 100644
index 0017265..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.GeneratedMSBuildEditorConfig.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-is_global = true
-build_property.TargetFramework = net9.0
-build_property.TargetPlatformMinVersion =
-build_property.UsingMicrosoftNETSdkWeb =
-build_property.ProjectTypeGuids =
-build_property.InvariantGlobalization =
-build_property.PlatformNeutralAssembly =
-build_property.EnforceExtendedAnalyzerRules =
-build_property._SupportedPlatformList = Linux,macOS,Windows
-build_property.RootNamespace = aeqw89.tools.Publish
-build_property.ProjectDir = C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\
-build_property.EnableComHosting =
-build_property.EnableGeneratedComInterfaceComImportInterop =
-build_property.EffectiveAnalysisLevelStyle = 9.0
-build_property.EnableCodeStyleSeverity =
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.GlobalUsings.g.cs b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.GlobalUsings.g.cs
deleted file mode 100644
index 8578f3d..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.GlobalUsings.g.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-global using global::System;
-global using global::System.Collections.Generic;
-global using global::System.IO;
-global using global::System.Linq;
-global using global::System.Net.Http;
-global using global::System.Threading;
-global using global::System.Threading.Tasks;
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.assets.cache b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.assets.cache
deleted file mode 100644
index 4f84117..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.assets.cache and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.AssemblyReference.cache b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.AssemblyReference.cache
deleted file mode 100644
index f9c41c0..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.AssemblyReference.cache and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.CoreCompileInputs.cache b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.CoreCompileInputs.cache
deleted file mode 100644
index fda2bd5..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.CoreCompileInputs.cache
+++ /dev/null
@@ -1 +0,0 @@
-5d197b168fe8c90856a81b99d1fce6aff6057143a768436bb5102085caca4cb0
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.FileListAbsolute.txt b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.FileListAbsolute.txt
deleted file mode 100644
index 387cef0..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.FileListAbsolute.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\aeqw89.tools.Publish.exe
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\aeqw89.tools.Publish.deps.json
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\aeqw89.tools.Publish.runtimeconfig.json
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\aeqw89.tools.Publish.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\aeqw89.tools.Publish.pdb
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\Spectre.Console.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\Spectre.Console.Cli.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\de\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\es\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\fr\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\it\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\ja\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\ko\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\pt\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\ru\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\sv\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\zh-Hans\Spectre.Console.Cli.resources.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.csproj.AssemblyReference.cache
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.Exceptions.resources
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.csproj.GenerateResource.cache
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.GeneratedMSBuildEditorConfig.editorconfig
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.AssemblyInfoInputs.cache
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.AssemblyInfo.cs
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.csproj.CoreCompileInputs.cache
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.t.65D2674F.Up2Date
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\refint\aeqw89.tools.Publish.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.pdb
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\aeqw89.tools.Publish.genruntimeconfig.cache
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\obj\Debug\net9.0\ref\aeqw89.tools.Publish.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\VsTools.Projects.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\BouncyCastle.Cryptography.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\Microsoft.Extensions.Logging.Abstractions.dll
-C:\Users\qwsdc\source\repos\aeqw89.tools.Publish\aeqw89.tools.Publish\bin\Debug\net9.0\Renci.SshNet.dll
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.GenerateResource.cache b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.GenerateResource.cache
deleted file mode 100644
index b45758b..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.csproj.GenerateResource.cache and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.dll b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.dll
deleted file mode 100644
index fad0e9b..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.genruntimeconfig.cache b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.genruntimeconfig.cache
deleted file mode 100644
index 3544434..0000000
--- a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.genruntimeconfig.cache
+++ /dev/null
@@ -1 +0,0 @@
-168cdf600308143eb70e75e0de49fe275399afb34dc3d60504d380fe24fdc670
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.pdb b/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.pdb
deleted file mode 100644
index 2b60df2..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/aeqw89.tools.Publish.pdb and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/apphost.exe b/aeqw89.tools.Publish/obj/Debug/net9.0/apphost.exe
deleted file mode 100644
index f4e5b71..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/apphost.exe and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/ref/aeqw89.tools.Publish.dll b/aeqw89.tools.Publish/obj/Debug/net9.0/ref/aeqw89.tools.Publish.dll
deleted file mode 100644
index 3123821..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/ref/aeqw89.tools.Publish.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/Debug/net9.0/refint/aeqw89.tools.Publish.dll b/aeqw89.tools.Publish/obj/Debug/net9.0/refint/aeqw89.tools.Publish.dll
deleted file mode 100644
index 3123821..0000000
Binary files a/aeqw89.tools.Publish/obj/Debug/net9.0/refint/aeqw89.tools.Publish.dll and /dev/null differ
diff --git a/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.dgspec.json b/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.dgspec.json
deleted file mode 100644
index d5afa59..0000000
--- a/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.dgspec.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "format": 1,
- "restore": {
- "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj": {}
- },
- "projects": {
- "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj": {
- "version": "1.0.0",
- "restore": {
- "projectUniqueName": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj",
- "projectName": "aeqw89.tools.Publish",
- "projectPath": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj",
- "packagesPath": "C:\\Users\\qwsdc\\.nuget\\packages\\",
- "outputPath": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\obj\\",
- "projectStyle": "PackageReference",
- "configFilePaths": [
- "C:\\Users\\qwsdc\\AppData\\Roaming\\NuGet\\NuGet.Config"
- ],
- "originalTargetFrameworks": [
- "net9.0"
- ],
- "sources": {
- "https://api.nuget.org/v3/index.json": {},
- "https://nuget.pkg.github.com/qwsdcvghyu89/index.json": {}
- },
- "frameworks": {
- "net9.0": {
- "targetAlias": "net9.0",
- "projectReferences": {}
- }
- },
- "warningProperties": {
- "warnAsError": [
- "NU1605"
- ]
- },
- "restoreAuditProperties": {
- "enableAudit": "true",
- "auditLevel": "low",
- "auditMode": "direct"
- },
- "SdkAnalysisLevel": "9.0.100"
- },
- "frameworks": {
- "net9.0": {
- "targetAlias": "net9.0",
- "dependencies": {
- "SSH.NET": {
- "target": "Package",
- "version": "[2025.0.0, )"
- },
- "Spectre.Console": {
- "target": "Package",
- "version": "[0.51.2-preview.0.1, )"
- },
- "Spectre.Console.Cli": {
- "target": "Package",
- "version": "[0.51.2-preview.0.1, )"
- },
- "VsTools.Projects": {
- "target": "Package",
- "version": "[1.2.0, )"
- }
- },
- "imports": [
- "net461",
- "net462",
- "net47",
- "net471",
- "net472",
- "net48",
- "net481"
- ],
- "assetTargetFallback": true,
- "warn": true,
- "frameworkReferences": {
- "Microsoft.NETCore.App": {
- "privateAssets": "all"
- }
- },
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.101/PortableRuntimeIdentifierGraph.json"
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.g.props b/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.g.props
deleted file mode 100644
index 8488116..0000000
--- a/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.g.props
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
- True
- NuGet
- $(MSBuildThisFileDirectory)project.assets.json
- $(UserProfile)\.nuget\packages\
- C:\Users\qwsdc\.nuget\packages\
- PackageReference
- 6.14.0
-
-
-
-
-
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.g.targets b/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.g.targets
deleted file mode 100644
index 67f9f1c..0000000
--- a/aeqw89.tools.Publish/obj/aeqw89.tools.Publish.csproj.nuget.g.targets
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/project.assets.json b/aeqw89.tools.Publish/obj/project.assets.json
deleted file mode 100644
index 3a0ab3c..0000000
--- a/aeqw89.tools.Publish/obj/project.assets.json
+++ /dev/null
@@ -1,464 +0,0 @@
-{
- "version": 3,
- "targets": {
- "net9.0": {
- "BouncyCastle.Cryptography/2.5.1": {
- "type": "package",
- "compile": {
- "lib/net6.0/BouncyCastle.Cryptography.dll": {
- "related": ".xml"
- }
- },
- "runtime": {
- "lib/net6.0/BouncyCastle.Cryptography.dll": {
- "related": ".xml"
- }
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
- "type": "package",
- "compile": {
- "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
- "related": ".xml"
- }
- },
- "runtime": {
- "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
- "related": ".xml"
- }
- },
- "build": {
- "buildTransitive/net6.0/_._": {}
- }
- },
- "Microsoft.Extensions.Logging.Abstractions/8.0.3": {
- "type": "package",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
- },
- "compile": {
- "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
- "related": ".xml"
- }
- },
- "runtime": {
- "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
- "related": ".xml"
- }
- },
- "build": {
- "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {}
- }
- },
- "Spectre.Console/0.51.2-preview.0.1": {
- "type": "package",
- "compile": {
- "lib/net9.0/Spectre.Console.dll": {
- "related": ".xml"
- }
- },
- "runtime": {
- "lib/net9.0/Spectre.Console.dll": {
- "related": ".xml"
- }
- }
- },
- "Spectre.Console.Cli/0.51.2-preview.0.1": {
- "type": "package",
- "dependencies": {
- "Spectre.Console": "0.51.2-preview.0.1"
- },
- "compile": {
- "lib/net9.0/Spectre.Console.Cli.dll": {
- "related": ".xml"
- }
- },
- "runtime": {
- "lib/net9.0/Spectre.Console.Cli.dll": {
- "related": ".xml"
- }
- },
- "resource": {
- "lib/net9.0/de/Spectre.Console.Cli.resources.dll": {
- "locale": "de"
- },
- "lib/net9.0/es/Spectre.Console.Cli.resources.dll": {
- "locale": "es"
- },
- "lib/net9.0/fr/Spectre.Console.Cli.resources.dll": {
- "locale": "fr"
- },
- "lib/net9.0/it/Spectre.Console.Cli.resources.dll": {
- "locale": "it"
- },
- "lib/net9.0/ja/Spectre.Console.Cli.resources.dll": {
- "locale": "ja"
- },
- "lib/net9.0/ko/Spectre.Console.Cli.resources.dll": {
- "locale": "ko"
- },
- "lib/net9.0/pt/Spectre.Console.Cli.resources.dll": {
- "locale": "pt"
- },
- "lib/net9.0/ru/Spectre.Console.Cli.resources.dll": {
- "locale": "ru"
- },
- "lib/net9.0/sv/Spectre.Console.Cli.resources.dll": {
- "locale": "sv"
- },
- "lib/net9.0/zh-Hans/Spectre.Console.Cli.resources.dll": {
- "locale": "zh-Hans"
- }
- }
- },
- "SSH.NET/2025.0.0": {
- "type": "package",
- "dependencies": {
- "BouncyCastle.Cryptography": "2.5.1",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.3"
- },
- "compile": {
- "lib/net9.0/Renci.SshNet.dll": {
- "related": ".xml"
- }
- },
- "runtime": {
- "lib/net9.0/Renci.SshNet.dll": {
- "related": ".xml"
- }
- }
- },
- "VsTools.Projects/1.2.0": {
- "type": "package",
- "compile": {
- "lib/netstandard2.0/VsTools.Projects.dll": {}
- },
- "runtime": {
- "lib/netstandard2.0/VsTools.Projects.dll": {}
- }
- }
- }
- },
- "libraries": {
- "BouncyCastle.Cryptography/2.5.1": {
- "sha512": "zy8TMeTP+1FH2NrLaNZtdRbBdq7u5MI+NFZQOBSM69u5RFkciinwzV2eveY6Kjf5MzgsYvvl6kTStsj3JrXqkg==",
- "type": "package",
- "path": "bouncycastle.cryptography/2.5.1",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "LICENSE.md",
- "README.md",
- "bouncycastle.cryptography.2.5.1.nupkg.sha512",
- "bouncycastle.cryptography.nuspec",
- "lib/net461/BouncyCastle.Cryptography.dll",
- "lib/net461/BouncyCastle.Cryptography.xml",
- "lib/net6.0/BouncyCastle.Cryptography.dll",
- "lib/net6.0/BouncyCastle.Cryptography.xml",
- "lib/netstandard2.0/BouncyCastle.Cryptography.dll",
- "lib/netstandard2.0/BouncyCastle.Cryptography.xml",
- "packageIcon.png"
- ]
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
- "sha512": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
- "type": "package",
- "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "Icon.png",
- "LICENSE.TXT",
- "PACKAGE.md",
- "THIRD-PARTY-NOTICES.TXT",
- "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
- "buildTransitive/net462/_._",
- "buildTransitive/net6.0/_._",
- "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
- "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
- "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
- "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
- "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
- "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
- "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
- "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
- "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
- "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
- "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
- "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
- "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
- "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
- "microsoft.extensions.dependencyinjection.abstractions.nuspec",
- "useSharedDesignerContext.txt"
- ]
- },
- "Microsoft.Extensions.Logging.Abstractions/8.0.3": {
- "sha512": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==",
- "type": "package",
- "path": "microsoft.extensions.logging.abstractions/8.0.3",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "Icon.png",
- "LICENSE.TXT",
- "PACKAGE.md",
- "THIRD-PARTY-NOTICES.TXT",
- "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll",
- "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll",
- "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll",
- "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
- "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
- "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets",
- "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets",
- "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets",
- "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets",
- "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets",
- "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll",
- "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml",
- "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll",
- "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml",
- "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll",
- "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.xml",
- "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll",
- "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml",
- "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
- "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
- "microsoft.extensions.logging.abstractions.8.0.3.nupkg.sha512",
- "microsoft.extensions.logging.abstractions.nuspec",
- "useSharedDesignerContext.txt"
- ]
- },
- "Spectre.Console/0.51.2-preview.0.1": {
- "sha512": "eTojiXsispvwl5i3o6BsBt0fV7pn+jsJ3nbQVCTCwBoYbeczNO2w7wjPfB2Tx+Y5+mplLEtSFi5Mp0aFZSP3tA==",
- "type": "package",
- "path": "spectre.console/0.51.2-preview.0.1",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "README.md",
- "lib/net8.0/Spectre.Console.dll",
- "lib/net8.0/Spectre.Console.xml",
- "lib/net9.0/Spectre.Console.dll",
- "lib/net9.0/Spectre.Console.xml",
- "lib/netstandard2.0/Spectre.Console.dll",
- "lib/netstandard2.0/Spectre.Console.xml",
- "logo.png",
- "spectre.console.0.51.2-preview.0.1.nupkg.sha512",
- "spectre.console.nuspec"
- ]
- },
- "Spectre.Console.Cli/0.51.2-preview.0.1": {
- "sha512": "sgcQ28dkBJG66JU+BI/vhXvgqYOS+0S2OaW5sYkpShk0MzHO2hnnyg8Ef636NG6U+OmIALVZ69CP3oImeUUrag==",
- "type": "package",
- "path": "spectre.console.cli/0.51.2-preview.0.1",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "README.md",
- "lib/net8.0/Spectre.Console.Cli.dll",
- "lib/net8.0/Spectre.Console.Cli.xml",
- "lib/net8.0/de/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/es/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/fr/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/it/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/ja/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/ko/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/pt/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/ru/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/sv/Spectre.Console.Cli.resources.dll",
- "lib/net8.0/zh-Hans/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/Spectre.Console.Cli.dll",
- "lib/net9.0/Spectre.Console.Cli.xml",
- "lib/net9.0/de/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/es/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/fr/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/it/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/ja/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/ko/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/pt/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/ru/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/sv/Spectre.Console.Cli.resources.dll",
- "lib/net9.0/zh-Hans/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/Spectre.Console.Cli.dll",
- "lib/netstandard2.0/Spectre.Console.Cli.xml",
- "lib/netstandard2.0/de/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/es/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/fr/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/it/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/ja/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/ko/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/pt/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/ru/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/sv/Spectre.Console.Cli.resources.dll",
- "lib/netstandard2.0/zh-Hans/Spectre.Console.Cli.resources.dll",
- "logo.png",
- "spectre.console.cli.0.51.2-preview.0.1.nupkg.sha512",
- "spectre.console.cli.nuspec"
- ]
- },
- "SSH.NET/2025.0.0": {
- "sha512": "AKYbB+q2zFkNQbBFx5gXdv+Wje0baBtADQ35WnMKi4bg1ka74wTQtWoPd+fOWcydohdfsD0nfT8ErMOAPxtSfA==",
- "type": "package",
- "path": "ssh.net/2025.0.0",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "README.md",
- "SS-NET-icon-h500.png",
- "lib/net462/Renci.SshNet.dll",
- "lib/net462/Renci.SshNet.xml",
- "lib/net8.0/Renci.SshNet.dll",
- "lib/net8.0/Renci.SshNet.xml",
- "lib/net9.0/Renci.SshNet.dll",
- "lib/net9.0/Renci.SshNet.xml",
- "lib/netstandard2.0/Renci.SshNet.dll",
- "lib/netstandard2.0/Renci.SshNet.xml",
- "lib/netstandard2.1/Renci.SshNet.dll",
- "lib/netstandard2.1/Renci.SshNet.xml",
- "ssh.net.2025.0.0.nupkg.sha512",
- "ssh.net.nuspec"
- ]
- },
- "VsTools.Projects/1.2.0": {
- "sha512": "Zja9D1HlSi+6goiAYUkcuE1dUC7MyoU4ZiXCNMcQ6JFNloHpwO8ne7cATi4jeMco56TB3Trzv+vtAiK4jDydlw==",
- "type": "package",
- "path": "vstools.projects/1.2.0",
- "files": [
- ".nupkg.metadata",
- ".signature.p7s",
- "lib/net452/VsTools.Projects.dll",
- "lib/net462/VsTools.Projects.dll",
- "lib/net48/VsTools.Projects.dll",
- "lib/netstandard2.0/VsTools.Projects.dll",
- "vstools.projects.1.2.0.nupkg.sha512",
- "vstools.projects.nuspec"
- ]
- }
- },
- "projectFileDependencyGroups": {
- "net9.0": [
- "SSH.NET >= 2025.0.0",
- "Spectre.Console >= 0.51.2-preview.0.1",
- "Spectre.Console.Cli >= 0.51.2-preview.0.1",
- "VsTools.Projects >= 1.2.0"
- ]
- },
- "packageFolders": {
- "C:\\Users\\qwsdc\\.nuget\\packages\\": {}
- },
- "project": {
- "version": "1.0.0",
- "restore": {
- "projectUniqueName": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj",
- "projectName": "aeqw89.tools.Publish",
- "projectPath": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj",
- "packagesPath": "C:\\Users\\qwsdc\\.nuget\\packages\\",
- "outputPath": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\obj\\",
- "projectStyle": "PackageReference",
- "configFilePaths": [
- "C:\\Users\\qwsdc\\AppData\\Roaming\\NuGet\\NuGet.Config"
- ],
- "originalTargetFrameworks": [
- "net9.0"
- ],
- "sources": {
- "https://api.nuget.org/v3/index.json": {},
- "https://nuget.pkg.github.com/qwsdcvghyu89/index.json": {}
- },
- "frameworks": {
- "net9.0": {
- "targetAlias": "net9.0",
- "projectReferences": {}
- }
- },
- "warningProperties": {
- "warnAsError": [
- "NU1605"
- ]
- },
- "restoreAuditProperties": {
- "enableAudit": "true",
- "auditLevel": "low",
- "auditMode": "direct"
- },
- "SdkAnalysisLevel": "9.0.100"
- },
- "frameworks": {
- "net9.0": {
- "targetAlias": "net9.0",
- "dependencies": {
- "SSH.NET": {
- "target": "Package",
- "version": "[2025.0.0, )"
- },
- "Spectre.Console": {
- "target": "Package",
- "version": "[0.51.2-preview.0.1, )"
- },
- "Spectre.Console.Cli": {
- "target": "Package",
- "version": "[0.51.2-preview.0.1, )"
- },
- "VsTools.Projects": {
- "target": "Package",
- "version": "[1.2.0, )"
- }
- },
- "imports": [
- "net461",
- "net462",
- "net47",
- "net471",
- "net472",
- "net48",
- "net481"
- ],
- "assetTargetFallback": true,
- "warn": true,
- "frameworkReferences": {
- "Microsoft.NETCore.App": {
- "privateAssets": "all"
- }
- },
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.101/PortableRuntimeIdentifierGraph.json"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/project.nuget.cache b/aeqw89.tools.Publish/obj/project.nuget.cache
deleted file mode 100644
index edaeb1a..0000000
--- a/aeqw89.tools.Publish/obj/project.nuget.cache
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "version": 2,
- "dgSpecHash": "KOrx7rOcVCU=",
- "success": true,
- "projectFilePath": "C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj",
- "expectedPackageFiles": [
- "C:\\Users\\qwsdc\\.nuget\\packages\\bouncycastle.cryptography\\2.5.1\\bouncycastle.cryptography.2.5.1.nupkg.sha512",
- "C:\\Users\\qwsdc\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
- "C:\\Users\\qwsdc\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.3\\microsoft.extensions.logging.abstractions.8.0.3.nupkg.sha512",
- "C:\\Users\\qwsdc\\.nuget\\packages\\spectre.console\\0.51.2-preview.0.1\\spectre.console.0.51.2-preview.0.1.nupkg.sha512",
- "C:\\Users\\qwsdc\\.nuget\\packages\\spectre.console.cli\\0.51.2-preview.0.1\\spectre.console.cli.0.51.2-preview.0.1.nupkg.sha512",
- "C:\\Users\\qwsdc\\.nuget\\packages\\ssh.net\\2025.0.0\\ssh.net.2025.0.0.nupkg.sha512",
- "C:\\Users\\qwsdc\\.nuget\\packages\\vstools.projects\\1.2.0\\vstools.projects.1.2.0.nupkg.sha512"
- ],
- "logs": []
-}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/project.packagespec.json b/aeqw89.tools.Publish/obj/project.packagespec.json
deleted file mode 100644
index 893cc04..0000000
--- a/aeqw89.tools.Publish/obj/project.packagespec.json
+++ /dev/null
@@ -1 +0,0 @@
-"restore":{"projectUniqueName":"C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj","projectName":"aeqw89.tools.Publish","projectPath":"C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\aeqw89.tools.Publish.csproj","outputPath":"C:\\Users\\qwsdc\\source\\repos\\aeqw89.tools.Publish\\aeqw89.tools.Publish\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net9.0"],"sources":{"https://api.nuget.org/v3/index.json":{},"https://nuget.pkg.github.com/qwsdcvghyu89/index.json":{}},"frameworks":{"net9.0":{"targetAlias":"net9.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.100"}"frameworks":{"net9.0":{"targetAlias":"net9.0","dependencies":{"SSH.NET":{"target":"Package","version":"[2025.0.0, )"},"Spectre.Console":{"target":"Package","version":"[0.51.2-preview.0.1, )"},"Spectre.Console.Cli":{"target":"Package","version":"[0.51.2-preview.0.1, )"},"VsTools.Projects":{"target":"Package","version":"[1.2.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\9.0.101/PortableRuntimeIdentifierGraph.json"}}
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/rider.project.model.nuget.info b/aeqw89.tools.Publish/obj/rider.project.model.nuget.info
deleted file mode 100644
index 28e2bc2..0000000
--- a/aeqw89.tools.Publish/obj/rider.project.model.nuget.info
+++ /dev/null
@@ -1 +0,0 @@
-17584140259343453
\ No newline at end of file
diff --git a/aeqw89.tools.Publish/obj/rider.project.restore.info b/aeqw89.tools.Publish/obj/rider.project.restore.info
deleted file mode 100644
index c7649ce..0000000
--- a/aeqw89.tools.Publish/obj/rider.project.restore.info
+++ /dev/null
@@ -1 +0,0 @@
-17584254157830058
\ No newline at end of file