From f11be713d0f5338c4839c86cebf4873a7571c6eb Mon Sep 17 00:00:00 2001 From: "NBMANTZELOS\\bib" Date: Fri, 6 Sep 2024 10:56:31 +0200 Subject: [PATCH] Fertigstellung --- PMCProjekt/.vs/PMCProjekt/v17/.suo | Bin 32768 -> 31232 bytes .../.vs/PMCProjekt/v17/DocumentLayout.json | 8 +- PMCProjekt/PMCProjekt/Program.cs | 322 +++++++++++++----- .../Debug/net8.0/PMCProjekt.AssemblyInfo.cs | 2 +- .../PMCProjekt.AssemblyInfoInputs.cache | 2 +- .../obj/Debug/net8.0/PMCProjekt.assets.cache | Bin 19048 -> 19048 bytes .../obj/PMCProjekt.csproj.nuget.dgspec.json | 2 +- .../obj/PMCProjekt.csproj.nuget.g.props | 2 +- PMCProjekt/PMCProjekt/obj/project.assets.json | 2 +- PMCProjekt/PMCProjekt/obj/project.nuget.cache | 2 +- 10 files changed, 253 insertions(+), 89 deletions(-) diff --git a/PMCProjekt/.vs/PMCProjekt/v17/.suo b/PMCProjekt/.vs/PMCProjekt/v17/.suo index c9b62f11892bcdf523a0299e3ae245580383d8ee..af07331967cc11ddd31e0e80f856f21e3bcaa77d 100644 GIT binary patch delta 2495 zcmc&$YfM~46rLGC7P#0gyWIk1dC05iF5MRox76JQnpA-WEVXL3C@jymNQK=9*0{Gn zG;JYiyC*U6(X`S;`$J>l#-uU*v6cR4Y@2F~MpI*|_K&6}8X>X9u$}|=7Ni&@)p$1F zoik_7%sF#r&Y6{EAx_ z35y8d53~3+LpUMA`(QSqG_nR~q#m^d&saEm-L9h;Kxu4Do=fU{%|4Y&RiXYM&-)w04=yt@bx#n}e8a)vFOG z5P2zQKKS{qzYIb0LI~F3EJ+!` zsx9$E|5*s~(9mS7g)2F!EdunCE{9wtX+DC?-iIJJ32;;@lC)^g3u4mQbx)zj)2db{ zwn0P}_#^|IOt+ayZ3HFHsT!l$KCkj~$65_hY487IS3d(WeUN!wut6l)M=N1hLxFIiBA-XsJmX$;Z%w?1}sivNu+3mQTHXdAZ!rY zJU&q(CaOi$F`drt!7)lQO<9?7;6fW$Fp%HESMO}$*hIO2W9BR+D`y)QI>@)0#BKHoT>|tJE_4EFn23mamCtcUf_Yxr?w0CoOMF7TP0 zJR5v|4<4}|E_ly@x8fbRzR9S6?0E6M*Vqq%(m=zhoZjX zr)bSI)amWYObs4Kt@xJ~^={Kqfzv{<<*q^jli78PTUY8E5{0gC$?6blYLQA%pjMsv z%b4at0bM#Ih}*Z)m5eqg!ieLtL`7e#f^=~q!P{okpm^K9LURw5 za+nr&ngsQJBNzh~!*53%`+YZlY#w{{!>O(AQ{Uq22-^cz&fq}6gWvN3kCEOydP3-p z;|L-!?y^8Ea2~k-<3-CH3PY5$)A961Q-GT7%PJD@} zLKJm7g4IEnt-|W+>g=|ff)(dv0>$N*h^4DX7#+0bBjV9epT&~9SDjZH8mFjg4d43LZr7%-Rg zV$>M72YOGUX3Cg6&BPex&gjF8Bv`aL6m_US+8pH!j@<|UD!nmmD^{L?zhjp{)8la6YT zi-;XEJyH#}qU}c3pg0u=hVpU9!Zd462X|Oe`6QwgQHHP~C~yKD5+w$+qC+GForXk; zCGoRdQiM_HM+`u-SYSAT+=~dflq+RVBQu4Vq(`w%lPZopMrXzqRt#}tf>|KGEy^M= zksoD)5YIm-(h;RU2e?)0V8>vhAgVu#>igQm!Zr@q8YF!!irp}6ZWF0ObQG9wB57}j zxH-zoVZw55v50ex7q2q7Rc+BMQY+ILg{|0GR!}^OYQ1it9!&4lR;(iXtJ2xQ9@(Y) zoLU^v0;Qj`1v_7;=8Jxr!;-g&1yx^wJBwi6SIC^O>g|CmzCigHdS4^Q(wP)TEliVu z=xva~l^~yz7izicl{ex|YUMI4@1KES)m89LR_c=j38GzvrW;s`1C@f%gN~^rL~v)) zWqe_-V)R1aJB@ew+-o^++_QplY82#Y8RR`nFk9mSrOULw-3tz`+Jc*CV!*t;0wkUV zE6-SA)^;fOPs(DBOWV zfi?*4z6#+$5ZA_qy^r6ob}jGU(V9L z>2T^64{#37PAABnCQa`A9t#k3t@mXyS1#m+eDsaM(bFZ+7qYWFmcAa- zUJc2A8?TH`!U}^A!r5?Scstw-e*!-a&Eu-*(FbPu>hMdZWY{FFGq+#(f6qd5hj0H& zoEy{O_aV<$l#M5Lawsx9-b)h)F8b_-&{y=M#EM+^?KGTCvM78pR)bH?i>DQyYH1mi zsn>UnT>9zf_dmSxa^2x~FW7Il&Heh|w_`i**_!rTynFcOTV)lrpFUZlv-op*fU?Ub WK+{vrpiC>kYu|*TG1LDcmOlX48b2oh diff --git a/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json b/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json index 77d7387..431147c 100644 --- a/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json +++ b/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json @@ -22,11 +22,11 @@ "Title": "Program.cs", "DocumentMoniker": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs", "RelativeDocumentMoniker": "PMCProjekt\\Program.cs", - "ToolTip": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs*", - "RelativeToolTip": "PMCProjekt\\Program.cs*", - "ViewState": "AQIAAHMAAAAAAAAAAAAkwHoAAAAAAAAA", + "ToolTip": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs", + "RelativeToolTip": "PMCProjekt\\Program.cs", + "ViewState": "AQIAAAMAAAAAAAAAAAAAAE0AAAAJAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-14T09:14:59.548Z", + "WhenOpened": "2024-08-30T09:51:48.989Z", "EditorCaption": "" } ] diff --git a/PMCProjekt/PMCProjekt/Program.cs b/PMCProjekt/PMCProjekt/Program.cs index ead2124..78b23bd 100644 --- a/PMCProjekt/PMCProjekt/Program.cs +++ b/PMCProjekt/PMCProjekt/Program.cs @@ -1,6 +1,8 @@ using System; using System.IO; using System.Text.RegularExpressions; +using System.Collections.Generic; +using MySql.Data.MySqlClient; namespace PMCProjekt { @@ -8,12 +10,28 @@ namespace PMCProjekt { static void Main(string[] args) { - // Kundennummer eingeben - Console.Write("Bitte geben Sie die Kundennummer ein (z.B. K2-002): "); - string kundennummer = Console.ReadLine(); + string dateiPfad = "/Schule/PMC/import_yutani.csv"; + string protokollPfad = "/Schule/PMC/ungueltige_Daten.csv"; - // Datei einlesen - string dateiPfad = "C:/Schule/PMC/import_yutani.csv"; + // MySQL-Verbindungszeichenfolge + string connectionString = "server=localhost;uid=root;pwd=root;database=import_export"; + + // Abfrage der Kundennummer vom Benutzer + Console.Write("Bitte geben Sie die Kundennummer (clientno) ein: "); + string clientno = Console.ReadLine(); + + int clientId = HoleClientId(connectionString, clientno); + + if (clientId == 0) + { + Console.WriteLine("Ungültige Kundennummer. Programm wird beendet."); + return; + } + + List> alleDatensaetze = new List>(); + List aktuellerDatensatz = new List(); + + // Überprüfen, ob die Datei existiert if (File.Exists(dateiPfad)) { using (StreamReader sr = new StreamReader(dateiPfad)) @@ -21,37 +39,35 @@ namespace PMCProjekt string zeile; while ((zeile = sr.ReadLine()) != null) { - // Werte aus der Zeile extrahieren - string[] werte = zeile.Split(','); - if (werte.Length >= 4) + if (zeile.StartsWith("Frau") || zeile.StartsWith("Herr") || zeile.StartsWith("Divers")) { - string anrede = werte[0]; - string vorname = werte[1]; - string nachname = werte[2]; - string geburtsdatum = werte[3]; - string adresse = werte.Length > 4 ? werte[4] : null; - string plz = werte.Length > 5 ? werte[5] : null; - string stadt = werte.Length > 6 ? werte[6] : null; - string email = werte.Length > 7 ? werte[7] : null; - string telefonnummern = werte.Length > 8 ? werte[8] : null; + // Wenn ein neuer Datensatz beginnt, speichere den vorherigen + if (aktuellerDatensatz.Count > 0) + { + alleDatensaetze.Add(new List(aktuellerDatensatz)); + aktuellerDatensatz.Clear(); + } + } - // Daten validieren und ungültige Daten protokollieren - if (!DatenValidieren(anrede, vorname, nachname, geburtsdatum, adresse, plz, stadt, email, telefonnummern)) - { - ProtokolliereUngueltigeDaten(werte); - Console.WriteLine("Ungültige Daten: " + string.Join(",", werte)); - } - else - { - Console.WriteLine("Gültige Daten: " + string.Join(",", werte)); - } - } - else - { - // Protokolliere Zeilen mit zu wenigen Datenfeldern - ProtokolliereUngueltigeDaten(werte); - Console.WriteLine("Ungültige Daten (zu wenige Felder): " + string.Join(",", werte)); - } + // Füge die aktuelle Zeile dem Datensatz hinzu + aktuellerDatensatz.Add(zeile); + } + + // Füge den letzten Datensatz hinzu, falls vorhanden + if (aktuellerDatensatz.Count > 0) + { + alleDatensaetze.Add(aktuellerDatensatz); + } + } + + // Verarbeitung aller gesammelten Datensätze + using (MySqlConnection connection = new MySqlConnection(connectionString)) + { + connection.Open(); + + foreach (var datensatz in alleDatensaetze) + { + VerarbeiteDatensatz(datensatz, protokollPfad, connection, clientId); } } } @@ -61,79 +77,227 @@ namespace PMCProjekt } } - static bool DatenValidieren(string anrede, string vorname, string nachname, string geburtsdatum, string adresse, string plz, string stadt, string email, string telefonnummern) + static int HoleClientId(string connectionString, string clientno) { - bool istGueltig = true; - - // Geburtsdatum validieren - if (!PrüfGeburtstag(geburtsdatum)) + using (MySqlConnection connection = new MySqlConnection(connectionString)) { - Console.WriteLine($"Ungültiges Geburtsdatum: {geburtsdatum}"); - istGueltig = false; - } - - // E-Mail-Adresse validieren - if (!string.IsNullOrEmpty(email) && !PrüfEmail(email)) - { - Console.WriteLine($"Ungültige E-Mail-Adresse: {email}"); - istGueltig = false; - } - - // Postleitzahl validieren - if (!string.IsNullOrEmpty(plz) && !PrüfPLZ(plz)) - { - Console.WriteLine($"Ungültige Postleitzahl: {plz}"); - istGueltig = false; - } - - // Telefonnummern validieren - if (!string.IsNullOrEmpty(telefonnummern)) - { - string[] telefonNummern = telefonnummern.Split(';'); - foreach (var telefon in telefonNummern) + connection.Open(); + string query = "SELECT id FROM client WHERE clientno = @ClientNo"; + using (MySqlCommand command = new MySqlCommand(query, connection)) { - if (!PrüfTelefon(telefon)) - { - Console.WriteLine($"Ungültige Telefonnummer: {telefon}"); - istGueltig = false; - } + command.Parameters.AddWithValue("@ClientNo", clientno); + var result = command.ExecuteScalar(); + return result != null ? Convert.ToInt32(result) : 0; + } + } + } + + static void VerarbeiteDatensatz(List datensatz, string protokollPfad, MySqlConnection connection, int clientId) + { + string gesamteZeile = string.Join(";", datensatz); + string[] werte = gesamteZeile.Split(';'); + + string anrede = ""; + string vorname = ""; + string nachname = ""; + string geburtsdatum = ""; + string strasse = ""; + string plz = ""; + string stadt = ""; + string email = ""; + List telefonnummern = new List(); + + for (int i = 0; i < werte.Length; i++) + { + if (werte[i] == "Frau" || werte[i] == "Herr" || werte[i] == "Divers") + { + anrede = werte[i]; + vorname = werte[i + 1]; + nachname = werte[i + 2]; + geburtsdatum = werte[i + 3]; + i += 3; + } + else if (werte[i] == "Adresse") + { + strasse = werte[i + 1]; + plz = werte[i + 2]; + stadt = werte[i + 3]; + i += 3; + } + else if (werte[i] == "E-Mail") + { + email = werte[i + 1]; + i += 1; + } + else if (werte[i] == "Telefon") + { + telefonnummern.Add($"{werte[i + 1]} {werte[i + 2]}"); + i += 2; } } - return istGueltig; + bool gueltig = true; + + if (!PruefeGeburtstag(geburtsdatum)) + { + Console.WriteLine($"Ungültiges Geburtsdatum: {geburtsdatum}"); + gueltig = false; + } + + if (!string.IsNullOrEmpty(email) && !PruefeEmail(email)) + { + Console.WriteLine($"Ungültige E-Mail-Adresse: {email}"); + gueltig = false; + } + + if (!string.IsNullOrEmpty(plz) && !PruefePLZ(plz)) + { + Console.WriteLine($"Ungültige Postleitzahl: {plz}"); + gueltig = false; + } + + foreach (var telefon in telefonnummern) + { + if (!PruefeTelefon(telefon)) + { + Console.WriteLine($"Ungültige Telefonnummer: {telefon}"); + gueltig = false; + } + } + + if (gueltig) + { + int userId = GeneriereNaechsteId("user", connection); + EinfuegenInUserTabelle(userId, anrede, vorname, nachname, geburtsdatum, connection, clientId); + + EinfuegenInAddressTabelle(GeneriereNaechsteId("address", connection), userId, strasse, plz, stadt, connection); + EinfuegenInEmailTabelle(GeneriereNaechsteId("email", connection), userId, email, connection); + foreach (var telefon in telefonnummern) + { + string[] telefonTeile = telefon.Split(' '); + EinfuegenInPhoneTabelle(GeneriereNaechsteId("phone", connection), userId, telefonTeile[0], telefonTeile[1], connection); + } + } + else + { + ProtokolliereUngueltigeDaten(datensatz, protokollPfad); + } } - static bool PrüfGeburtstag(string geburtsdatum) + static int GeneriereNaechsteId(string tabelle, MySqlConnection connection) { - string pattern = @"^\d{4}\-\d{2}\-\d{2}$"; + string query = $"SELECT IFNULL(MAX(id), 0) + 1 FROM {tabelle}"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + return Convert.ToInt32(command.ExecuteScalar()); + } + } + + static void EinfuegenInUserTabelle(int userId, string anrede, string vorname, string nachname, string geburtsdatum, MySqlConnection connection, int clientId) + { + string query = "INSERT INTO user (id, clientId, genderId, firstname, lastname, birthdate, created) " + + "VALUES (@Id, @ClientId, @GenderId, @Vorname, @Nachname, @Geburtsdatum, @Created)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", userId); + command.Parameters.AddWithValue("@ClientId", clientId); + command.Parameters.AddWithValue("@GenderId", GetGenderId(anrede, connection)); + command.Parameters.AddWithValue("@Vorname", vorname); + command.Parameters.AddWithValue("@Nachname", nachname); + command.Parameters.AddWithValue("@Geburtsdatum", DateTime.Parse(geburtsdatum)); + command.Parameters.AddWithValue("@Created", DateTime.Now); + + command.ExecuteNonQuery(); + } + } + + static int GetGenderId(string anrede, MySqlConnection connection) + { + string query = "SELECT id FROM gender WHERE description = @Anrede"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Anrede", anrede); + return Convert.ToInt32(command.ExecuteScalar()); + } + } + + static void EinfuegenInAddressTabelle(int addressId, int userId, string strasse, string plz, string stadt, MySqlConnection connection) + { + string query = "INSERT INTO address (id, userId, street, postalcode, city) " + + "VALUES (@Id, @UserId, @Strasse, @PLZ, @Stadt)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", addressId); + command.Parameters.AddWithValue("@UserId", userId); + command.Parameters.AddWithValue("@Strasse", strasse); + command.Parameters.AddWithValue("@PLZ", plz); + command.Parameters.AddWithValue("@Stadt", stadt); + + command.ExecuteNonQuery(); + } + } + + static void EinfuegenInEmailTabelle(int emailId, int userId, string email, MySqlConnection connection) + { + string query = "INSERT INTO email (id, userId, email) VALUES (@Id, @UserId, @Email)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", emailId); + command.Parameters.AddWithValue("@UserId", userId); + command.Parameters.AddWithValue("@Email", email); + + command.ExecuteNonQuery(); + } + } + + static void EinfuegenInPhoneTabelle(int phoneId, int userId, string phoneprefix, string phonenumber, MySqlConnection connection) + { + string query = "INSERT INTO phone (id, userId, phoneprefix, phonenumber) VALUES (@Id, @UserId, @PhonePrefix, @PhoneNumber)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", phoneId); + command.Parameters.AddWithValue("@UserId", userId); + command.Parameters.AddWithValue("@PhonePrefix", phoneprefix); + command.Parameters.AddWithValue("@PhoneNumber", phonenumber); + + command.ExecuteNonQuery(); + } + } + + static bool PruefeGeburtstag(string geburtsdatum) + { + string pattern = @"^\d{2}\.\d{2}\.\d{4}$"; return Regex.IsMatch(geburtsdatum, pattern); } - static bool PrüfEmail(string email) + static bool PruefeEmail(string email) { - string pattern = @"^[a-z]+\.[a-z]+@[a-z]+\.[a-z]{2,}$"; + string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"; return Regex.IsMatch(email, pattern); } - static bool PrüfPLZ(string plz) + static bool PruefePLZ(string plz) { - string pattern = @"^[0-9]{5}$"; + string pattern = @"^\d{5}$"; return Regex.IsMatch(plz, pattern); } - static bool PrüfTelefon(string telefon) + static bool PruefeTelefon(string telefon) { - string pattern = @"^[0-9]{3,5}\s?[0-9]{4,10}$"; + string pattern = @"^\d{3,5}\s?\d{4,10}$"; return Regex.IsMatch(telefon, pattern); } - static void ProtokolliereUngueltigeDaten(string[] daten) + static void ProtokolliereUngueltigeDaten(List daten, string protokollPfad) { - string protokollPfad = "C:/Schule/PMC/ungueltige_Daten.csv"; using (StreamWriter sw = new StreamWriter(protokollPfad, true)) { - sw.WriteLine(string.Join(",", daten)); + foreach (var zeile in daten) + { + sw.WriteLine(zeile); + } } } } } + diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs index 1c627fa..9199f57 100644 --- a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs +++ b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("PMCProjekt")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3ecbf97c766628394acad938d340da68a9d05e5c")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2150bad16d353de9bebea8f2feae3039c472b9e6")] [assembly: System.Reflection.AssemblyProductAttribute("PMCProjekt")] [assembly: System.Reflection.AssemblyTitleAttribute("PMCProjekt")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache index 3dc8954..9300142 100644 --- a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache +++ b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache @@ -1 +1 @@ -d4ca53237659e1a7007941b655e24571191b87dfdcf8a3a5ea0ebb2f5de16263 +b181418c207b62c0f6b18dd50a2d5203ab8bd79309967fd8ba3cf377b6e89772 diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.assets.cache b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.assets.cache index faa95ca019cdabc10fc21977bb38ab28e2fc312b..65bdc95050ca0a27ae3abf76f7e9fb71e773e5ee 100644 GIT binary patch delta 64 zcmV-G0Kfm}lmY0J0WDBVM?nk#007-8W)Ly`S$11i?{eH4mxk4RfV_m=fmX~3n|G|& WQzqs$0004#AR8@{uqg|%Wdll0kr|Hw delta 64 zcmV-G0Kfm}lmY0J0WDBVM?nk#004@$(UserProfile)\.nuget\packages\ C:\Users\bib\.nuget\packages\ PackageReference - 6.9.2 + 6.10.2 diff --git a/PMCProjekt/PMCProjekt/obj/project.assets.json b/PMCProjekt/PMCProjekt/obj/project.assets.json index b6c1d37..bd580a5 100644 --- a/PMCProjekt/PMCProjekt/obj/project.assets.json +++ b/PMCProjekt/PMCProjekt/obj/project.assets.json @@ -1850,7 +1850,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.204/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.304/PortableRuntimeIdentifierGraph.json" } } } diff --git a/PMCProjekt/PMCProjekt/obj/project.nuget.cache b/PMCProjekt/PMCProjekt/obj/project.nuget.cache index 39b4eac..210fe4b 100644 --- a/PMCProjekt/PMCProjekt/obj/project.nuget.cache +++ b/PMCProjekt/PMCProjekt/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "Jmj3WRDtSrMYQNSWXK2x6TEKWOlCmkjM6nbeQ2iYrfCgkzMw4GiPixfUmBUGiPiTU/KE5IO8pzSrja1hWLPpDA==", + "dgSpecHash": "/54hNmRIYgQ=", "success": true, "projectFilePath": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\PMCProjekt.csproj", "expectedPackageFiles": [