Old SDK removed
New dotnet SDK added - Release
diff --git a/sdks/dotnet/basyx-core/BaSyx.Utils/PathHandling/Path.cs b/sdks/dotnet/basyx-core/BaSyx.Utils/PathHandling/Path.cs
new file mode 100644
index 0000000..5f377ab
--- /dev/null
+++ b/sdks/dotnet/basyx-core/BaSyx.Utils/PathHandling/Path.cs
@@ -0,0 +1,43 @@
+/*******************************************************************************
+* Copyright (c) 2020 Robert Bosch GmbH
+* Author: Constantin Ziesche (constantin.ziesche@bosch.com)
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Public License 2.0 which is available at
+* http://www.eclipse.org/legal/epl-2.0
+*
+* SPDX-License-Identifier: EPL-2.0
+*******************************************************************************/
+using System;
+using System.Linq;
+
+namespace BaSyx.Utils.PathHandling
+{
+    public static class Path
+    {
+        public static Uri Append(this Uri uri, params string[] pathElements)
+        {
+            return new Uri(pathElements.Aggregate(uri.AbsoluteUri, (currentElement, pathElement) => string.Format("{0}/{1}", currentElement.TrimEnd('/'), pathElement.TrimStart('/'))));
+        }
+
+        public static string GetFormattedEndpoint(string endpoint, string aggregateId, string entityId, string separator = "/")
+        {
+            if (endpoint[endpoint.Length - 1] == separator[0])
+            {
+                if (!endpoint.Contains(aggregateId))
+                    endpoint += aggregateId + separator + entityId;
+                else
+                    endpoint += entityId;
+            }
+            else
+            {
+                if (!endpoint.Contains(aggregateId))
+                    endpoint += separator + aggregateId + separator + entityId;
+                else
+                    endpoint += separator + entityId;
+            }
+
+            return endpoint;
+        }
+    }
+}