diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index f999dc791..4c149f9c6 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -21,6 +21,10 @@ jobs:
analyze:
name: Analyze
runs-on: windows-2022
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
strategy:
fail-fast: false
@@ -51,7 +55,7 @@ jobs:
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
- uses: microsoft/setup-msbuild@v1.3.1
+ uses: microsoft/setup-msbuild@v2.0.0
- name: Restore Packages
run: |
diff --git a/ComIOP/Common/UA COM Interop Library.csproj b/ComIOP/Common/UA COM Interop Library.csproj
index 4de08697c..9f1f31674 100644
--- a/ComIOP/Common/UA COM Interop Library.csproj
+++ b/ComIOP/Common/UA COM Interop Library.csproj
@@ -265,13 +265,13 @@
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
diff --git a/ComIOP/Wrapper/ServerWrapper/UA COM Server Wrapper.csproj b/ComIOP/Wrapper/ServerWrapper/UA COM Server Wrapper.csproj
index 5489c4c00..76b7230cf 100644
--- a/ComIOP/Wrapper/ServerWrapper/UA COM Server Wrapper.csproj
+++ b/ComIOP/Wrapper/ServerWrapper/UA COM Server Wrapper.csproj
@@ -140,7 +140,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Samples/Client.Net4/UA Sample Client.csproj b/Samples/Client.Net4/UA Sample Client.csproj
index d254ca3be..8a20efd79 100644
--- a/Samples/Client.Net4/UA Sample Client.csproj
+++ b/Samples/Client.Net4/UA Sample Client.csproj
@@ -138,7 +138,7 @@
8.0.0
- 1.4.372.106
+ 1.5.373.121
4.3.4
diff --git a/Samples/Client/ClientPage.xaml.cs b/Samples/Client/ClientPage.xaml.cs
index 794242cb1..01d3a60e5 100644
--- a/Samples/Client/ClientPage.xaml.cs
+++ b/Samples/Client/ClientPage.xaml.cs
@@ -497,7 +497,7 @@ private void Discovery_RegisterMI_Click(object sender, EventArgs e)
}
}
- private async void OnRegister(object sender)
+ private void OnRegister(object sender)
{
try
{
@@ -505,7 +505,7 @@ private async void OnRegister(object sender)
if (server != null)
{
- await server.RegisterWithDiscoveryServer();
+ server.RegisterWithDiscoveryServer();
}
}
catch (Exception exception)
@@ -557,7 +557,7 @@ await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
XmlEncoder encoder = new XmlEncoder(monitoredItem.Subscription.Session.MessageContext);
e.NotificationValue.Encode(encoder);
- ServerStatusTB.Text = encoder.Close();
+ ServerStatusTB.Text = encoder.CloseAndReturnText();
}
catch (Exception ex)
{
diff --git a/Samples/Client/Opc.Ua.SampleClient.csproj b/Samples/Client/Opc.Ua.SampleClient.csproj
index 3a47ea950..45dfbcb4e 100644
--- a/Samples/Client/Opc.Ua.SampleClient.csproj
+++ b/Samples/Client/Opc.Ua.SampleClient.csproj
@@ -157,8 +157,8 @@
6.2.14
-
- 1.4.372.106
+
+ 1.5.373.121
4.3.0
@@ -189,4 +189,4 @@
-->
-
\ No newline at end of file
+
diff --git a/Samples/ClientControls.Net4/UA Client Controls.csproj b/Samples/ClientControls.Net4/UA Client Controls.csproj
index 47a58205f..eb96f1153 100644
--- a/Samples/ClientControls.Net4/UA Client Controls.csproj
+++ b/Samples/ClientControls.Net4/UA Client Controls.csproj
@@ -1015,16 +1015,16 @@
- 1.4.372.76
+ 1.5.373.121
- 1.4.372.76
+ 1.5.373.121
- 1.4.372.76
+ 1.5.373.121
- 1.4.372.76
+ 1.5.373.121
diff --git a/Samples/ClientControls/Opc.Ua.Client.Controls.csproj b/Samples/ClientControls/Opc.Ua.Client.Controls.csproj
index ffe77b152..a0a898f65 100644
--- a/Samples/ClientControls/Opc.Ua.Client.Controls.csproj
+++ b/Samples/ClientControls/Opc.Ua.Client.Controls.csproj
@@ -267,7 +267,7 @@
6.2.14
- 1.4.372.106
+ 1.5.373.121
4.3.0
@@ -290,4 +290,4 @@
-->
-
\ No newline at end of file
+
diff --git a/Samples/Controls.Net4/UA Sample Controls.csproj b/Samples/Controls.Net4/UA Sample Controls.csproj
index cc18e59ea..b16d10d25 100644
--- a/Samples/Controls.Net4/UA Sample Controls.csproj
+++ b/Samples/Controls.Net4/UA Sample Controls.csproj
@@ -708,7 +708,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Samples/Controls/Opc.Ua.Sample.Controls.csproj b/Samples/Controls/Opc.Ua.Sample.Controls.csproj
index ee5ad42e7..27df0ad7c 100644
--- a/Samples/Controls/Opc.Ua.Sample.Controls.csproj
+++ b/Samples/Controls/Opc.Ua.Sample.Controls.csproj
@@ -1,4 +1,4 @@
-
+
@@ -207,7 +207,7 @@
6.2.14
- 1.4.372.106
+ 1.5.373.121
4.3.0
diff --git a/Samples/GDS/Client/GlobalDiscoveryClient.csproj b/Samples/GDS/Client/GlobalDiscoveryClient.csproj
index a24c3443e..57548ef77 100644
--- a/Samples/GDS/Client/GlobalDiscoveryClient.csproj
+++ b/Samples/GDS/Client/GlobalDiscoveryClient.csproj
@@ -139,10 +139,10 @@
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
4.3.4
diff --git a/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj b/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj
index 95aecc68f..e8686dd2b 100644
--- a/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj
+++ b/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj
@@ -217,10 +217,10 @@
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
diff --git a/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj b/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj
index 812bc25a4..c27a8dac1 100644
--- a/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj
+++ b/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj
@@ -12,9 +12,10 @@
+
-
-
+
+
diff --git a/Samples/GDS/ConsoleServer/Program.cs b/Samples/GDS/ConsoleServer/Program.cs
index 8599b8199..285c90ce4 100644
--- a/Samples/GDS/ConsoleServer/Program.cs
+++ b/Samples/GDS/ConsoleServer/Program.cs
@@ -29,9 +29,9 @@
using Mono.Options;
using Opc.Ua.Configuration;
-using Opc.Ua.Gds.Server.Database;
using Opc.Ua.Gds.Server.Database.Linq;
using Opc.Ua.Server;
+using Opc.Ua.Server.UserDatabase;
using System;
using System.Collections.Generic;
using System.Data;
@@ -92,7 +92,7 @@ public enum ExitCode : int
ErrorInvalidCommandLine = 0x100
};
- public class Program
+ public static class Program
{
public static int Main(string[] args)
@@ -242,7 +242,7 @@ private async Task ConsoleGlobalDiscoveryServer()
string userdatabaseStorePath = Utils.ReplaceSpecialFolderNames(gdsConfiguration.UsersDatabaseStorePath);
var database = JsonApplicationsDatabase.Load(databaseStorePath);
- var userDatabase = JsonUsersDatabase.Load(userdatabaseStorePath);
+ var userDatabase = JsonUserDatabase.Load(userdatabaseStorePath);
bool createStandardUsers = ConfigureUsers(userDatabase);
@@ -273,7 +273,7 @@ private async Task ConsoleGlobalDiscoveryServer()
}
- private bool ConfigureUsers(JsonUsersDatabase userDatabase)
+ private bool ConfigureUsers(JsonUserDatabase userDatabase)
{
ApplicationInstance.MessageDlg.Message("Use default users?", true);
bool createStandardUsers = ApplicationInstance.MessageDlg.ShowAsync().Result;
@@ -297,10 +297,10 @@ private bool ConfigureUsers(JsonUsersDatabase userDatabase)
_ = password ?? throw new ArgumentNullException("Password is not allowed to be empty");
//create User, if User exists delete & recreate
- if (!userDatabase.CreateUser(username, password, GdsRole.ApplicationAdmin))
+ if (!userDatabase.CreateUser(username, password, new List() { GdsRole.ApplicationAdmin }))
{
userDatabase.DeleteUser(username);
- userDatabase.CreateUser(username, password, GdsRole.ApplicationAdmin);
+ userDatabase.CreateUser(username, password, new List() { GdsRole.ApplicationAdmin });
}
}
return createStandardUsers;
diff --git a/Samples/GDS/Server/App.config b/Samples/GDS/Server/App.config
index 997a25c06..58a99650b 100644
--- a/Samples/GDS/Server/App.config
+++ b/Samples/GDS/Server/App.config
@@ -3,12 +3,15 @@
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -31,8 +63,32 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -45,7 +101,16 @@
-
+
+
+
+
+
+
+
+
+
+
diff --git a/Samples/GDS/Server/usersdb.edmx.diagram b/Samples/GDS/Server/DB/usersdb.edmx.diagram
similarity index 76%
rename from Samples/GDS/Server/usersdb.edmx.diagram
rename to Samples/GDS/Server/DB/usersdb.edmx.diagram
index d52a9330a..e3c020fcb 100644
--- a/Samples/GDS/Server/usersdb.edmx.diagram
+++ b/Samples/GDS/Server/DB/usersdb.edmx.diagram
@@ -6,6 +6,8 @@
+
+
diff --git a/Samples/GDS/Server/DB/usersdb.edmx.sql b/Samples/GDS/Server/DB/usersdb.edmx.sql
index bcff32bd8..af024bf67 100644
--- a/Samples/GDS/Server/DB/usersdb.edmx.sql
+++ b/Samples/GDS/Server/DB/usersdb.edmx.sql
@@ -2,8 +2,8 @@
-- --------------------------------------------------
-- Entity Designer DDL Script for SQL Server 2005, 2008, 2012 and Azure
-- --------------------------------------------------
--- Date Created: 12/22/2023 22:14:49
--- Generated from EDMX file: C:\Users\roman\source\repos\UA-.NETStandard-Samples\Samples\GDS\Server\usersdb.edmx
+-- Date Created: 02/07/2024 14:25:58
+-- Generated from EDMX file: usersdb.edmx
-- --------------------------------------------------
SET QUOTED_IDENTIFIER OFF;
@@ -17,11 +17,20 @@ GO
-- Dropping existing FOREIGN KEY constraints
-- --------------------------------------------------
+IF OBJECT_ID(N'[dbo].[FK_UserSqlRole]', 'F') IS NOT NULL
+ ALTER TABLE [dbo].[SqlRoleSet] DROP CONSTRAINT [FK_UserSqlRole];
+GO
-- --------------------------------------------------
-- Dropping existing tables
-- --------------------------------------------------
+IF OBJECT_ID(N'[dbo].[UserSet]', 'U') IS NOT NULL
+ DROP TABLE [dbo].[UserSet];
+GO
+IF OBJECT_ID(N'[dbo].[SqlRoleSet]', 'U') IS NOT NULL
+ DROP TABLE [dbo].[SqlRoleSet];
+GO
-- --------------------------------------------------
-- Creating all tables
@@ -31,8 +40,16 @@ GO
CREATE TABLE [dbo].[UserSet] (
[ID] uniqueidentifier NOT NULL,
[UserName] nvarchar(max) NOT NULL,
- [Hash] nvarchar(max) NOT NULL,
- [GdsRole] int NOT NULL
+ [Hash] nvarchar(max) NOT NULL
+);
+GO
+
+-- Creating table 'SqlRoleSet'
+CREATE TABLE [dbo].[SqlRoleSet] (
+ [Id] uniqueidentifier NOT NULL,
+ [RoleId] uniqueidentifier NULL,
+ [Name] nvarchar(max) NOT NULL,
+ [UserID] uniqueidentifier NOT NULL
);
GO
@@ -46,10 +63,31 @@ ADD CONSTRAINT [PK_UserSet]
PRIMARY KEY CLUSTERED ([ID] ASC);
GO
+-- Creating primary key on [Id] in table 'SqlRoleSet'
+ALTER TABLE [dbo].[SqlRoleSet]
+ADD CONSTRAINT [PK_SqlRoleSet]
+ PRIMARY KEY CLUSTERED ([Id] ASC);
+GO
+
-- --------------------------------------------------
-- Creating all FOREIGN KEY constraints
-- --------------------------------------------------
+-- Creating foreign key on [UserID] in table 'SqlRoleSet'
+ALTER TABLE [dbo].[SqlRoleSet]
+ADD CONSTRAINT [FK_UserSqlRole]
+ FOREIGN KEY ([UserID])
+ REFERENCES [dbo].[UserSet]
+ ([ID])
+ ON DELETE CASCADE ON UPDATE NO ACTION;
+GO
+
+-- Creating non-clustered index for FOREIGN KEY 'FK_UserSqlRole'
+CREATE INDEX [IX_FK_UserSqlRole]
+ON [dbo].[SqlRoleSet]
+ ([UserID]);
+GO
+
-- --------------------------------------------------
-- Script has ended
--- --------------------------------------------------
\ No newline at end of file
+-- --------------------------------------------------
diff --git a/Samples/GDS/Server/usersdb.tt b/Samples/GDS/Server/DB/usersdb.tt
similarity index 100%
rename from Samples/GDS/Server/usersdb.tt
rename to Samples/GDS/Server/DB/usersdb.tt
diff --git a/Samples/GDS/Server/GlobalDiscoveryServer.csproj b/Samples/GDS/Server/GlobalDiscoveryServer.csproj
index 52a04b880..490b60005 100644
--- a/Samples/GDS/Server/GlobalDiscoveryServer.csproj
+++ b/Samples/GDS/Server/GlobalDiscoveryServer.csproj
@@ -79,48 +79,52 @@
-
+
gdsdb.tt
-
+
gdsdb.tt
-
+
usersdb.tt
-
+
+
+ usersdb.tt
+
+
True
True
usersdb.Context.tt
-
+
True
True
usersdb.tt
-
+
True
True
usersdb.edmx
-
+
gdsdb.tt
-
+
gdsdb.tt
-
+
True
True
gdsdb.Context.tt
-
+
gdsdb.tt
True
True
-
+
True
True
gdsdb.edmx
@@ -128,18 +132,17 @@
-
+
gdsdb.tt
-
+
TextTemplatingFileGenerator
usersdb.Context.cs
usersdb.edmx
-
-
+
TextTemplatingFileGenerator
usersdb.cs
usersdb.edmx
@@ -160,12 +163,12 @@
Always
-
+
TextTemplatingFileGenerator
gdsdb.Context.cs
-
+
TextTemplatingFileGenerator
gdsdb.cs
@@ -176,18 +179,18 @@
Designer
-
+
EntityModelCodeGenerator
gdsdb.Designer.cs
-
+
EntityModelCodeGenerator
usersdb.Designer.cs
-
+
usersdb.edmx
-
+
gdsdb.edmx
@@ -232,10 +235,10 @@
6.4.4
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
diff --git a/Samples/GDS/Server/Program.cs b/Samples/GDS/Server/Program.cs
index 6a1ef3b54..c5b8d7c1b 100644
--- a/Samples/GDS/Server/Program.cs
+++ b/Samples/GDS/Server/Program.cs
@@ -31,8 +31,10 @@
using Opc.Ua.Configuration;
using Opc.Ua.Gds.Server.Database.Linq;
using Opc.Ua.Gds.Server.Database.Sql;
+using Opc.Ua.Server;
using Opc.Ua.Server.Controls;
using System;
+using System.Collections.Generic;
using System.Data.Entity;
namespace Opc.Ua.Gds.Server
@@ -118,10 +120,10 @@ private static bool ConfigureUsers(SqlUsersDatabase userDatabase)
_ = password ?? throw new ArgumentNullException("Password is not allowed to be empty");
//create User, if User exists delete & recreate
- if (!userDatabase.CreateUser(username, password, GdsRole.ApplicationAdmin))
+ if (!userDatabase.CreateUser(username, password, new List() { GdsRole.ApplicationAdmin }))
{
userDatabase.DeleteUser(username);
- userDatabase.CreateUser(username, password, GdsRole.ApplicationAdmin);
+ userDatabase.CreateUser(username, password, new List(){ GdsRole.ApplicationAdmin});
}
}
return createStandardUsers;
diff --git a/Samples/GDS/Server/SqlApplicationsDatabase.cs b/Samples/GDS/Server/SqlApplicationsDatabase.cs
index 5572ef783..2c3289d90 100644
--- a/Samples/GDS/Server/SqlApplicationsDatabase.cs
+++ b/Samples/GDS/Server/SqlApplicationsDatabase.cs
@@ -33,6 +33,7 @@
using System.Linq;
using System.Reflection;
using Newtonsoft.Json;
+using Opc.Ua.Gds.Server.DB;
namespace Opc.Ua.Gds.Server.Database.Sql
{
diff --git a/Samples/GDS/Server/SqlUsersDatabase.cs b/Samples/GDS/Server/SqlUsersDatabase.cs
index 8d0a16d61..97c8f6c1d 100644
--- a/Samples/GDS/Server/SqlUsersDatabase.cs
+++ b/Samples/GDS/Server/SqlUsersDatabase.cs
@@ -4,18 +4,15 @@
using System.IO;
using System.Linq;
using System.Reflection;
-using System.Runtime.Serialization;
using System.Security.Cryptography;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json;
-using Opc.Ua.Gds.Server;
-using Opc.Ua.Gds.Server.Database;
using Opc.Ua.Gds.Server.Database.Sql;
+using Opc.Ua.Gds.Server.DB;
+using Opc.Ua.Server;
+using Opc.Ua.Server.UserDatabase;
namespace Opc.Ua.Gds.Server
{
- public class SqlUsersDatabase: IUsersDatabase
+ public class SqlUsersDatabase: IUserDatabase
{
#region IUsersDatabase
@@ -54,7 +51,7 @@ public void Initialize()
}
}
- public bool CreateUser(string userName, string password, GdsRole role)
+ public bool CreateUser(string userName, string password, IEnumerable roles)
{
if (string.IsNullOrEmpty(userName))
{
@@ -74,7 +71,13 @@ public bool CreateUser(string userName, string password, GdsRole role)
string hash = Hash(password);
- var user = new User { ID = Guid.NewGuid(), UserName = userName, Hash = hash, GdsRole = (int)role };
+ var sqlRoles = new List();
+ foreach (var role in roles)
+ {
+ sqlRoles.Add((SqlRole)role);
+ }
+
+ var user = new User { ID = Guid.NewGuid(), UserName = userName, Hash = hash, Roles = sqlRoles };
entities.UserSet.Add(user);
@@ -127,7 +130,7 @@ public bool CheckCredentials(string userName, string password)
}
}
- public GdsRole GetUserRole(string userName)
+ public IEnumerable GetUserRoles(string userName)
{
if (string.IsNullOrEmpty(userName))
{
@@ -142,7 +145,13 @@ public GdsRole GetUserRole(string userName)
throw new ArgumentException("No user found with the UserName " + userName);
}
- return (GdsRole)user.GdsRole;
+ var roles = new List();
+ foreach (var role in user.Roles)
+ {
+ roles.Add((Role)role);
+ }
+
+ return roles;
}
}
diff --git a/Samples/GDS/Server/usersdb.edmx.sql b/Samples/GDS/Server/usersdb.edmx.sql
deleted file mode 100644
index 0dc631b53..000000000
--- a/Samples/GDS/Server/usersdb.edmx.sql
+++ /dev/null
@@ -1,58 +0,0 @@
-
--- --------------------------------------------------
--- Entity Designer DDL Script for SQL Server 2005, 2008, 2012 and Azure
--- --------------------------------------------------
--- Date Created: 12/22/2023 22:34:02
--- Generated from EDMX file: C:\Users\roman\source\repos\UA-.NETStandard-Samples\Samples\GDS\Server\usersdb.edmx
--- --------------------------------------------------
-
-SET QUOTED_IDENTIFIER OFF;
-GO
-USE [usersdb];
-GO
-IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]');
-GO
-
--- --------------------------------------------------
--- Dropping existing FOREIGN KEY constraints
--- --------------------------------------------------
-
-
--- --------------------------------------------------
--- Dropping existing tables
--- --------------------------------------------------
-
-IF OBJECT_ID(N'[dbo].[UserSet]', 'U') IS NOT NULL
- DROP TABLE [dbo].[UserSet];
-GO
-
--- --------------------------------------------------
--- Creating all tables
--- --------------------------------------------------
-
--- Creating table 'UserSet'
-CREATE TABLE [dbo].[UserSet] (
- [ID] uniqueidentifier NOT NULL,
- [UserName] nvarchar(max) NOT NULL,
- [Hash] nvarchar(max) NOT NULL,
- [GdsRole] int NOT NULL
-);
-GO
-
--- --------------------------------------------------
--- Creating all PRIMARY KEY constraints
--- --------------------------------------------------
-
--- Creating primary key on [ID] in table 'UserSet'
-ALTER TABLE [dbo].[UserSet]
-ADD CONSTRAINT [PK_UserSet]
- PRIMARY KEY CLUSTERED ([ID] ASC);
-GO
-
--- --------------------------------------------------
--- Creating all FOREIGN KEY constraints
--- --------------------------------------------------
-
--- --------------------------------------------------
--- Script has ended
--- --------------------------------------------------
\ No newline at end of file
diff --git a/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj b/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj
index ac817cef2..be22a9365 100644
--- a/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj
+++ b/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj
@@ -23,8 +23,8 @@
-
-
+
+
diff --git a/Samples/Server.Net4/UA Sample Server.csproj b/Samples/Server.Net4/UA Sample Server.csproj
index 3b8cb0454..492f3f76e 100644
--- a/Samples/Server.Net4/UA Sample Server.csproj
+++ b/Samples/Server.Net4/UA Sample Server.csproj
@@ -146,7 +146,7 @@
8.0.0
- 1.4.372.106
+ 1.5.373.121
diff --git a/Samples/Server/Opc.Ua.SampleServer.csproj b/Samples/Server/Opc.Ua.SampleServer.csproj
index f7cd20e4a..634314f05 100644
--- a/Samples/Server/Opc.Ua.SampleServer.csproj
+++ b/Samples/Server/Opc.Ua.SampleServer.csproj
@@ -158,7 +158,7 @@
6.2.14
- 1.4.372.106
+ 1.5.373.121
4.3.0
@@ -185,4 +185,4 @@
-->
-
\ No newline at end of file
+
diff --git a/Samples/ServerControls.Net4/UA Server Controls.csproj b/Samples/ServerControls.Net4/UA Server Controls.csproj
index 69e4c10ce..dac7d6ee4 100644
--- a/Samples/ServerControls.Net4/UA Server Controls.csproj
+++ b/Samples/ServerControls.Net4/UA Server Controls.csproj
@@ -148,13 +148,13 @@
- 1.4.372.76
+ 1.5.373.121
- 1.4.372.76
+ 1.5.373.121
- 1.4.372.76
+ 1.5.373.121
diff --git a/Samples/XamarinClient/XamarinClient/UA Xamarin Client.csproj b/Samples/XamarinClient/XamarinClient/UA Xamarin Client.csproj
index 195a33b53..88540e463 100644
--- a/Samples/XamarinClient/XamarinClient/UA Xamarin Client.csproj
+++ b/Samples/XamarinClient/XamarinClient/UA Xamarin Client.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/Workshop/Aggregation/Client/Aggregation Client.csproj b/Workshop/Aggregation/Client/Aggregation Client.csproj
index 0ff536028..fe8e41f4e 100644
--- a/Workshop/Aggregation/Client/Aggregation Client.csproj
+++ b/Workshop/Aggregation/Client/Aggregation Client.csproj
@@ -134,7 +134,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj b/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj
index e70c9c04a..0eb83ca66 100644
--- a/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj
+++ b/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj
@@ -19,7 +19,7 @@
-
+
@@ -41,22 +41,22 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
+
diff --git a/Workshop/Aggregation/Server/Aggregation Server.csproj b/Workshop/Aggregation/Server/Aggregation Server.csproj
index a50d49f4b..67a11e85a 100644
--- a/Workshop/Aggregation/Server/Aggregation Server.csproj
+++ b/Workshop/Aggregation/Server/Aggregation Server.csproj
@@ -129,16 +129,16 @@
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj b/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj
index 9f7b3aab8..afe73fca2 100644
--- a/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj
+++ b/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj
@@ -215,7 +215,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj b/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj
index 8bceb98bd..619947052 100644
--- a/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj
+++ b/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj
@@ -178,7 +178,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Boiler/Client/Boiler Client.csproj b/Workshop/Boiler/Client/Boiler Client.csproj
index 96014b72a..97cf82074 100644
--- a/Workshop/Boiler/Client/Boiler Client.csproj
+++ b/Workshop/Boiler/Client/Boiler Client.csproj
@@ -141,7 +141,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Boiler/Server/Boiler Server.csproj b/Workshop/Boiler/Server/Boiler Server.csproj
index d4901e20a..e762a6eda 100644
--- a/Workshop/Boiler/Server/Boiler Server.csproj
+++ b/Workshop/Boiler/Server/Boiler Server.csproj
@@ -139,7 +139,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Common/Quickstart Library.csproj b/Workshop/Common/Quickstart Library.csproj
index d1b1ffc01..bc83c59a1 100644
--- a/Workshop/Common/Quickstart Library.csproj
+++ b/Workshop/Common/Quickstart Library.csproj
@@ -131,7 +131,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/DataAccess/Client/DataAccess Client.csproj b/Workshop/DataAccess/Client/DataAccess Client.csproj
index 7fe940c7e..f737dc179 100644
--- a/Workshop/DataAccess/Client/DataAccess Client.csproj
+++ b/Workshop/DataAccess/Client/DataAccess Client.csproj
@@ -183,7 +183,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/DataAccess/Server/DataAccess Server.csproj b/Workshop/DataAccess/Server/DataAccess Server.csproj
index 1a15ae317..9886fc55f 100644
--- a/Workshop/DataAccess/Server/DataAccess Server.csproj
+++ b/Workshop/DataAccess/Server/DataAccess Server.csproj
@@ -166,7 +166,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/DataTypes/Client/DataTypes Client.csproj b/Workshop/DataTypes/Client/DataTypes Client.csproj
index 17c010087..fc4fcc7e3 100644
--- a/Workshop/DataTypes/Client/DataTypes Client.csproj
+++ b/Workshop/DataTypes/Client/DataTypes Client.csproj
@@ -123,7 +123,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/DataTypes/Common/DataTypes Library.csproj b/Workshop/DataTypes/Common/DataTypes Library.csproj
index ba184dbb9..7444f1153 100644
--- a/Workshop/DataTypes/Common/DataTypes Library.csproj
+++ b/Workshop/DataTypes/Common/DataTypes Library.csproj
@@ -102,7 +102,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/DataTypes/Server/DataTypes Server.csproj b/Workshop/DataTypes/Server/DataTypes Server.csproj
index 845bff38b..b7c74cb62 100644
--- a/Workshop/DataTypes/Server/DataTypes Server.csproj
+++ b/Workshop/DataTypes/Server/DataTypes Server.csproj
@@ -143,7 +143,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Empty/Client/Empty Client.csproj b/Workshop/Empty/Client/Empty Client.csproj
index a9a8a816e..46f49ce37 100644
--- a/Workshop/Empty/Client/Empty Client.csproj
+++ b/Workshop/Empty/Client/Empty Client.csproj
@@ -132,7 +132,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Empty/Server/Empty Server.csproj b/Workshop/Empty/Server/Empty Server.csproj
index 5d4655a29..05fc09b08 100644
--- a/Workshop/Empty/Server/Empty Server.csproj
+++ b/Workshop/Empty/Server/Empty Server.csproj
@@ -129,7 +129,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj b/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj
index 66acaf2a6..73a1ecc7a 100644
--- a/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj
+++ b/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj
@@ -178,7 +178,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj b/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj
index 982970542..a62d65a39 100644
--- a/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj
+++ b/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj
@@ -192,7 +192,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj b/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj
index 0a4b570fe..d6e52c51f 100644
--- a/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj
+++ b/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj
@@ -142,10 +142,10 @@
- 1.4.372.106
+ 1.5.373.121
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj b/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj
index 840d0d25a..1247f30c8 100644
--- a/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj
+++ b/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj
@@ -187,7 +187,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj b/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj
index bd67302fb..b9c9f92fc 100644
--- a/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj
+++ b/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj
@@ -142,7 +142,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Methods/Client/Methods Client.csproj b/Workshop/Methods/Client/Methods Client.csproj
index 663f0ce2c..7c3dcd991 100644
--- a/Workshop/Methods/Client/Methods Client.csproj
+++ b/Workshop/Methods/Client/Methods Client.csproj
@@ -132,7 +132,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Methods/Server/Methods Server.csproj b/Workshop/Methods/Server/Methods Server.csproj
index 5373d09e9..d5e9d0fb3 100644
--- a/Workshop/Methods/Server/Methods Server.csproj
+++ b/Workshop/Methods/Server/Methods Server.csproj
@@ -131,7 +131,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/PerfTest/Client/PerfTest Client.csproj b/Workshop/PerfTest/Client/PerfTest Client.csproj
index 445ce4949..92dc6b38e 100644
--- a/Workshop/PerfTest/Client/PerfTest Client.csproj
+++ b/Workshop/PerfTest/Client/PerfTest Client.csproj
@@ -130,7 +130,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/PerfTest/Server/PerfTest Server.csproj b/Workshop/PerfTest/Server/PerfTest Server.csproj
index 47ae4b6b2..72c45944c 100644
--- a/Workshop/PerfTest/Server/PerfTest Server.csproj
+++ b/Workshop/PerfTest/Server/PerfTest Server.csproj
@@ -133,7 +133,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj b/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj
index dc508390d..ebbed7334 100644
--- a/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj
+++ b/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj
@@ -119,7 +119,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj b/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj
index f09ec19cc..25fb832e3 100644
--- a/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj
+++ b/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj
@@ -137,7 +137,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj b/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj
index 5b45efa80..de7603595 100644
--- a/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj
+++ b/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj
@@ -125,7 +125,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj b/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj
index 6d7044a80..ba7df40f5 100644
--- a/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj
+++ b/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj
@@ -154,7 +154,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Views/Client/Views Client.csproj b/Workshop/Views/Client/Views Client.csproj
index 37baa770a..2801285fa 100644
--- a/Workshop/Views/Client/Views Client.csproj
+++ b/Workshop/Views/Client/Views Client.csproj
@@ -131,7 +131,7 @@
- 1.4.372.106
+ 1.5.373.121
diff --git a/Workshop/Views/Server/Views Server.csproj b/Workshop/Views/Server/Views Server.csproj
index 763f56a8f..9c44cb0ed 100644
--- a/Workshop/Views/Server/Views Server.csproj
+++ b/Workshop/Views/Server/Views Server.csproj
@@ -145,7 +145,7 @@
- 1.4.372.106
+ 1.5.373.121