Hallo,
ich habe folgende Frage:
in einer Klassenbibliothek, die ich gern in mehreren Projekten verwenden möchte, habe ich Newtonsoft.Json über den Package Manger eingebunden. Nun möchte ich dies nicht auch in jedem Projekt tun müssen, in dem ich die Klassenbiblithek verwende. Wenn jedoch die unten stehende Json-Funktion z.B. eine Exception wirft, bekomme ich im aufrufenden Code eine FileNotFoundException, weil ja die dll fehlt. Ich hatte versucht, das ganze, wie unten im catch-Block stehend, zu umgehen. Das klappt aber nicht (immer noch FileNotFoundException). Wie kann ich das lösen bzw. gibt es dafür einen "offiziellen" Weg (best practise, oder so)?
public T? Deserialize<T>(string text)
{
if (text is null)
{
throw new ArgumentNullException(nameof(text));
}
try
{
return JsonConvert.DeserializeObject<T>(text);
}
catch (JsonException exc)
{
string message = exc.Message;
throw new InvalidOperationException(message);
}
}
Danke und Grüße, Alex
Final no hay nada más
Die FileNotfound Exception wird durch das fehlen der DLL verursacht.
Hier versucht die Runtime die DLL zu laden, die ja nicht existiert und wirft dann die Exception.
Hier musst du die DLL schon mitliefern.
Du solltest in Betracht ziehen auf System.Text.Json zu wechseln, was ab .NET 5+ auch sinnvoller wäre da es direkt Teil von .NET ist.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo T-Virus,
danke für deine Antwort. Deshalb hatte ich versucht, eine "neue" InvalidOperationException zu werfen, statt der JsonException, für die man ja die externe Json-Bibliothek benötigt.. Trotzdem kommt die FileNotFoundException. Text.Json schau ich mir mal an.
Final no hay nada más
Damit der Code ausgeführt werden kann, braucht die Runtime die externe Assembly.
Da diese Assembly nicht gefunden wird, wird eben FileNotFoundException geworfen. Du kannst das Runtime Verhalten hier auch gar nicht ändern, weil Dein Code niemals durchlaufen wird, wenn Abhängigkeiten fehlen (zumindest bei einer direkt referenzierten Assembly).
Understanding How Assemblies Load in C# .NET
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code