diff --git a/adapter/MTConnect.NET-Adapter/MTConnect.NET-Adapter.csproj b/adapter/MTConnect.NET-Adapter/MTConnect.NET-Adapter.csproj
index 896b89282..6108f5c5e 100644
--- a/adapter/MTConnect.NET-Adapter/MTConnect.NET-Adapter.csproj
+++ b/adapter/MTConnect.NET-Adapter/MTConnect.NET-Adapter.csproj
@@ -5,13 +5,13 @@
full
- net461;net48;net6.0;net7.0;net8.0;net9.0
+ net461;net48;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;net6.0;net7.0;net8.0;net9.0;net10.0
diff --git a/adapter/MTConnect.NET-Applications-Adapter/MTConnect.NET-Applications-Adapter.csproj b/adapter/MTConnect.NET-Applications-Adapter/MTConnect.NET-Applications-Adapter.csproj
index ea7f60619..d94f1b86a 100644
--- a/adapter/MTConnect.NET-Applications-Adapter/MTConnect.NET-Applications-Adapter.csproj
+++ b/adapter/MTConnect.NET-Applications-Adapter/MTConnect.NET-Applications-Adapter.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -65,4 +65,11 @@
+
+
+ True
+ \
+
+
+
diff --git a/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/MTConnect.NET-AdapterModule-MQTT.csproj b/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/MTConnect.NET-AdapterModule-MQTT.csproj
index 67a6772c9..d74d5dd73 100644
--- a/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/MTConnect.NET-AdapterModule-MQTT.csproj
+++ b/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/MTConnect.NET-AdapterModule-MQTT.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -52,6 +52,10 @@
True
\
+
+ True
+ \
+
diff --git a/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/Module.cs b/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/Module.cs
index c6df0ac18..354d3673e 100644
--- a/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/Module.cs
+++ b/adapter/Modules/MTConnect.NET-AdapterModule-MQTT/Module.cs
@@ -109,14 +109,23 @@ private async Task Worker()
// Add CA (Certificate Authority)
if (!string.IsNullOrEmpty(_configuration.CertificateAuthority))
{
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificateFromFile(GetFilePath(_configuration.CertificateAuthority)));
+#else
certificates.Add(new X509Certificate2(GetFilePath(_configuration.CertificateAuthority)));
+#endif
}
// Add Client Certificate & Private Key
if (!string.IsNullOrEmpty(_configuration.PemCertificate) && !string.IsNullOrEmpty(_configuration.PemPrivateKey))
{
#if NET5_0_OR_GREATER
+
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificate(X509Certificate2.CreateFromPemFile(GetFilePath(_configuration.PemCertificate), GetFilePath(_configuration.PemPrivateKey)).Export(X509ContentType.Pfx)));
+#else
certificates.Add(new X509Certificate2(X509Certificate2.CreateFromPemFile(GetFilePath(_configuration.PemCertificate), GetFilePath(_configuration.PemPrivateKey)).Export(X509ContentType.Pfx)));
+#endif
clientOptionsBuilder.WithTlsOptions(b => b
.WithSslProtocols(System.Security.Authentication.SslProtocols.Tls12)
diff --git a/adapter/Modules/MTConnect.NET-AdapterModule-SHDR/MTConnect.NET-AdapterModule-SHDR.csproj b/adapter/Modules/MTConnect.NET-AdapterModule-SHDR/MTConnect.NET-AdapterModule-SHDR.csproj
index 1faedf150..17cd8ae42 100644
--- a/adapter/Modules/MTConnect.NET-AdapterModule-SHDR/MTConnect.NET-AdapterModule-SHDR.csproj
+++ b/adapter/Modules/MTConnect.NET-AdapterModule-SHDR/MTConnect.NET-AdapterModule-SHDR.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -52,6 +52,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/MTConnect.NET-Agent/MTConnect.NET-Agent.csproj b/agent/MTConnect.NET-Agent/MTConnect.NET-Agent.csproj
index e4324583b..4c48d80c4 100644
--- a/agent/MTConnect.NET-Agent/MTConnect.NET-Agent.csproj
+++ b/agent/MTConnect.NET-Agent/MTConnect.NET-Agent.csproj
@@ -5,13 +5,13 @@
full
- net461;net48;net6.0;net7.0;net8.0;net9.0
+ net461;net48;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;net6.0;net7.0;net8.0;net9.0;net10.0
diff --git a/agent/MTConnect.NET-Applications-Agents/MTConnect.NET-Applications-Agents.csproj b/agent/MTConnect.NET-Applications-Agents/MTConnect.NET-Applications-Agents.csproj
index 00ba1ec91..2b658f28e 100644
--- a/agent/MTConnect.NET-Applications-Agents/MTConnect.NET-Applications-Agents.csproj
+++ b/agent/MTConnect.NET-Applications-Agents/MTConnect.NET-Applications-Agents.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -65,4 +65,11 @@
+
+
+ True
+ \
+
+
+
diff --git a/agent/Modules/MTConnect.NET-AgentModule-HttpAdapter/MTConnect.NET-AgentModule-HttpAdapter.csproj b/agent/Modules/MTConnect.NET-AgentModule-HttpAdapter/MTConnect.NET-AgentModule-HttpAdapter.csproj
index 25a162e04..46ca4b252 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-HttpAdapter/MTConnect.NET-AgentModule-HttpAdapter.csproj
+++ b/agent/Modules/MTConnect.NET-AgentModule-HttpAdapter/MTConnect.NET-AgentModule-HttpAdapter.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -45,6 +45,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/Modules/MTConnect.NET-AgentModule-HttpServer/MTConnect.NET-AgentModule-HttpServer.csproj b/agent/Modules/MTConnect.NET-AgentModule-HttpServer/MTConnect.NET-AgentModule-HttpServer.csproj
index f80a831d7..360ce16a4 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-HttpServer/MTConnect.NET-AgentModule-HttpServer.csproj
+++ b/agent/Modules/MTConnect.NET-AgentModule-HttpServer/MTConnect.NET-AgentModule-HttpServer.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -46,6 +46,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/MTConnect.NET-AgentModule-MqttAdapter.csproj b/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/MTConnect.NET-AgentModule-MqttAdapter.csproj
index b8ef774fa..c56578ff5 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/MTConnect.NET-AgentModule-MqttAdapter.csproj
+++ b/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/MTConnect.NET-AgentModule-MqttAdapter.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -49,6 +49,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/Module.cs b/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/Module.cs
index 3a7f12c36..26a903a9f 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/Module.cs
+++ b/agent/Modules/MTConnect.NET-AgentModule-MqttAdapter/Module.cs
@@ -132,14 +132,23 @@ private async Task Worker()
// Add CA (Certificate Authority)
if (!string.IsNullOrEmpty(_configuration.CertificateAuthority))
{
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificateFromFile(GetFilePath(_configuration.CertificateAuthority)));
+#else
certificates.Add(new X509Certificate2(GetFilePath(_configuration.CertificateAuthority)));
+#endif
}
// Add Client Certificate & Private Key
if (!string.IsNullOrEmpty(_configuration.PemCertificate) && !string.IsNullOrEmpty(_configuration.PemPrivateKey))
{
#if NET5_0_OR_GREATER
+
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificate(X509Certificate2.CreateFromPemFile(GetFilePath(_configuration.PemCertificate), GetFilePath(_configuration.PemPrivateKey)).Export(X509ContentType.Pfx)));
+#else
certificates.Add(new X509Certificate2(X509Certificate2.CreateFromPemFile(GetFilePath(_configuration.PemCertificate), GetFilePath(_configuration.PemPrivateKey)).Export(X509ContentType.Pfx)));
+#endif
clientOptionsBuilder.WithTlsOptions(b => b
.WithSslProtocols(System.Security.Authentication.SslProtocols.Tls12)
@@ -148,7 +157,7 @@ private async Task Worker()
.WithAllowUntrustedCertificates(_configuration.AllowUntrustedCertificates)
.WithClientCertificates(certificates));
#else
- throw new Exception("PEM Certificates Not Supported in .NET Framework 4.8 or older");
+ throw new Exception("PEM Certificates Not Supported in .NET Framework 4.8 or older");
#endif
}
diff --git a/agent/Modules/MTConnect.NET-AgentModule-MqttBroker/MTConnect.NET-AgentModule-MqttBroker.csproj b/agent/Modules/MTConnect.NET-AgentModule-MqttBroker/MTConnect.NET-AgentModule-MqttBroker.csproj
index ad790c35d..5c8d33a71 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-MqttBroker/MTConnect.NET-AgentModule-MqttBroker.csproj
+++ b/agent/Modules/MTConnect.NET-AgentModule-MqttBroker/MTConnect.NET-AgentModule-MqttBroker.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -45,6 +45,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/Modules/MTConnect.NET-AgentModule-MqttRelay/MTConnect.NET-AgentModule-MqttRelay.csproj b/agent/Modules/MTConnect.NET-AgentModule-MqttRelay/MTConnect.NET-AgentModule-MqttRelay.csproj
index f94469e39..73000f2a1 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-MqttRelay/MTConnect.NET-AgentModule-MqttRelay.csproj
+++ b/agent/Modules/MTConnect.NET-AgentModule-MqttRelay/MTConnect.NET-AgentModule-MqttRelay.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -49,6 +49,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/Modules/MTConnect.NET-AgentModule-ShdrAdapter/MTConnect.NET-AgentModule-ShdrAdapter.csproj b/agent/Modules/MTConnect.NET-AgentModule-ShdrAdapter/MTConnect.NET-AgentModule-ShdrAdapter.csproj
index 7a18de441..1e9a4784b 100644
--- a/agent/Modules/MTConnect.NET-AgentModule-ShdrAdapter/MTConnect.NET-AgentModule-ShdrAdapter.csproj
+++ b/agent/Modules/MTConnect.NET-AgentModule-ShdrAdapter/MTConnect.NET-AgentModule-ShdrAdapter.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -45,6 +45,10 @@
True
\
+
+ True
+ \
+
diff --git a/agent/Processors/MTConnect.NET-AgentProcessor-Python/MTConnect.NET-AgentProcessor-Python.csproj b/agent/Processors/MTConnect.NET-AgentProcessor-Python/MTConnect.NET-AgentProcessor-Python.csproj
index 8e354f0b4..96626e1b7 100644
--- a/agent/Processors/MTConnect.NET-AgentProcessor-Python/MTConnect.NET-AgentProcessor-Python.csproj
+++ b/agent/Processors/MTConnect.NET-AgentProcessor-Python/MTConnect.NET-AgentProcessor-Python.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -63,6 +63,10 @@
True
\
+
+ True
+ \
+
diff --git a/build/MTConnect.NET.Builder/CommandLine.cs b/build/MTConnect.NET.Builder/CommandLine.cs
index 33bb30c76..386d23583 100644
--- a/build/MTConnect.NET.Builder/CommandLine.cs
+++ b/build/MTConnect.NET.Builder/CommandLine.cs
@@ -58,7 +58,7 @@ public static bool Run(string cmd, string workingDirectory, bool verbose)
process.Close();
- return exitCode >= 0;
+ return exitCode == 0;
}
}
}
diff --git a/build/MTConnect.NET.Builder/Parts/agent/installer/installer.iss b/build/MTConnect.NET.Builder/Parts/agent/installer/installer.iss
index 0eb4157c6..a037d8e21 100644
--- a/build/MTConnect.NET.Builder/Parts/agent/installer/installer.iss
+++ b/build/MTConnect.NET.Builder/Parts/agent/installer/installer.iss
@@ -65,6 +65,8 @@ CreateStartMenuIcon=Create a Start Menu icon
CreateDesktopIcon=Create a Desktop icon
[Types]
+Name: "win64net10"; Description: "Windows x64 .NET 10"
+Name: "win86net10"; Description: "Windows x86 .NET 10"
Name: "win64net9"; Description: "Windows x64 .NET 9"
Name: "win86net9"; Description: "Windows x86 .NET 9"
Name: "win64net8"; Description: "Windows x64 .NET 8"
@@ -79,6 +81,8 @@ Name: "win64net461"; Description: "Windows x64 .NET 4.6.1 Framework"
Name: "win86net461"; Description: "Windows x86 .NET 4.6.1 Framework"
[Components]
+Name: "win64net10"; Description: "{#MyAppVerName}"; Types: win64net10
+Name: "win86net10"; Description: "{#MyAppVerName}"; Types: win86net10
Name: "win64net9"; Description: "{#MyAppVerName}"; Types: win64net9
Name: "win86net9"; Description: "{#MyAppVerName}"; Types: win86net9
Name: "win64net8"; Description: "{#MyAppVerName}"; Types: win64net8
@@ -91,9 +95,9 @@ Name: "win64net48"; Description: "{#MyAppVerName}"; Types: win64net48
Name: "win86net48"; Description: "{#MyAppVerName}"; Types: win86net48
Name: "win64net461"; Description: "{#MyAppVerName}"; Types: win64net461
Name: "win86net461"; Description: "{#MyAppVerName}"; Types: win86net461
-Name: "configuration"; Description: "Configuration Files"; Types: win86net461 win64net461 win86net48 win64net48 win86net6 win64net6 win86net7 win64net7 win86net8 win64net8 win86net9 win64net9
-Name: "schemas"; Description: "MTConnect XSD Schema Files"; Types: win86net461 win64net461 win86net48 win64net48 win86net6 win64net6 win86net7 win64net7 win86net8 win64net8 win86net9 win64net9
-Name: "styles"; Description: "XSL Stylesheet Files"; Types: win86net461 win64net461 win86net48 win64net48 win86net6 win64net6 win86net7 win64net7 win86net8 win64net8 win86net9 win64net9
+Name: "configuration"; Description: "Configuration Files"; Types: win86net461 win64net461 win86net48 win64net48 win86net6 win64net6 win86net7 win64net7 win86net8 win64net8 win86net9 win64net9 win86net10 win64net10
+Name: "schemas"; Description: "MTConnect XSD Schema Files"; Types: win86net461 win64net461 win86net48 win64net48 win86net6 win64net6 win86net7 win64net7 win86net8 win64net8 win86net9 win64net9 win86net10 win64net10
+Name: "styles"; Description: "XSL Stylesheet Files"; Types: win86net461 win64net461 win86net48 win64net48 win86net6 win64net6 win86net7 win64net7 win86net8 win64net8 win86net9 win64net9 win86net10 win64net10
[Languages]
@@ -109,6 +113,8 @@ Name: "{app}\schemas"; Permissions: everyone-full
[Files]
; Program Files
+Source: "[INPUT_PATH]\win-x64\net10.0\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Permissions: everyone-full; Components: win64net10;
+Source: "[INPUT_PATH]\win-x86\net10.0\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Permissions: everyone-full; Components: win86net10;
Source: "[INPUT_PATH]\win-x64\net9.0\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Permissions: everyone-full; Components: win64net9;
Source: "[INPUT_PATH]\win-x86\net9.0\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Permissions: everyone-full; Components: win86net9;
Source: "[INPUT_PATH]\win-x64\net8.0\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs; Permissions: everyone-full; Components: win64net8;
diff --git a/build/MTConnect.NET.Builder/Parts/libraries/Nuget.cs b/build/MTConnect.NET.Builder/Parts/libraries/Nuget.cs
index 747a25f0d..b96e10213 100644
--- a/build/MTConnect.NET.Builder/Parts/libraries/Nuget.cs
+++ b/build/MTConnect.NET.Builder/Parts/libraries/Nuget.cs
@@ -50,7 +50,8 @@ public static async Task Build([CommandOption] string configurationId = null, [C
parts.Add($"-p:RepositoryBranch=\"{librariesConfiguration.RepositoryBranch?.Replace("{VERSION}", version)}\"");
parts.Add($"-p:PackageProjectUrl=\"{librariesConfiguration.PackageProjectUrl}\"");
parts.Add($"-p:PackageLicenseExpression=\"{librariesConfiguration.PackageLicenseExpression}\"");
- parts.Add($"-p:PackageIconUrl=\"{librariesConfiguration.PackageIconUrl}\"");
+ parts.Add($"-p:PackageIcon=\"package-icon.png\"");
+ //parts.Add($"-p:PackageIconUrl=\"{librariesConfiguration.PackageIconUrl}\"");
parts.Add($"-p:RepositoryType={librariesConfiguration.RepositoryType}");
parts.Add($"-p:PublishRepositoryUrl=true");
parts.Add($"-p:IncludeSymbols=true");
diff --git a/docs/img/package-icon.png b/docs/img/package-icon.png
new file mode 100644
index 000000000..d068a871d
Binary files /dev/null and b/docs/img/package-icon.png differ
diff --git a/libraries/MTConnect.NET-Common/MTConnect.NET-Common.csproj b/libraries/MTConnect.NET-Common/MTConnect.NET-Common.csproj
index d6c02e259..2b3b615c8 100644
--- a/libraries/MTConnect.NET-Common/MTConnect.NET-Common.csproj
+++ b/libraries/MTConnect.NET-Common/MTConnect.NET-Common.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -120,6 +120,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-DeviceFinder/MTConnect.NET-DeviceFinder.csproj b/libraries/MTConnect.NET-DeviceFinder/MTConnect.NET-DeviceFinder.csproj
index 5b4324921..e07725b3d 100644
--- a/libraries/MTConnect.NET-DeviceFinder/MTConnect.NET-DeviceFinder.csproj
+++ b/libraries/MTConnect.NET-DeviceFinder/MTConnect.NET-DeviceFinder.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -45,6 +45,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-HTTP/Ceen/Httpd/LimitedBodyStream.cs b/libraries/MTConnect.NET-HTTP/Ceen/Httpd/LimitedBodyStream.cs
index fb2fa0cc6..8f7d1fd2b 100644
--- a/libraries/MTConnect.NET-HTTP/Ceen/Httpd/LimitedBodyStream.cs
+++ b/libraries/MTConnect.NET-HTTP/Ceen/Httpd/LimitedBodyStream.cs
@@ -152,11 +152,17 @@ public async Task DiscardAllAsync(System.Threading.CancellationToken cance
var buf = new byte[1024 * 8];
while (m_bytesleft > 0)
+ {
+#if NET9_0_OR_GREATER
+ await ReadExactlyAsync(buf, 0, buf.Length, cancellationToken);
+#else
await ReadAsync(buf, 0, buf.Length, cancellationToken);
+#endif
+ }
return true;
}
- #endregion
+#endregion
}
}
diff --git a/libraries/MTConnect.NET-HTTP/Ceen/Httpd/ServerConfig.cs b/libraries/MTConnect.NET-HTTP/Ceen/Httpd/ServerConfig.cs
index 2c63ab6c4..753cce92b 100644
--- a/libraries/MTConnect.NET-HTTP/Ceen/Httpd/ServerConfig.cs
+++ b/libraries/MTConnect.NET-HTTP/Ceen/Httpd/ServerConfig.cs
@@ -178,7 +178,11 @@ public ServerConfig()
/// The certificate password.
public void LoadCertificate(string path, string password)
{
+#if NET9_0_OR_GREATER
+ this.SSLCertificate = X509CertificateLoader.LoadPkcs12FromFile(path, password ?? "");
+#else
this.SSLCertificate = new X509Certificate2(path, password ?? "");
+#endif
}
///
diff --git a/libraries/MTConnect.NET-HTTP/MTConnect.NET-HTTP.csproj b/libraries/MTConnect.NET-HTTP/MTConnect.NET-HTTP.csproj
index 8fe2432c8..dd55800b0 100644
--- a/libraries/MTConnect.NET-HTTP/MTConnect.NET-HTTP.csproj
+++ b/libraries/MTConnect.NET-HTTP/MTConnect.NET-HTTP.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -112,6 +112,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-HTTP/Servers/MTConnectPostResponseHandler.cs b/libraries/MTConnect.NET-HTTP/Servers/MTConnectPostResponseHandler.cs
index 339739924..4040e4728 100644
--- a/libraries/MTConnect.NET-HTTP/Servers/MTConnectPostResponseHandler.cs
+++ b/libraries/MTConnect.NET-HTTP/Servers/MTConnectPostResponseHandler.cs
@@ -105,7 +105,12 @@ private static async Task ReadRequestBytes(Stream inputStream)
{
var bufferSize = 1048576 * 2; // 2 MB
var bytes = new byte[bufferSize];
+
+#if NET9_0_OR_GREATER
+ await inputStream.ReadExactlyAsync(bytes, 0, bytes.Length);
+#else
await inputStream.ReadAsync(bytes, 0, bytes.Length);
+#endif
return TrimEnd(bytes);
}
diff --git a/libraries/MTConnect.NET-JSON-cppagent/MTConnect.NET-JSON-cppagent.csproj b/libraries/MTConnect.NET-JSON-cppagent/MTConnect.NET-JSON-cppagent.csproj
index 97af06986..4a27e9f30 100644
--- a/libraries/MTConnect.NET-JSON-cppagent/MTConnect.NET-JSON-cppagent.csproj
+++ b/libraries/MTConnect.NET-JSON-cppagent/MTConnect.NET-JSON-cppagent.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -52,6 +52,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-JSON/MTConnect.NET-JSON.csproj b/libraries/MTConnect.NET-JSON/MTConnect.NET-JSON.csproj
index 7874233e5..de175985c 100644
--- a/libraries/MTConnect.NET-JSON/MTConnect.NET-JSON.csproj
+++ b/libraries/MTConnect.NET-JSON/MTConnect.NET-JSON.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -93,6 +93,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-MQTT/Clients/MTConnectMqttExpandedClient.cs b/libraries/MTConnect.NET-MQTT/Clients/MTConnectMqttExpandedClient.cs
index e532a5344..3512a7558 100644
--- a/libraries/MTConnect.NET-MQTT/Clients/MTConnectMqttExpandedClient.cs
+++ b/libraries/MTConnect.NET-MQTT/Clients/MTConnectMqttExpandedClient.cs
@@ -290,7 +290,11 @@ private async Task Worker()
// Add CA (Certificate Authority)
if (!string.IsNullOrEmpty(_caCertPath))
{
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificateFromFile(GetFilePath(_caCertPath)));
+#else
certificates.Add(new X509Certificate2(GetFilePath(_caCertPath)));
+#endif
}
// Add Client Certificate & Private Key
@@ -298,7 +302,12 @@ private async Task Worker()
{
#if NET5_0_OR_GREATER
+
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificate(X509Certificate2.CreateFromPemFile(GetFilePath(_pemClientCertPath), GetFilePath(_pemPrivateKeyPath)).Export(X509ContentType.Pfx)));
+#else
certificates.Add(new X509Certificate2(X509Certificate2.CreateFromPemFile(GetFilePath(_pemClientCertPath), GetFilePath(_pemPrivateKeyPath)).Export(X509ContentType.Pfx)));
+#endif
clientOptionsBuilder.WithTlsOptions(b => b
.WithSslProtocols(System.Security.Authentication.SslProtocols.Tls12)
diff --git a/libraries/MTConnect.NET-MQTT/MTConnect.NET-MQTT.csproj b/libraries/MTConnect.NET-MQTT/MTConnect.NET-MQTT.csproj
index b38908076..2be550076 100644
--- a/libraries/MTConnect.NET-MQTT/MTConnect.NET-MQTT.csproj
+++ b/libraries/MTConnect.NET-MQTT/MTConnect.NET-MQTT.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -58,12 +58,42 @@
by GHSA-hh2w-p6rv-4g7w. On netstandard2.0 and net48 the
package is the only thing on the wire, so the override here
closes the actual exposure surface. -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -73,6 +103,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-MQTT/MTConnectMqttRelay.cs b/libraries/MTConnect.NET-MQTT/MTConnectMqttRelay.cs
index 14804df53..1b858a8c4 100644
--- a/libraries/MTConnect.NET-MQTT/MTConnectMqttRelay.cs
+++ b/libraries/MTConnect.NET-MQTT/MTConnectMqttRelay.cs
@@ -214,7 +214,11 @@ private async Task Worker()
// Add CA (Certificate Authority)
if (!string.IsNullOrEmpty(_configuration.CertificateAuthority))
{
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificateFromFile(GetFilePath(_configuration.CertificateAuthority)));
+#else
certificates.Add(new X509Certificate2(GetFilePath(_configuration.CertificateAuthority)));
+#endif
}
// Add Client Certificate & Private Key
@@ -222,7 +226,12 @@ private async Task Worker()
{
#if NET5_0_OR_GREATER
+
+#if NET9_0_OR_GREATER
+ certificates.Add(X509CertificateLoader.LoadCertificate(X509Certificate2.CreateFromPemFile(GetFilePath(_configuration.PemCertificate), GetFilePath(_configuration.PemPrivateKey)).Export(X509ContentType.Pfx)));
+#else
certificates.Add(new X509Certificate2(X509Certificate2.CreateFromPemFile(GetFilePath(_configuration.PemCertificate), GetFilePath(_configuration.PemPrivateKey)).Export(X509ContentType.Pfx)));
+#endif
clientOptionsBuilder.WithCleanSession();
clientOptionsBuilder.WithTlsOptions(b => b
diff --git a/libraries/MTConnect.NET-SHDR/MTConnect.NET-SHDR.csproj b/libraries/MTConnect.NET-SHDR/MTConnect.NET-SHDR.csproj
index 4eae6edba..a22ab056a 100644
--- a/libraries/MTConnect.NET-SHDR/MTConnect.NET-SHDR.csproj
+++ b/libraries/MTConnect.NET-SHDR/MTConnect.NET-SHDR.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -53,6 +53,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-Services/MTConnect.NET-Services.csproj b/libraries/MTConnect.NET-Services/MTConnect.NET-Services.csproj
index b6f1d0eb2..f84cbc2e1 100644
--- a/libraries/MTConnect.NET-Services/MTConnect.NET-Services.csproj
+++ b/libraries/MTConnect.NET-Services/MTConnect.NET-Services.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -56,6 +56,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-SysML/MTConnect.NET-SysML.csproj b/libraries/MTConnect.NET-SysML/MTConnect.NET-SysML.csproj
index c0ea260e0..5045ee92e 100644
--- a/libraries/MTConnect.NET-SysML/MTConnect.NET-SysML.csproj
+++ b/libraries/MTConnect.NET-SysML/MTConnect.NET-SysML.csproj
@@ -4,13 +4,13 @@
net8.0
- net6.0;net7.0;net8.0;net9.0
+ net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net6.0;net7.0;net8.0;net9.0
+ net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -49,6 +49,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-TLS/MTConnect.NET-TLS.csproj b/libraries/MTConnect.NET-TLS/MTConnect.NET-TLS.csproj
index 18d6219c9..56edaab52 100644
--- a/libraries/MTConnect.NET-TLS/MTConnect.NET-TLS.csproj
+++ b/libraries/MTConnect.NET-TLS/MTConnect.NET-TLS.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -45,6 +45,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET-TLS/TlsConfiguration.cs b/libraries/MTConnect.NET-TLS/TlsConfiguration.cs
index f6c3f3143..ffdf10504 100644
--- a/libraries/MTConnect.NET-TLS/TlsConfiguration.cs
+++ b/libraries/MTConnect.NET-TLS/TlsConfiguration.cs
@@ -81,8 +81,13 @@ private CertificateLoadResult GetPfxCertificate()
{
X509Certificate2 certificate;
+#if NET9_0_OR_GREATER
+ if (!string.IsNullOrEmpty(Pfx.CertificatePassword)) certificate = X509CertificateLoader.LoadPkcs12FromFile(Pfx.CertificatePath, Pfx.CertificatePassword);
+ else certificate = X509CertificateLoader.LoadCertificateFromFile(Pfx.CertificatePath);
+#else
if (!string.IsNullOrEmpty(Pfx.CertificatePassword)) certificate = new X509Certificate2(Pfx.CertificatePath, Pfx.CertificatePassword);
else certificate = new X509Certificate2(Pfx.CertificatePath);
+#endif
return CertificateLoadResult.Ok(certificate);
}
@@ -121,10 +126,17 @@ private CertificateLoadResult GetPemCertificate()
certificate = null;
#endif
+#if NET9_0_OR_GREATER
+ // Export to Pkcs12
+ var pfxPassword = Guid.NewGuid().ToString();
+ var pkcsCert = certificate.Export(X509ContentType.Pkcs12, pfxPassword);
+ certificate = X509CertificateLoader.LoadPkcs12(pkcsCert, pfxPassword);
+#else
// Export to Pkcs12
var pfxPassword = Guid.NewGuid().ToString();
var pkcsCert = certificate.Export(X509ContentType.Pkcs12, pfxPassword);
certificate = new X509Certificate2(pkcsCert, pfxPassword);
+#endif
return CertificateLoadResult.Ok(certificate);
}
@@ -145,16 +157,23 @@ private CertificateLoadResult GetPemCertificateAuthority()
{
X509Certificate2 certificate;
-#if NET5_0_OR_GREATER
+#if NET9_0_OR_GREATER
+ certificate = X509CertificateLoader.LoadCertificateFromFile(Pem.CertificateAuthority);
+
+ // Export to Pkcs12
+ var pfxPassword = Guid.NewGuid().ToString();
+ var pkcsCert = certificate.Export(X509ContentType.Pkcs12, pfxPassword);
+ certificate = X509CertificateLoader.LoadPkcs12(pkcsCert, pfxPassword);
+#elif NET5_0_OR_GREATER
certificate = new X509Certificate2(Pem.CertificateAuthority);
-#else
- certificate = null;
-#endif
// Export to Pkcs12
var pfxPassword = Guid.NewGuid().ToString();
var pkcsCert = certificate.Export(X509ContentType.Pkcs12, pfxPassword);
certificate = new X509Certificate2(pkcsCert, pfxPassword);
+#else
+ certificate = null;
+#endif
return CertificateLoadResult.Ok(certificate);
}
diff --git a/libraries/MTConnect.NET-XML/MTConnect.NET-XML.csproj b/libraries/MTConnect.NET-XML/MTConnect.NET-XML.csproj
index 41e35537a..4307e5eeb 100644
--- a/libraries/MTConnect.NET-XML/MTConnect.NET-XML.csproj
+++ b/libraries/MTConnect.NET-XML/MTConnect.NET-XML.csproj
@@ -4,13 +4,13 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
false
None
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -77,6 +77,10 @@
True
\
+
+ True
+ \
+
diff --git a/libraries/MTConnect.NET/MTConnect.NET.csproj b/libraries/MTConnect.NET/MTConnect.NET.csproj
index 37c2c90e7..ac643edb8 100644
--- a/libraries/MTConnect.NET/MTConnect.NET.csproj
+++ b/libraries/MTConnect.NET/MTConnect.NET.csproj
@@ -4,11 +4,11 @@
net8.0
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
- net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0
+ net461;net462;net47;net471;net472;net48;netstandard2.0;net6.0;net7.0;net8.0;net9.0;net10.0
true
@@ -56,6 +56,10 @@
True
\
+
+ True
+ \
+