diff --git a/mRemoteNG/App/Info/ConnectionsFileInfo.cs b/mRemoteNG/App/Info/ConnectionsFileInfo.cs index 42a5721d..b380ba54 100644 --- a/mRemoteNG/App/Info/ConnectionsFileInfo.cs +++ b/mRemoteNG/App/Info/ConnectionsFileInfo.cs @@ -1,7 +1,9 @@ using System; +using System.Runtime.Versioning; namespace mRemoteNG.App.Info { + [SupportedOSPlatform("windows")] public static class ConnectionsFileInfo { public static readonly string DefaultConnectionsPath = SettingsFileInfo.SettingsPath; diff --git a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs index 2fd6b21d..21562673 100644 --- a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs +++ b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs @@ -1,9 +1,11 @@ using System; using System.Data.SqlClient; +using System.Runtime.Versioning; using System.Threading.Tasks; namespace mRemoteNG.Config.DatabaseConnectors { + [SupportedOSPlatform("windows")] /// /// A helper class for testing database connectivity /// diff --git a/mRemoteNG/Config/Import/PortScanImporter.cs b/mRemoteNG/Config/Import/PortScanImporter.cs index 6a6cb9db..d76f931d 100644 --- a/mRemoteNG/Config/Import/PortScanImporter.cs +++ b/mRemoteNG/Config/Import/PortScanImporter.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Config.Serializers.MiscSerializers; using mRemoteNG.Connection.Protocol; using mRemoteNG.Container; @@ -8,6 +9,7 @@ using mRemoteNG.Tools; namespace mRemoteNG.Config.Import { + [SupportedOSPlatform("windows")] public class PortScanImporter : IConnectionImporter> { private readonly ProtocolType _targetProtocolType; diff --git a/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs b/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs index c6efb46d..82991495 100644 --- a/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs +++ b/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs @@ -4,11 +4,13 @@ using System.Linq; using mRemoteNG.Connection; using mRemoteNG.Tree.Root; using System.Net; +using System.Runtime.Versioning; // ReSharper disable ArrangeAccessorOwnerBody namespace mRemoteNG.Config.Putty { + [SupportedOSPlatform("windows")] public abstract class AbstractPuttySessionsProvider { public virtual RootPuttySessionsNodeInfo RootInfo { get; } = new RootPuttySessionsNodeInfo(); @@ -60,20 +62,14 @@ namespace mRemoteNG.Config.Putty if (string.IsNullOrEmpty(sessionInfo?.Name) || Sessions.Any(child => child.Name == sessionInfo.Name)) return; RootInfo.AddChild(sessionInfo); - RaisePuttySessionCollectionChangedEvent( - new - NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, - sessionInfo)); + RaisePuttySessionCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, sessionInfo)); } protected virtual void RemoveSession(PuttySessionInfo sessionInfo) { if (!Sessions.Contains(sessionInfo)) return; RootInfo.RemoveChild(sessionInfo); - RaisePuttySessionCollectionChangedEvent( - new - NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, - sessionInfo)); + RaisePuttySessionCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, sessionInfo)); } public virtual void StartWatcher() diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs index a9369e5f..f6fe3bc3 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Connection.Protocol.Http; @@ -12,6 +13,7 @@ using mRemoteNG.Tree.Root; namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv { + [SupportedOSPlatform("windows")] public class CsvConnectionsDeserializerMremotengFormat : IDeserializer { public ConnectionTreeModel Deserialize(string serializedData) diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs index cd221ef5..e12341b6 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Runtime.Versioning; using System.Text; using mRemoteNG.Connection; using mRemoteNG.Container; @@ -11,6 +12,7 @@ using mRemoteNG.Tree.Root; namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv { + [SupportedOSPlatform("windows")] public class CsvConnectionsSerializerMremotengFormat : ISerializer { private readonly SaveFilter _saveFilter; diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs index ae2e4fd3..99aca4f1 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Container; @@ -10,217 +11,219 @@ using mRemoteNG.Tree; #endregion -namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopManager; - -/// -/// Import of connections from the Remote Desktop Manager (RDM) in a CSV file format -/// -public partial class CsvConnectionsDeserializerRdmFormat : IDeserializer +namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopManager { - private readonly List _connectionTypes; - private readonly HashSet _groups; - - public CsvConnectionsDeserializerRdmFormat() + [SupportedOSPlatform("windows")] + /// + /// Import of connections from the Remote Desktop Manager (RDM) in a CSV file format + /// + public partial class CsvConnectionsDeserializerRdmFormat : IDeserializer { - _connectionTypes = new List + private readonly List _connectionTypes; + private readonly HashSet _groups; + + public CsvConnectionsDeserializerRdmFormat() + { + _connectionTypes = new List { new(ProtocolType.RDP, "RDP (Microsoft Remote Desktop)", 3389, "Remote Desktop"), new(ProtocolType.SSH2, "SSH Shell", 22, "SSH") }; - _groups = new HashSet(); + _groups = new HashSet(); - Containers = new List(); - } - - private List Containers { get; } - - /// - /// Deserializes the CSV file into a - /// - /// Data from the CSV file - /// - public ConnectionTreeModel Deserialize(string serializedData) - { - var lines = serializedData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); - var csvHeaders = new List(); - - var connections = new List<(ConnectionInfo, string)>(); // (ConnectionInfo, group) - - for (var lineNumber = 0; lineNumber < lines.Length; lineNumber++) - { - var line = lines[lineNumber].Split(','); - if (lineNumber == 0) - { - csvHeaders = line.ToList(); - } - else - { - var (connectionInfo, group) = ParseConnectionInfo(csvHeaders, line); - if (connectionInfo == default) continue; - - connections.Add((connectionInfo, group)); - } + Containers = new List(); } - var connectionTreeModel = new ConnectionTreeModel(); - var unsortedConnections = new ContainerInfo { Name = "Unsorted" }; + private List Containers { get; } - foreach (var containerInfo in Containers) connectionTreeModel.AddRootNode(containerInfo); - - var allChildren = Containers.SelectMany(x => x.GetRecursiveChildList().Select(y => (ContainerInfo)y)).ToList(); - - foreach (var (connection, path) in connections) - if (string.IsNullOrEmpty(path)) - { - unsortedConnections.AddChild(connection); - } - else - { - var container = allChildren.FirstOrDefault(x => x.ConstantID == path); - if (container == default) continue; - - container.AddChild(connection); - } - - if (unsortedConnections.HasChildren()) - connectionTreeModel.AddRootNode(unsortedConnections); - - return connectionTreeModel; - } - - /// - /// Parses a line from the CSV file and returns - /// - /// CSV Headers - /// CSV Columns - /// - private (ConnectionInfo connectionInfo, string) ParseConnectionInfo(IList headers, IReadOnlyList connectionCsv) - { - if (headers.Count != connectionCsv.Count) return default; - - var hostString = connectionCsv[headers.IndexOf("Host")].Trim(); - if (string.IsNullOrEmpty(hostString)) return default; - - var hostType = Uri.CheckHostName(hostString); - if (hostType == UriHostNameType.Unknown) return default; - - var connectionTypeString = connectionCsv[headers.IndexOf("ConnectionType")]; - if (string.IsNullOrEmpty(connectionTypeString)) return default; - - var connectionType = _connectionTypes.FirstOrDefault(x => x.Name == connectionTypeString); - if (connectionType == default) return default; - - var portString = connectionCsv[headers.IndexOf("Port")] ?? connectionType.Port.ToString(); - if (!int.TryParse(portString, out var port)) port = connectionType.Port; - - var name = connectionCsv[headers.IndexOf("Name")]; - var description = connectionCsv[headers.IndexOf("Description")]; - var group = connectionCsv[headers.IndexOf("Group")]; - - var username = connectionCsv[headers.IndexOf("CredentialUserName")]; - var domain = connectionCsv[headers.IndexOf("CredentialDomain")]; - var password = connectionCsv[headers.IndexOf("CredentialPassword")]; - - var connectionInfo = new ConnectionInfo(Guid.NewGuid().ToString()) + /// + /// Deserializes the CSV file into a + /// + /// Data from the CSV file + /// + public ConnectionTreeModel Deserialize(string serializedData) { - Name = name, - Hostname = hostString, - Port = port, - Username = username, - Password = password, - Domain = domain, - Icon = connectionType.IconName ?? "mRemoteNG", - Description = description, - Protocol = connectionType.Protocol - }; + var lines = serializedData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); + var csvHeaders = new List(); - if (!string.IsNullOrEmpty(group)) - if (group.Contains('\\')) + var connections = new List<(ConnectionInfo, string)>(); // (ConnectionInfo, group) + + for (var lineNumber = 0; lineNumber < lines.Length; lineNumber++) { - var groupParts = group.Split('\\').ToList(); - var parentContainerName = groupParts[0]; - - var parentContainer = Containers.FirstOrDefault(x => x.Name == parentContainerName); - if (parentContainer == default) + var line = lines[lineNumber].Split(','); + if (lineNumber == 0) { - parentContainer = new ContainerInfo(group) { Name = parentContainerName }; - Containers.Add(parentContainer); + csvHeaders = line.ToList(); + } + else + { + var (connectionInfo, group) = ParseConnectionInfo(csvHeaders, line); + if (connectionInfo == default) continue; + + connections.Add((connectionInfo, group)); + } + } + + var connectionTreeModel = new ConnectionTreeModel(); + var unsortedConnections = new ContainerInfo { Name = "Unsorted" }; + + foreach (var containerInfo in Containers) connectionTreeModel.AddRootNode(containerInfo); + + var allChildren = Containers.SelectMany(x => x.GetRecursiveChildList().Select(y => (ContainerInfo)y)).ToList(); + + foreach (var (connection, path) in connections) + if (string.IsNullOrEmpty(path)) + { + unsortedConnections.AddChild(connection); + } + else + { + var container = allChildren.FirstOrDefault(x => x.ConstantID == path); + if (container == default) continue; + + container.AddChild(connection); } - groupParts.RemoveAt(0); + if (unsortedConnections.HasChildren()) + connectionTreeModel.AddRootNode(unsortedConnections); - AddChildrenRecursive(group, groupParts, parentContainer); - } + return connectionTreeModel; + } - return string.IsNullOrEmpty(group) ? (connectionInfo, default) : (connectionInfo, group); - } - - /// - /// Adds a child to a container recursively - /// - /// Full path of the RDM Grouping - /// Segements of the group path - /// Parent container to add children to - private void AddChildrenRecursive(string group, IList groupParts, ContainerInfo parentContainer) - { - if (_groups.Contains(group)) return; - - var groupCount = groupParts.Count; - while (groupCount > 0) + /// + /// Parses a line from the CSV file and returns + /// + /// CSV Headers + /// CSV Columns + /// + private (ConnectionInfo connectionInfo, string) ParseConnectionInfo(IList headers, IReadOnlyList connectionCsv) { - var childName = groupParts[0]; - var newContainer = new ContainerInfo(group) { Name = childName }; + if (headers.Count != connectionCsv.Count) return default; - var childrenNames = parentContainer.GetRecursiveChildList().Select(x => x.Name).ToList(); - if (!childrenNames.Any()) - { - groupCount = AddChild(parentContainer, newContainer, groupCount); - _groups.Add(group); - continue; - } + var hostString = connectionCsv[headers.IndexOf("Host")].Trim(); + if (string.IsNullOrEmpty(hostString)) return default; - if (groupParts.Count > 1) + var hostType = Uri.CheckHostName(hostString); + if (hostType == UriHostNameType.Unknown) return default; + + var connectionTypeString = connectionCsv[headers.IndexOf("ConnectionType")]; + if (string.IsNullOrEmpty(connectionTypeString)) return default; + + var connectionType = _connectionTypes.FirstOrDefault(x => x.Name == connectionTypeString); + if (connectionType == default) return default; + + var portString = connectionCsv[headers.IndexOf("Port")] ?? connectionType.Port.ToString(); + if (!int.TryParse(portString, out var port)) port = connectionType.Port; + + var name = connectionCsv[headers.IndexOf("Name")]; + var description = connectionCsv[headers.IndexOf("Description")]; + var group = connectionCsv[headers.IndexOf("Group")]; + + var username = connectionCsv[headers.IndexOf("CredentialUserName")]; + var domain = connectionCsv[headers.IndexOf("CredentialDomain")]; + var password = connectionCsv[headers.IndexOf("CredentialPassword")]; + + var connectionInfo = new ConnectionInfo(Guid.NewGuid().ToString()) { - var childContainer = (ContainerInfo)parentContainer.Children.FirstOrDefault(x => x.Name == childName); - if (childContainer == default) + Name = name, + Hostname = hostString, + Port = port, + Username = username, + Password = password, + Domain = domain, + Icon = connectionType.IconName ?? "mRemoteNG", + Description = description, + Protocol = connectionType.Protocol + }; + + if (!string.IsNullOrEmpty(group)) + if (group.Contains('\\')) + { + var groupParts = group.Split('\\').ToList(); + var parentContainerName = groupParts[0]; + + var parentContainer = Containers.FirstOrDefault(x => x.Name == parentContainerName); + if (parentContainer == default) + { + parentContainer = new ContainerInfo(group) { Name = parentContainerName }; + Containers.Add(parentContainer); + } + + groupParts.RemoveAt(0); + + AddChildrenRecursive(group, groupParts, parentContainer); + } + + return string.IsNullOrEmpty(group) ? (connectionInfo, default) : (connectionInfo, group); + } + + /// + /// Adds a child to a container recursively + /// + /// Full path of the RDM Grouping + /// Segements of the group path + /// Parent container to add children to + private void AddChildrenRecursive(string group, IList groupParts, ContainerInfo parentContainer) + { + if (_groups.Contains(group)) return; + + var groupCount = groupParts.Count; + while (groupCount > 0) + { + var childName = groupParts[0]; + var newContainer = new ContainerInfo(group) { Name = childName }; + + var childrenNames = parentContainer.GetRecursiveChildList().Select(x => x.Name).ToList(); + if (!childrenNames.Any()) { groupCount = AddChild(parentContainer, newContainer, groupCount); + _groups.Add(group); continue; } - AddChildrenRecursive(group, groupParts.Skip(1).ToList(), childContainer); - } - else - { - parentContainer.AddChild(newContainer); - _groups.Add(group); - } + if (groupParts.Count > 1) + { + var childContainer = (ContainerInfo)parentContainer.Children.FirstOrDefault(x => x.Name == childName); + if (childContainer == default) + { + groupCount = AddChild(parentContainer, newContainer, groupCount); + continue; + } + AddChildrenRecursive(group, groupParts.Skip(1).ToList(), childContainer); + } + else + { + parentContainer.AddChild(newContainer); + _groups.Add(group); + } + + groupCount--; + } + } + + /// + /// Adds a child to a container and returns the remaining group count + /// + /// Parent container + /// New child container + /// Remaining group count + /// + private static int AddChild(ContainerInfo parentContainer, ContainerInfo newContainer, int groupCount) + { + parentContainer.AddChild(newContainer); groupCount--; + return groupCount; } } /// - /// Adds a child to a container and returns the remaining group count + /// Record of supported connection types /// - /// Parent container - /// New child container - /// Remaining group count - /// - private static int AddChild(ContainerInfo parentContainer, ContainerInfo newContainer, int groupCount) - { - parentContainer.AddChild(newContainer); - groupCount--; - return groupCount; - } -} - -/// -/// Record of supported connection types -/// -/// Procotol -/// Display Name -/// Default Port -/// Icon Name -internal sealed record RemoteDesktopManagerConnectionInfo(ProtocolType Protocol, string Name, int Port, string IconName); \ No newline at end of file + /// Procotol + /// Display Name + /// Default Port + /// Icon Name + internal sealed record RemoteDesktopManagerConnectionInfo(ProtocolType Protocol, string Name, int Port, string IconName); +} \ No newline at end of file diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs index 6fe7f485..ece3d65b 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Connection; using mRemoteNG.Security; using mRemoteNG.Tree; @@ -6,6 +7,7 @@ using mRemoteNG.Tree.Root; namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { + [SupportedOSPlatform("windows")] public class XmlConnectionSerializerFactory { public ISerializer Build( diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs index ac6344af..8c6e4d39 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs @@ -1,10 +1,12 @@ using System; +using System.Runtime.Versioning; using System.Xml.Linq; using mRemoteNG.Security; using mRemoteNG.Tree.Root; namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { + [SupportedOSPlatform("windows")] public class XmlRootNodeSerializer { public XElement SerializeRootNodeInfo(RootNodeInfo rootNodeInfo, ICryptographyProvider cryptographyProvider, Version version, bool fullFileEncryption = false) diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs index 3d6e96fe..0628ce6f 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Runtime.Versioning; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Container; @@ -8,6 +9,7 @@ using mRemoteNG.Tree.Root; namespace mRemoteNG.Config.Serializers.MiscSerializers { + [SupportedOSPlatform("windows")] public class PortScanDeserializer : IDeserializer, ConnectionTreeModel> { private readonly ProtocolType _targetProtocolType; diff --git a/mRemoteNG/Connection/AbstractConnectionRecord.cs b/mRemoteNG/Connection/AbstractConnectionRecord.cs index c5c8c227..30d3234c 100644 --- a/mRemoteNG/Connection/AbstractConnectionRecord.cs +++ b/mRemoteNG/Connection/AbstractConnectionRecord.cs @@ -8,9 +8,11 @@ using mRemoteNG.Properties; using mRemoteNG.Tools; using mRemoteNG.Tools.Attributes; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.Connection { + [SupportedOSPlatform("windows")] public abstract class AbstractConnectionRecord : INotifyPropertyChanged { #region Fields diff --git a/mRemoteNG/Connection/ConnectionInfoComparer.cs b/mRemoteNG/Connection/ConnectionInfoComparer.cs index 0783c2b1..8c6a4a17 100644 --- a/mRemoteNG/Connection/ConnectionInfoComparer.cs +++ b/mRemoteNG/Connection/ConnectionInfoComparer.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using System.ComponentModel; - +using System.Runtime.Versioning; namespace mRemoteNG.Connection { + [SupportedOSPlatform("windows")] public class ConnectionInfoComparer : IComparer where TProperty : IComparable { private readonly Func _sortExpression; diff --git a/mRemoteNG/Connection/ConnectionInfoInheritance.cs b/mRemoteNG/Connection/ConnectionInfoInheritance.cs index 0b9d3894..0ee451cc 100644 --- a/mRemoteNG/Connection/ConnectionInfoInheritance.cs +++ b/mRemoteNG/Connection/ConnectionInfoInheritance.cs @@ -5,9 +5,11 @@ using System.Reflection; using mRemoteNG.Tools; using mRemoteNG.Tree.Root; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.Connection { + [SupportedOSPlatform("windows")] public class ConnectionInfoInheritance { private ConnectionInfoInheritance _tempInheritanceStorage; diff --git a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTP.cs b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTP.cs index 3ebf3007..72956503 100644 --- a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTP.cs +++ b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTP.cs @@ -1,5 +1,9 @@ +using Mysqlx.Notice; +using System.Runtime.Versioning; + namespace mRemoteNG.Connection.Protocol.Http { + [SupportedOSPlatform("windows")] public class ProtocolHTTP : HTTPBase { public ProtocolHTTP(RenderingEngine RenderingEngine) : base(RenderingEngine) diff --git a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPS.cs b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPS.cs index 90f35f5a..1946c648 100644 --- a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPS.cs +++ b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPS.cs @@ -1,7 +1,10 @@ +using System.Runtime.Versioning; + namespace mRemoteNG.Connection.Protocol.Http { public class ProtocolHTTPS : HTTPBase { + [SupportedOSPlatform("windows")] public ProtocolHTTPS(RenderingEngine RenderingEngine) : base(RenderingEngine) { httpOrS = "https"; diff --git a/mRemoteNG/Connection/Protocol/SSH/Connection.Protocol.SSH1.cs b/mRemoteNG/Connection/Protocol/SSH/Connection.Protocol.SSH1.cs index 8472308d..b56de9e1 100644 --- a/mRemoteNG/Connection/Protocol/SSH/Connection.Protocol.SSH1.cs +++ b/mRemoteNG/Connection/Protocol/SSH/Connection.Protocol.SSH1.cs @@ -1,5 +1,8 @@ +using System.Runtime.Versioning; + namespace mRemoteNG.Connection.Protocol.SSH { + [SupportedOSPlatform("windows")] public class ProtocolSSH1 : PuttyBase { public ProtocolSSH1() diff --git a/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs b/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs index e9bd2370..971e2d93 100644 --- a/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs +++ b/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs @@ -6,12 +6,14 @@ using mRemoteNG.App; using mRemoteNG.Tools; using mRemoteNG.UI.Forms; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; // ReSharper disable ArrangeAccessorOwnerBody namespace mRemoteNG.Connection.Protocol.VNC { + [SupportedOSPlatform("windows")] public class ProtocolVNC : ProtocolBase { #region Private Declarations diff --git a/mRemoteNG/Container/ContainerInfo.cs b/mRemoteNG/Container/ContainerInfo.cs index a98eb368..473f9833 100644 --- a/mRemoteNG/Container/ContainerInfo.cs +++ b/mRemoteNG/Container/ContainerInfo.cs @@ -3,12 +3,14 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Tree; namespace mRemoteNG.Container { + [SupportedOSPlatform("windows")] [DefaultProperty("Name")] public class ContainerInfo : ConnectionInfo, INotifyCollectionChanged { diff --git a/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs b/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs index 0a4df2be..4f51e8c1 100644 --- a/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs +++ b/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs @@ -1,10 +1,12 @@ using System; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.UI; using mRemoteNG.UI.Window; namespace mRemoteNG.Messages.MessageWriters { + [SupportedOSPlatform("windows")] public class NotificationPanelMessageWriter : IMessageWriter { private readonly ErrorAndInfoWindow _messageWindow; diff --git a/mRemoteNG/Messages/MessageWriters/TextLogMessageWriter.cs b/mRemoteNG/Messages/MessageWriters/TextLogMessageWriter.cs index 634cbc4d..da1b89e3 100644 --- a/mRemoteNG/Messages/MessageWriters/TextLogMessageWriter.cs +++ b/mRemoteNG/Messages/MessageWriters/TextLogMessageWriter.cs @@ -1,8 +1,10 @@ using System; +using System.Runtime.Versioning; using mRemoteNG.App; namespace mRemoteNG.Messages.MessageWriters { + [SupportedOSPlatform("windows")] public class TextLogMessageWriter : IMessageWriter { private readonly Logger _logger; diff --git a/mRemoteNG/Security/Factories/LegacyInsecureCryptoProviderFactory.cs b/mRemoteNG/Security/Factories/LegacyInsecureCryptoProviderFactory.cs index fc87cccb..2a18a0d4 100644 --- a/mRemoteNG/Security/Factories/LegacyInsecureCryptoProviderFactory.cs +++ b/mRemoteNG/Security/Factories/LegacyInsecureCryptoProviderFactory.cs @@ -1,7 +1,9 @@ using mRemoteNG.Security.SymmetricEncryption; +using System.Runtime.Versioning; namespace mRemoteNG.Security.Factories { + [SupportedOSPlatform("windows")] public class LegacyInsecureCryptoProviderFactory : ICryptoProviderFactory { public ICryptographyProvider Build() diff --git a/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs b/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs index 212d2183..220c97ee 100644 --- a/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs +++ b/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Text; @@ -10,6 +11,7 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.Security.SymmetricEncryption { + [SupportedOSPlatform("windows")] public class LegacyRijndaelCryptographyProvider : ICryptographyProvider { public int BlockSizeInBytes { get; } @@ -56,8 +58,7 @@ namespace mRemoteNG.Security.SymmetricEncryption } catch (Exception ex) { - Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, - string.Format(Language.ErrorEncryptionFailed, ex.Message)); + Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, string.Format(Language.ErrorEncryptionFailed, ex.Message)); } return strToEncrypt; diff --git a/mRemoteNG/Themes/MremoteNGThemeBase.cs b/mRemoteNG/Themes/MremoteNGThemeBase.cs index bebbf325..0dabe7b7 100644 --- a/mRemoteNG/Themes/MremoteNGThemeBase.cs +++ b/mRemoteNG/Themes/MremoteNGThemeBase.cs @@ -1,10 +1,12 @@ -namespace mRemoteNG.Themes -{ - using System.Drawing; - using UI.Tabs; - using WeifenLuo.WinFormsUI.Docking; - using WeifenLuo.WinFormsUI.ThemeVS2015; +using System.Drawing; +using System.Runtime.Versioning; +using mRemoteNG.UI.Tabs; +using WeifenLuo.WinFormsUI.Docking; +using WeifenLuo.WinFormsUI.ThemeVS2015; +namespace mRemoteNG.Themes +{ + [SupportedOSPlatform("windows")] /// /// Visual Studio 2015 Light theme. diff --git a/mRemoteNG/Themes/ThemeManager.cs b/mRemoteNG/Themes/ThemeManager.cs index 1aa10aaf..de273d89 100644 --- a/mRemoteNG/Themes/ThemeManager.cs +++ b/mRemoteNG/Themes/ThemeManager.cs @@ -9,9 +9,11 @@ using System.Linq; using mRemoteNG.Messages; using mRemoteNG.Properties; using WeifenLuo.WinFormsUI.Docking; +using System.Runtime.Versioning; namespace mRemoteNG.Themes { + [SupportedOSPlatform("windows")] /// /// Main class of the theming component. Centralizes creation, loading and deletion of themes /// Implemented as a singleton diff --git a/mRemoteNG/Themes/ThemeSerializer.cs b/mRemoteNG/Themes/ThemeSerializer.cs index 34540708..d86f8fea 100644 --- a/mRemoteNG/Themes/ThemeSerializer.cs +++ b/mRemoteNG/Themes/ThemeSerializer.cs @@ -1,9 +1,11 @@ -using System.IO; +using System.IO; using WeifenLuo.WinFormsUI.Docking; using System.Linq; +using System.Runtime.Versioning; namespace mRemoteNG.Themes { + [SupportedOSPlatform("windows")] public static class ThemeSerializer { /// diff --git a/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs b/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs index da69f37b..3800105b 100644 --- a/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs +++ b/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; +using System.Runtime.Versioning; using System.Text.RegularExpressions; using mRemoteNG.App; @@ -8,6 +9,7 @@ using mRemoteNG.App; namespace mRemoteNG.Tools.Cmdline { + [SupportedOSPlatform("windows")] // //* Arguments class: application arguments interpreter //* diff --git a/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs b/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs index c61b34d2..16b5ebf7 100644 --- a/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs +++ b/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.App.Info; using mRemoteNG.Messages; @@ -11,6 +12,7 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools.Cmdline { + [SupportedOSPlatform("windows")] public class StartupArgumentsInterpreter { private readonly MessageCollector _messageCollector; diff --git a/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs b/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs index 109d1995..a72bb30e 100644 --- a/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs +++ b/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Connection; @@ -10,6 +11,7 @@ using mRemoteNG.Tree; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class ConnectionsTreeToMenuItemsConverter { public MouseEventHandler MouseUpEventHandler { get; set; } diff --git a/mRemoteNG/Tools/ExternalToolArgumentParser.cs b/mRemoteNG/Tools/ExternalToolArgumentParser.cs index 9710f930..fe96c392 100644 --- a/mRemoteNG/Tools/ExternalToolArgumentParser.cs +++ b/mRemoteNG/Tools/ExternalToolArgumentParser.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Runtime.Versioning; using mRemoteNG.App; using mRemoteNG.Connection; using mRemoteNG.Properties; @@ -8,6 +9,7 @@ using mRemoteNG.Tools.Cmdline; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class ExternalToolArgumentParser { private readonly ConnectionInfo _connectionInfo; diff --git a/mRemoteNG/Tools/ExternalToolsService.cs b/mRemoteNG/Tools/ExternalToolsService.cs index 5957da98..f2742d7b 100644 --- a/mRemoteNG/Tools/ExternalToolsService.cs +++ b/mRemoteNG/Tools/ExternalToolsService.cs @@ -1,12 +1,13 @@ using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Tools.CustomCollections; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class ExternalToolsService { - public FullyObservableCollection ExternalTools { get; set; } = - new FullyObservableCollection(); + public FullyObservableCollection ExternalTools { get; set; } = new FullyObservableCollection(); public ExternalTool GetExtAppByName(string name) { diff --git a/mRemoteNG/Tools/ExternalToolsTypeConverter.cs b/mRemoteNG/Tools/ExternalToolsTypeConverter.cs index 4b1378e8..658413e2 100644 --- a/mRemoteNG/Tools/ExternalToolsTypeConverter.cs +++ b/mRemoteNG/Tools/ExternalToolsTypeConverter.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; using System.ComponentModel; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class ExternalToolsTypeConverter : StringConverter { public static string[] ExternalTools diff --git a/mRemoteNG/Tools/MouseClickSimulator.cs b/mRemoteNG/Tools/MouseClickSimulator.cs index d0b70226..ca65b6b0 100644 --- a/mRemoteNG/Tools/MouseClickSimulator.cs +++ b/mRemoteNG/Tools/MouseClickSimulator.cs @@ -1,10 +1,12 @@ using System; using System.Drawing; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.App; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class MouseClickSimulator { public static void Click(Control controlToClick, Point currentMousePosition) diff --git a/mRemoteNG/Tools/PortScanner.cs b/mRemoteNG/Tools/PortScanner.cs index 3ff3939e..a3cd6b9c 100644 --- a/mRemoteNG/Tools/PortScanner.cs +++ b/mRemoteNG/Tools/PortScanner.cs @@ -5,6 +5,7 @@ using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Threading; using mRemoteNG.App; using mRemoteNG.Messages; @@ -12,6 +13,7 @@ using mRemoteNG.Messages; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class PortScanner { private readonly List _ipAddresses = new List(); @@ -113,9 +115,7 @@ namespace mRemoteNG.Tools try { _hostCount = 0; - Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, - $"Tools.PortScan: Starting scan of {_ipAddresses.Count} hosts...", - true); + Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Tools.PortScan: Starting scan of {_ipAddresses.Count} hosts...", true); foreach (var ipAddress in _ipAddresses) { RaiseBeginHostScanEvent(ipAddress); @@ -130,17 +130,13 @@ namespace mRemoteNG.Tools } catch (Exception ex) { - Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, - $"Tools.PortScan: Ping failed for {ipAddress} {Environment.NewLine} {ex.Message}", - true); + Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, $"Tools.PortScan: Ping failed for {ipAddress} {Environment.NewLine} {ex.Message}", true); } } } catch (Exception ex) { - Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, - $"StartScanBG failed (Tools.PortScan) {Environment.NewLine} {ex.Message}", - true); + Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, $"StartScanBG failed (Tools.PortScan) {Environment.NewLine} {ex.Message}", true); } } diff --git a/mRemoteNG/Tools/ProcessController.cs b/mRemoteNG/Tools/ProcessController.cs index a57c8f68..de655f2e 100644 --- a/mRemoteNG/Tools/ProcessController.cs +++ b/mRemoteNG/Tools/ProcessController.cs @@ -5,9 +5,11 @@ using System.Text; using mRemoteNG.App; using mRemoteNG.Properties; using mRemoteNG.Tools.Cmdline; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class ProcessController : IDisposable { #region Public Methods diff --git a/mRemoteNG/Tools/PuttyProcessController.cs b/mRemoteNG/Tools/PuttyProcessController.cs index 869741eb..52b17df1 100644 --- a/mRemoteNG/Tools/PuttyProcessController.cs +++ b/mRemoteNG/Tools/PuttyProcessController.cs @@ -1,8 +1,10 @@ using mRemoteNG.Properties; using mRemoteNG.Tools.Cmdline; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class PuttyProcessController : ProcessController { public bool Start(CommandLineArguments arguments = null) diff --git a/mRemoteNG/Tools/PuttyTypeDetector.cs b/mRemoteNG/Tools/PuttyTypeDetector.cs index 37e173f3..36ac2354 100644 --- a/mRemoteNG/Tools/PuttyTypeDetector.cs +++ b/mRemoteNG/Tools/PuttyTypeDetector.cs @@ -1,10 +1,12 @@ -using System; +using System; using System.Diagnostics; using mRemoteNG.Connection.Protocol; using System.IO; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class PuttyTypeDetector { public static PuttyType GetPuttyType() diff --git a/mRemoteNG/Tools/SSHTunnelTypeConverter.cs b/mRemoteNG/Tools/SSHTunnelTypeConverter.cs index 8459d245..f537cc3e 100644 --- a/mRemoteNG/Tools/SSHTunnelTypeConverter.cs +++ b/mRemoteNG/Tools/SSHTunnelTypeConverter.cs @@ -4,9 +4,11 @@ using mRemoteNG.Connection.Protocol; using mRemoteNG.Container; using System.Collections.Generic; using System.ComponentModel; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class SshTunnelTypeConverter : StringConverter { public static string[] SshTunnels diff --git a/mRemoteNG/Tools/ScanHost.cs b/mRemoteNG/Tools/ScanHost.cs index ad347ae8..00ee74ec 100644 --- a/mRemoteNG/Tools/ScanHost.cs +++ b/mRemoteNG/Tools/ScanHost.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Runtime.Versioning; using mRemoteNG.App; using mRemoteNG.Connection.Protocol.Http; using mRemoteNG.Connection.Protocol.RDP; @@ -13,6 +14,7 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class ScanHost { #region Properties diff --git a/mRemoteNG/Tools/SecureTransfer.cs b/mRemoteNG/Tools/SecureTransfer.cs index 2c93e052..7ecf9b67 100644 --- a/mRemoteNG/Tools/SecureTransfer.cs +++ b/mRemoteNG/Tools/SecureTransfer.cs @@ -5,9 +5,11 @@ using Renci.SshNet; using Renci.SshNet.Sftp; using static System.IO.FileMode; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] internal class SecureTransfer : IDisposable { private readonly string Host; diff --git a/mRemoteNG/Tools/Tools.WindowPlacement.cs b/mRemoteNG/Tools/Tools.WindowPlacement.cs index 11171286..3c07d2f8 100644 --- a/mRemoteNG/Tools/Tools.WindowPlacement.cs +++ b/mRemoteNG/Tools/Tools.WindowPlacement.cs @@ -1,10 +1,12 @@ -using System; +using System; using System.Windows.Forms; using System.Runtime.InteropServices; using mRemoteNG.App; +using System.Runtime.Versioning; namespace mRemoteNG.Tools { + [SupportedOSPlatform("windows")] public class WindowPlacement { private Form _form; diff --git a/mRemoteNG/Tree/ClickHandlers/OpenConnectionClickHandler.cs b/mRemoteNG/Tree/ClickHandlers/OpenConnectionClickHandler.cs index 81a2c8f3..596c712a 100644 --- a/mRemoteNG/Tree/ClickHandlers/OpenConnectionClickHandler.cs +++ b/mRemoteNG/Tree/ClickHandlers/OpenConnectionClickHandler.cs @@ -1,8 +1,10 @@ using System; +using System.Runtime.Versioning; using mRemoteNG.Connection; namespace mRemoteNG.Tree.ClickHandlers { + [SupportedOSPlatform("windows")] public class OpenConnectionClickHandler : ITreeNodeClickHandler { private readonly IConnectionInitiator _connectionInitiator; diff --git a/mRemoteNG/Tree/ClickHandlers/SwitchToConnectionClickHandler.cs b/mRemoteNG/Tree/ClickHandlers/SwitchToConnectionClickHandler.cs index 77f13a63..4ad2e480 100644 --- a/mRemoteNG/Tree/ClickHandlers/SwitchToConnectionClickHandler.cs +++ b/mRemoteNG/Tree/ClickHandlers/SwitchToConnectionClickHandler.cs @@ -1,8 +1,10 @@ using System; +using System.Runtime.Versioning; using mRemoteNG.Connection; namespace mRemoteNG.Tree.ClickHandlers { + [SupportedOSPlatform("windows")] public class SwitchToConnectionClickHandler : ITreeNodeClickHandler { private readonly IConnectionInitiator _connectionInitiator; diff --git a/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs b/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs index fc8ba718..327b0bde 100644 --- a/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs +++ b/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; +using System.Runtime.Versioning; using mRemoteNG.Connection; namespace mRemoteNG.Tree.ClickHandlers { + [SupportedOSPlatform("windows")] public class TreeNodeCompositeClickHandler : ITreeNodeClickHandler { public IEnumerable> ClickHandlers { get; set; } = diff --git a/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs b/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs index b97f6bf1..a70d802a 100644 --- a/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs +++ b/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs @@ -6,10 +6,11 @@ using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Tree.Root; using mRemoteNG.Resources.Language; - +using System.Runtime.Versioning; namespace mRemoteNG.Tree { + [SupportedOSPlatform("windows")] public class ConnectionTreeDragAndDropHandler { private readonly Color DropAllowedFeedbackColor = Color.Green; diff --git a/mRemoteNG/Tree/ConnectionTreeModel.cs b/mRemoteNG/Tree/ConnectionTreeModel.cs index 4400544b..676ef130 100644 --- a/mRemoteNG/Tree/ConnectionTreeModel.cs +++ b/mRemoteNG/Tree/ConnectionTreeModel.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; +using System.Runtime.Versioning; using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Properties; @@ -9,6 +10,7 @@ using mRemoteNG.Tree.Root; namespace mRemoteNG.Tree { + [SupportedOSPlatform("windows")] public sealed class ConnectionTreeModel : INotifyCollectionChanged, INotifyPropertyChanged { public List RootNodes { get; } = new List(); diff --git a/mRemoteNG/Tree/NodeSearcher.cs b/mRemoteNG/Tree/NodeSearcher.cs index 21d83912..655ab8bc 100644 --- a/mRemoteNG/Tree/NodeSearcher.cs +++ b/mRemoteNG/Tree/NodeSearcher.cs @@ -1,10 +1,12 @@ using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Connection; namespace mRemoteNG.Tree { + [SupportedOSPlatform("windows")] public class NodeSearcher { private readonly ConnectionTreeModel _connectionTreeModel; diff --git a/mRemoteNG/Tree/PreviousSessionOpener.cs b/mRemoteNG/Tree/PreviousSessionOpener.cs index a1829945..111fe87f 100644 --- a/mRemoteNG/Tree/PreviousSessionOpener.cs +++ b/mRemoteNG/Tree/PreviousSessionOpener.cs @@ -3,10 +3,11 @@ using mRemoteNG.Container; using System; using System.Linq; using mRemoteNG.UI.Controls.ConnectionTree; - +using System.Runtime.Versioning; namespace mRemoteNG.Tree { + [SupportedOSPlatform("windows")] public class PreviousSessionOpener : IConnectionTreeDelegate { private readonly IConnectionInitiator _connectionInitiator; diff --git a/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs b/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs index ab42c43e..6ba25e52 100644 --- a/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs +++ b/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs @@ -1,10 +1,12 @@ using System.Linq; +using System.Runtime.Versioning; using mRemoteNG.Container; using mRemoteNG.UI.Controls.ConnectionTree; namespace mRemoteNG.Tree { + [SupportedOSPlatform("windows")] public class PreviouslyOpenedFolderExpander : IConnectionTreeDelegate { public void Execute(IConnectionTree connectionTree) diff --git a/mRemoteNG/Tree/Root/RootNodeInfo.cs b/mRemoteNG/Tree/Root/RootNodeInfo.cs index b738cda1..64256e3c 100644 --- a/mRemoteNG/Tree/Root/RootNodeInfo.cs +++ b/mRemoteNG/Tree/Root/RootNodeInfo.cs @@ -4,10 +4,11 @@ using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; - +using System.Runtime.Versioning; namespace mRemoteNG.Tree.Root { + [SupportedOSPlatform("windows")] [DefaultProperty("Name")] public class RootNodeInfo : ContainerInfo { diff --git a/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs b/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs index 748fd1df..de05341f 100644 --- a/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs +++ b/mRemoteNG/Tree/Root/RootPuttySessionsNodeInfo.cs @@ -1,9 +1,11 @@ using mRemoteNG.Properties; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.Tree.Root { + [SupportedOSPlatform("windows")] public class RootPuttySessionsNodeInfo : RootNodeInfo { private string _name; diff --git a/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs b/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs index 6ea56b0b..38a26569 100644 --- a/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs +++ b/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs @@ -1,11 +1,13 @@ using System; using System.ComponentModel; using System.Drawing.Design; +using System.Runtime.Versioning; using System.Windows.Forms.Design; using mRemoteNG.App; namespace mRemoteNG.UI.Controls.Adapters { + [SupportedOSPlatform("windows")] public class CredentialRecordListAdaptor : UITypeEditor { private IWindowsFormsEditorService _editorService; diff --git a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs index cbfbe437..0b86819c 100644 --- a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs +++ b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs @@ -17,9 +17,11 @@ using mRemoteNG.Tools; using mRemoteNG.Tools.Attributes; using mRemoteNG.Tree.Root; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid { + [SupportedOSPlatform("windows")] public partial class ConnectionInfoPropertyGrid : FilteredPropertyGrid.FilteredPropertyGrid { private readonly Dictionary> _propertyCache = new Dictionary>(); diff --git a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs index 1761713c..f137de52 100644 --- a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs +++ b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; +using System.Runtime.Versioning; using BrightIdeasSoftware; using mRemoteNG.Connection; namespace mRemoteNG.UI.Controls.ConnectionTree { + [SupportedOSPlatform("windows")] public class ConnectionTreeSearchTextFilter : IModelFilter { public string FilterText { get; set; } = ""; diff --git a/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs b/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs index eac40059..cefaa76e 100644 --- a/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs +++ b/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs @@ -6,9 +6,11 @@ using mRemoteNG.Messages; using mRemoteNG.Tools; using mRemoteNG.Tree; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Controls { + [SupportedOSPlatform("windows")] public class ExternalToolsToolStrip : ToolStrip { private IContainer components; @@ -18,8 +20,7 @@ namespace mRemoteNG.UI.Controls public ExternalToolsToolStrip() { Initialize(); - Runtime.ExternalToolsService.ExternalTools.CollectionUpdated += - (sender, args) => AddExternalToolsToToolBar(); + Runtime.ExternalToolsService.ExternalTools.CollectionUpdated += (sender, args) => AddExternalToolsToToolBar(); } private void Initialize() @@ -105,9 +106,7 @@ namespace mRemoteNG.UI.Controls extA.Start(selectedTreeNode); else { - Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, - "No connection was selected, external tool may return errors.", - true); + Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "No connection was selected, external tool may return errors.", true); extA.Start(); } } diff --git a/mRemoteNG/UI/Controls/MultiSshToolStrip.cs b/mRemoteNG/UI/Controls/MultiSshToolStrip.cs index 9764d9f4..498c8ff9 100644 --- a/mRemoteNG/UI/Controls/MultiSshToolStrip.cs +++ b/mRemoteNG/UI/Controls/MultiSshToolStrip.cs @@ -8,9 +8,11 @@ using mRemoteNG.App; using mRemoteNG.Connection; using mRemoteNG.Connection.Protocol; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Controls { + [SupportedOSPlatform("windows")] public partial class MultiSshToolStrip : ToolStrip { private IContainer components; @@ -74,8 +76,7 @@ namespace mRemoteNG.UI.Controls processHandlers.AddRange(ProcessOpenConnections(connection)); } - var connectionTreeConnections = Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveChildList() - .Where(item => item.OpenConnections.Count > 0); + var connectionTreeConnections = Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveChildList().Where(item => item.OpenConnections.Count > 0); foreach (var connection in connectionTreeConnections) { diff --git a/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs b/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs index fe11dc3e..ebf4874a 100644 --- a/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs +++ b/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using System.Windows.Forms; namespace mRemoteNG.UI.Controls.PageSequence { + [SupportedOSPlatform("windows")] public class PageSequence : IDisposable { private readonly Control _pageContainer; @@ -13,8 +15,7 @@ namespace mRemoteNG.UI.Controls.PageSequence public IEnumerable Pages => _pages; public int CurrentPageIndex { get; private set; } - public PageSequence(Control pageContainer, IEnumerable pages) : this(pageContainer, - pages.ToArray()) + public PageSequence(Control pageContainer, IEnumerable pages) : this(pageContainer, pages.ToArray()) { } diff --git a/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs b/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs index 6f838bc9..ded6f5d9 100644 --- a/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs +++ b/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs @@ -12,9 +12,11 @@ using mRemoteNG.Properties; using mRemoteNG.Themes; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Controls { + [SupportedOSPlatform("windows")] public class QuickConnectToolStrip : ToolStrip { private IContainer components; diff --git a/mRemoteNG/UI/Controls/mrngAdTree.cs b/mRemoteNG/UI/Controls/mrngAdTree.cs index c151f35c..54f93f3c 100644 --- a/mRemoteNG/UI/Controls/mrngAdTree.cs +++ b/mRemoteNG/UI/Controls/mrngAdTree.cs @@ -1,10 +1,12 @@ using mRemoteNG.Tools; using System; using System.Runtime.CompilerServices; +using System.Runtime.Versioning; using System.Windows.Forms; namespace mRemoteNG.UI.Controls { + [SupportedOSPlatform("windows")] public partial class MrngAdTree : UserControl { #region Public Methods diff --git a/mRemoteNG/UI/Controls/mrngPictureBox.cs b/mRemoteNG/UI/Controls/mrngPictureBox.cs index b3f241a2..012876ca 100644 --- a/mRemoteNG/UI/Controls/mrngPictureBox.cs +++ b/mRemoteNG/UI/Controls/mrngPictureBox.cs @@ -1,9 +1,11 @@ using System.ComponentModel; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.Themes; namespace mRemoteNG.UI.Controls { + [SupportedOSPlatform("windows")] public partial class MrngPictureBox : PictureBox { private ThemeManager _themeManager; diff --git a/mRemoteNG/UI/DialogFactory.cs b/mRemoteNG/UI/DialogFactory.cs index f78de0c8..fe4864ed 100644 --- a/mRemoteNG/UI/DialogFactory.cs +++ b/mRemoteNG/UI/DialogFactory.cs @@ -8,9 +8,11 @@ using mRemoteNG.App.Info; using mRemoteNG.Messages; using mRemoteNG.UI.TaskDialog; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI { + [SupportedOSPlatform("windows")] public class DialogFactory { public static OpenFileDialog BuildLoadConnectionsDialog() diff --git a/mRemoteNG/UI/Forms/FrmAbout.cs b/mRemoteNG/UI/Forms/FrmAbout.cs index e5738f12..5bb4cbfb 100644 --- a/mRemoteNG/UI/Forms/FrmAbout.cs +++ b/mRemoteNG/UI/Forms/FrmAbout.cs @@ -6,9 +6,11 @@ using mRemoteNG.Resources.Language; using System.Reflection; using mRemoteNG.Properties; using System.Runtime.InteropServices; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] public partial class frmAbout : Form { public static frmAbout Instance { get; set; } = new frmAbout(); diff --git a/mRemoteNG/UI/Forms/FrmExport.cs b/mRemoteNG/UI/Forms/FrmExport.cs index 29dc3246..1376805d 100644 --- a/mRemoteNG/UI/Forms/FrmExport.cs +++ b/mRemoteNG/UI/Forms/FrmExport.cs @@ -7,9 +7,11 @@ using mRemoteNG.Connection; using mRemoteNG.Container; using mRemoteNG.Themes; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] public partial class FrmExport { private ThemeManager _themeManager; diff --git a/mRemoteNG/UI/Forms/FrmInputBox.cs b/mRemoteNG/UI/Forms/FrmInputBox.cs index a04afb95..59bb8fe2 100644 --- a/mRemoteNG/UI/Forms/FrmInputBox.cs +++ b/mRemoteNG/UI/Forms/FrmInputBox.cs @@ -1,9 +1,11 @@ using System.Windows.Forms; using mRemoteNG.Themes; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] public sealed partial class FrmInputBox : Form { internal string returnValue; diff --git a/mRemoteNG/UI/Forms/FrmPassword.cs b/mRemoteNG/UI/Forms/FrmPassword.cs index 20363086..b07de48d 100644 --- a/mRemoteNG/UI/Forms/FrmPassword.cs +++ b/mRemoteNG/UI/Forms/FrmPassword.cs @@ -5,9 +5,11 @@ using mRemoteNG.Security; using mRemoteNG.Themes; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] public partial class FrmPassword : IKeyProvider { private readonly string _passwordName; diff --git a/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs b/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs index 4760285b..35bb1037 100644 --- a/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs +++ b/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs @@ -1,8 +1,10 @@ using System; +using System.Runtime.Versioning; using mRemoteNG.App.Info; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] /// /// Interaction logic for FrmSplashScreenNew.xaml /// diff --git a/mRemoteNG/UI/Forms/FrmUnhandledException.cs b/mRemoteNG/UI/Forms/FrmUnhandledException.cs index 34ff87d9..e45cb9e1 100644 --- a/mRemoteNG/UI/Forms/FrmUnhandledException.cs +++ b/mRemoteNG/UI/Forms/FrmUnhandledException.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.Linq; +using System.Runtime.Versioning; using System.Text; using System.Windows.Forms; using mRemoteNG.App; @@ -9,6 +10,7 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] public partial class FrmUnhandledException : Form { private readonly bool _isFatal; diff --git a/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs b/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs index 6dcc9af2..1854373d 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs @@ -8,9 +8,11 @@ using mRemoteNG.Connection.Protocol; using mRemoteNG.Properties; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class AdvancedPage { public AdvancedPage() diff --git a/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs b/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs index b1b9f162..98dba43d 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs @@ -4,9 +4,11 @@ using mRemoteNG.App; using mRemoteNG.Properties; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class AppearancePage { public AppearancePage() diff --git a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs index 15234124..3a6264b0 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ConnectionsPage.cs @@ -4,9 +4,11 @@ using System.Collections.Generic; using mRemoteNG.Config.Connections; using mRemoteNG.Properties; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class ConnectionsPage { private readonly FrmMain _frmMain = FrmMain.Default; diff --git a/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs index 13b45faf..3fbbbda0 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs @@ -3,9 +3,11 @@ using mRemoteNG.App; using mRemoteNG.Properties; using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class CredentialsPage : OptionsPage { public CredentialsPage() @@ -51,8 +53,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages txtCredentialsUsername.Text = Properties.OptionsCredentialsPage.Default.DefaultUsername; var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); - txtCredentialsPassword.Text = - cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey); + txtCredentialsPassword.Text = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey); txtCredentialsDomain.Text = Properties.OptionsCredentialsPage.Default.DefaultDomain; txtCredentialsUserViaAPI.Text = Properties.OptionsCredentialsPage.Default.UserViaAPIDefault; } @@ -74,8 +75,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages Properties.OptionsCredentialsPage.Default.DefaultUsername = txtCredentialsUsername.Text; var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); - Properties.OptionsCredentialsPage.Default.DefaultPassword = - cryptographyProvider.Encrypt(txtCredentialsPassword.Text, Runtime.EncryptionKey); + Properties.OptionsCredentialsPage.Default.DefaultPassword = cryptographyProvider.Encrypt(txtCredentialsPassword.Text, Runtime.EncryptionKey); Properties.OptionsCredentialsPage.Default.DefaultDomain = txtCredentialsDomain.Text; Properties.OptionsCredentialsPage.Default.UserViaAPIDefault = txtCredentialsUserViaAPI.Text; } diff --git a/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs index 6b6737b1..9ac19ae7 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs @@ -1,5 +1,6 @@ using System.Diagnostics; using System.IO; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Properties; @@ -7,6 +8,7 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class NotificationsPage { public NotificationsPage() diff --git a/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs b/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs index d1aca220..9cd3f692 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs @@ -9,9 +9,11 @@ using mRemoteNG.Properties; using mRemoteNG.Security; using mRemoteNG.Security.Factories; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class SecurityPage : OptionsPage { public SecurityPage() diff --git a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs index 4ee42ab4..9db6aa15 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs @@ -5,9 +5,11 @@ using mRemoteNG.Config.DatabaseConnectors; using mRemoteNG.Properties; using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class SqlServerPage { private readonly DatabaseConnectionTester _databaseConnectionTester; diff --git a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs index ba231f10..47d0802c 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/StartupExitPage.cs @@ -1,11 +1,14 @@ using System; +using System.Runtime.Versioning; using mRemoteNG.Properties; using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class StartupExitPage { + [SupportedOSPlatform("windows")] public StartupExitPage() { InitializeComponent(); diff --git a/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs index da5be493..0c508992 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/TabsPanelsPage.cs @@ -1,8 +1,10 @@ using mRemoteNG.Properties; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class TabsPanelsPage { public TabsPanelsPage() diff --git a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs index dae03e3a..2d534f1f 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs @@ -7,9 +7,11 @@ using BrightIdeasSoftware; using mRemoteNG.Properties; using mRemoteNG.UI.TaskDialog; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class ThemePage { #region Private Fields @@ -177,9 +179,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void btnThemeNew_Click(object sender, EventArgs e) { - using (var frmInputBox = new FrmInputBox(Language.OptionsThemeNewThemeCaption, - Language.OptionsThemeNewThemeText, - _themeManager.ActiveTheme.Name)) + using (var frmInputBox = new FrmInputBox(Language.OptionsThemeNewThemeCaption, Language.OptionsThemeNewThemeText, _themeManager.ActiveTheme.Name)) { var dr = frmInputBox.ShowDialog(); if (dr != DialogResult.OK) return; @@ -191,9 +191,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages } else { - CTaskDialog.ShowTaskDialogBox(this, Language.Errors, Language.OptionsThemeNewThemeError, "", - "", "", "", "", "", ETaskDialogButtons.Ok, ESysIcons.Error, - ESysIcons.Information, 0); + CTaskDialog.ShowTaskDialogBox(this, Language.Errors, Language.OptionsThemeNewThemeError, "", "", "", "", "", "", ETaskDialogButtons.Ok, ESysIcons.Error, ESysIcons.Information, 0); } } } diff --git a/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs b/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs index 95696fdb..93c87d2a 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs @@ -9,9 +9,11 @@ using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.Tools; using mRemoteNG.UI.TaskDialog; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms.OptionsPages { + [SupportedOSPlatform("windows")] public sealed partial class UpdatesPage { #region Private Fields diff --git a/mRemoteNG/UI/Forms/frmChoosePanel.cs b/mRemoteNG/UI/Forms/frmChoosePanel.cs index 432b782f..05269d30 100644 --- a/mRemoteNG/UI/Forms/frmChoosePanel.cs +++ b/mRemoteNG/UI/Forms/frmChoosePanel.cs @@ -3,9 +3,11 @@ using mRemoteNG.App; using mRemoteNG.Themes; using mRemoteNG.UI.Panels; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Forms { + [SupportedOSPlatform("windows")] public partial class FrmChoosePanel { private readonly PanelAdder _panelAdder; diff --git a/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs b/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs index 96550245..67fa2502 100644 --- a/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs +++ b/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs @@ -2,9 +2,11 @@ using System.Windows.Forms; using mRemoteNG.Tools; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Menu { + [SupportedOSPlatform("windows")] // This class creates new menu items to menu that appears when you right click the top of the app (where the window title is) public class AdvancedWindowMenu : IDisposable { diff --git a/mRemoteNG/UI/Menu/msMain/FileMenu.cs b/mRemoteNG/UI/Menu/msMain/FileMenu.cs index bf7d9092..24892411 100644 --- a/mRemoteNG/UI/Menu/msMain/FileMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/FileMenu.cs @@ -7,9 +7,11 @@ using mRemoteNG.Security; using mRemoteNG.UI.Forms; using mRemoteNG.UI.Window; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Menu { + [SupportedOSPlatform("windows")] public class FileMenu : ToolStripMenuItem { private ToolStripMenuItem _mMenToolsOptions; diff --git a/mRemoteNG/UI/Menu/msMain/HelpMenu.cs b/mRemoteNG/UI/Menu/msMain/HelpMenu.cs index 85f2f263..c4675bd1 100644 --- a/mRemoteNG/UI/Menu/msMain/HelpMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/HelpMenu.cs @@ -5,9 +5,11 @@ using mRemoteNG.App; using mRemoteNG.App.Info; using mRemoteNG.UI.Forms; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Menu { + [SupportedOSPlatform("windows")] public class HelpMenu : ToolStripMenuItem { private ToolStripMenuItem _mMenInfoHelp; diff --git a/mRemoteNG/UI/Menu/msMain/ToolsMenu.cs b/mRemoteNG/UI/Menu/msMain/ToolsMenu.cs index 32f83022..25b8e213 100644 --- a/mRemoteNG/UI/Menu/msMain/ToolsMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/ToolsMenu.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; using System.Windows.Forms; using mRemoteNG.App; using mRemoteNG.Credential; @@ -6,6 +7,7 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.UI.Menu { + [SupportedOSPlatform("windows")] public class ToolsMenu : ToolStripMenuItem { private ToolStripMenuItem _mMenToolsSshTransfer; diff --git a/mRemoteNG/UI/Panels/PanelAdder.cs b/mRemoteNG/UI/Panels/PanelAdder.cs index 5ad5ca78..e33ddbe6 100644 --- a/mRemoteNG/UI/Panels/PanelAdder.cs +++ b/mRemoteNG/UI/Panels/PanelAdder.cs @@ -8,9 +8,11 @@ using System.Linq; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Panels { + [SupportedOSPlatform("windows")] public class PanelAdder { public ConnectionWindow AddPanel(string title = "") diff --git a/mRemoteNG/UI/Tabs/ConnectionTab.cs b/mRemoteNG/UI/Tabs/ConnectionTab.cs index 31c9faff..894f7ccc 100644 --- a/mRemoteNG/UI/Tabs/ConnectionTab.cs +++ b/mRemoteNG/UI/Tabs/ConnectionTab.cs @@ -10,9 +10,11 @@ using mRemoteNG.Properties; using mRemoteNG.UI.TaskDialog; using WeifenLuo.WinFormsUI.Docking; using mRemoteNG.Resources.Language; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Tabs { + [SupportedOSPlatform("windows")] public partial class ConnectionTab : DockContent { /// diff --git a/mRemoteNG/UI/Tabs/TabHelper.cs b/mRemoteNG/UI/Tabs/TabHelper.cs index 62e102d8..32abad7f 100644 --- a/mRemoteNG/UI/Tabs/TabHelper.cs +++ b/mRemoteNG/UI/Tabs/TabHelper.cs @@ -1,9 +1,11 @@ using mRemoteNG.App; using mRemoteNG.UI.Window; using System; +using System.Runtime.Versioning; namespace mRemoteNG.UI.Tabs { + [SupportedOSPlatform("windows")] class TabHelper { private static readonly Lazy lazyHelper = new Lazy(() => new TabHelper()); @@ -23,8 +25,7 @@ namespace mRemoteNG.UI.Tabs { currentTab = value; findCurrentPanel(); - Runtime.MessageCollector.AddMessage(Messages.MessageClass.DebugMsg, - "Tab got focused: " + currentTab.TabText); + Runtime.MessageCollector.AddMessage(Messages.MessageClass.DebugMsg, "Tab got focused: " + currentTab.TabText); } } diff --git a/mRemoteNG/UI/TaskDialog/cTaskDialog.cs b/mRemoteNG/UI/TaskDialog/cTaskDialog.cs index bd4f4795..f043526d 100644 --- a/mRemoteNG/UI/TaskDialog/cTaskDialog.cs +++ b/mRemoteNG/UI/TaskDialog/cTaskDialog.cs @@ -5,11 +5,7 @@ using System.Windows.Forms; namespace mRemoteNG.UI.TaskDialog { [SupportedOSPlatform("windows")] - //-------------------------------------------------------------------------------- - #region PUBLIC enums - - //-------------------------------------------------------------------------------- public enum ESysIcons { Information, @@ -28,10 +24,8 @@ namespace mRemoteNG.UI.TaskDialog Cancel, None } - #endregion - //-------------------------------------------------------------------------------- public static class CTaskDialog { // PUBLIC static values... @@ -52,20 +46,7 @@ namespace mRemoteNG.UI.TaskDialog #region ShowTaskDialogBox //-------------------------------------------------------------------------------- - public static DialogResult ShowTaskDialogBox(IWin32Window owner, - string title, - string mainInstruction, - string content, - string expandedInfo, - string footer, - string verificationText, - string radioButtons, - string commandButtons, - ETaskDialogButtons buttons, - ESysIcons mainIcon, - ESysIcons footerIcon, - int defaultIndex) - + public static DialogResult ShowTaskDialogBox(IWin32Window owner, string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText, string radioButtons, string commandButtons, ETaskDialogButtons buttons, ESysIcons mainIcon, ESysIcons footerIcon, int defaultIndex) { DialogResult result; OnTaskDialogShown?.Invoke(null, EventArgs.Empty); @@ -114,8 +95,7 @@ namespace mRemoteNG.UI.TaskDialog ESysIcons mainIcon, ESysIcons footerIcon) { - return ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, - radioButtons, commandButtons, buttons, mainIcon, footerIcon, 0); + return ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, commandButtons, buttons, mainIcon, footerIcon, 0); } public static DialogResult ShowTaskDialogBox(string title, @@ -130,8 +110,7 @@ namespace mRemoteNG.UI.TaskDialog ESysIcons mainIcon, ESysIcons footerIcon) { - return ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, - radioButtons, commandButtons, buttons, mainIcon, footerIcon, 0); + return ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, commandButtons, buttons, mainIcon, footerIcon, 0); } #endregion @@ -141,57 +120,27 @@ namespace mRemoteNG.UI.TaskDialog #region MessageBox //-------------------------------------------------------------------------------- - public static DialogResult MessageBox(IWin32Window owner, - string title, - string mainInstruction, - string content, - string expandedInfo, - string footer, - string verificationText, - ETaskDialogButtons buttons, - ESysIcons mainIcon, - ESysIcons footerIcon) + public static DialogResult MessageBox(IWin32Window owner, string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText, ETaskDialogButtons buttons, ESysIcons mainIcon, ESysIcons footerIcon) { - return ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, "", - "", buttons, mainIcon, footerIcon); + return ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, "", "", buttons, mainIcon, footerIcon); } //-------------------------------------------------------------------------------- // Overloaded versions... //-------------------------------------------------------------------------------- - public static DialogResult MessageBox(string title, - string mainInstruction, - string content, - string expandedInfo, - string footer, - string verificationText, - ETaskDialogButtons buttons, - ESysIcons mainIcon, - ESysIcons footerIcon) + public static DialogResult MessageBox(string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText, ETaskDialogButtons buttons, ESysIcons mainIcon, ESysIcons footerIcon) { - return ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, "", - "", buttons, mainIcon, footerIcon); + return ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, "", "", buttons, mainIcon, footerIcon); } - public static DialogResult MessageBox(IWin32Window owner, - string title, - string mainInstruction, - string content, - ETaskDialogButtons buttons, - ESysIcons mainIcon) + public static DialogResult MessageBox(IWin32Window owner, string title, string mainInstruction, string content, ETaskDialogButtons buttons, ESysIcons mainIcon) { - return MessageBox(owner, title, mainInstruction, content, "", "", "", buttons, mainIcon, - ESysIcons.Information); + return MessageBox(owner, title, mainInstruction, content, "", "", "", buttons, mainIcon, ESysIcons.Information); } - public static DialogResult MessageBox(string title, - string mainInstruction, - string content, - ETaskDialogButtons buttons, - ESysIcons mainIcon) + public static DialogResult MessageBox(string title, string mainInstruction, string content, ETaskDialogButtons buttons, ESysIcons mainIcon) { - return MessageBox(null, title, mainInstruction, content, "", "", "", buttons, mainIcon, - ESysIcons.Information); + return MessageBox(null, title, mainInstruction, content, "", "", "", buttons, mainIcon, ESysIcons.Information); } //-------------------------------------------------------------------------------- @@ -215,9 +164,7 @@ namespace mRemoteNG.UI.TaskDialog ESysIcons footerIcon, int defaultIndex) { - var res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, - radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, - defaultIndex); + var res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex); if (res == DialogResult.OK) return RadioButtonResult; return -1; @@ -237,9 +184,7 @@ namespace mRemoteNG.UI.TaskDialog ESysIcons footerIcon, int defaultIndex) { - var res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, - radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, - defaultIndex); + var res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex); if (res == DialogResult.OK) return RadioButtonResult; return -1; @@ -256,8 +201,7 @@ namespace mRemoteNG.UI.TaskDialog ESysIcons mainIcon, ESysIcons footerIcon) { - return ShowRadioBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, - radioButtons, ESysIcons.Question, ESysIcons.Information, 0); + return ShowRadioBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, ESysIcons.Question, ESysIcons.Information, 0); } public static int ShowRadioBox(IWin32Window owner, @@ -267,8 +211,7 @@ namespace mRemoteNG.UI.TaskDialog string radioButtons, int defaultIndex) { - return ShowRadioBox(owner, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question, - ESysIcons.Information, defaultIndex); + return ShowRadioBox(owner, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question, ESysIcons.Information, defaultIndex); } public static int ShowRadioBox(IWin32Window owner, @@ -277,8 +220,7 @@ namespace mRemoteNG.UI.TaskDialog string content, string radioButtons) { - return ShowRadioBox(owner, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question, - ESysIcons.Information, 0); + return ShowRadioBox(owner, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question, ESysIcons.Information, 0); } public static int ShowRadioBox(string title, @@ -286,8 +228,7 @@ namespace mRemoteNG.UI.TaskDialog string content, string radioButtons) { - return ShowRadioBox(null, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question, - ESysIcons.Information, 0); + return ShowRadioBox(null, title, mainInstruction, content, "", "", "", radioButtons, ESysIcons.Question, ESysIcons.Information, 0); } #endregion @@ -348,18 +289,12 @@ namespace mRemoteNG.UI.TaskDialog string commandButtons, bool showCancelButton) { - return ShowCommandBox(owner, title, mainInstruction, content, "", "", "", commandButtons, showCancelButton, - ESysIcons.Question, ESysIcons.Information); + return ShowCommandBox(owner, title, mainInstruction, content, "", "", "", commandButtons, showCancelButton, ESysIcons.Question, ESysIcons.Information); } - public static int ShowCommandBox(string title, - string mainInstruction, - string content, - string commandButtons, - bool showCancelButton) + public static int ShowCommandBox(string title, string mainInstruction, string content, string commandButtons, bool showCancelButton) { - return ShowCommandBox(null, title, mainInstruction, content, "", "", "", commandButtons, showCancelButton, - ESysIcons.Question, ESysIcons.Information); + return ShowCommandBox(null, title, mainInstruction, content, "", "", "", commandButtons, showCancelButton, ESysIcons.Question, ESysIcons.Information); } #endregion diff --git a/mRemoteNG/UI/TextBoxExtensions.cs b/mRemoteNG/UI/TextBoxExtensions.cs index 9aa91ece..2cca4acf 100644 --- a/mRemoteNG/UI/TextBoxExtensions.cs +++ b/mRemoteNG/UI/TextBoxExtensions.cs @@ -1,10 +1,12 @@ using System; +using System.Runtime.Versioning; using System.Text; using System.Windows.Forms; using mRemoteNG.App; namespace mRemoteNG.UI { + [SupportedOSPlatform("windows")] public static class TextBoxExtensions { public static bool SetCueBannerText(this TextBox textBox, string cueText, bool showCueWhenFocused = false)