Klasse in *.exe ausliefern

tippiFan

Banned
Registriert
Sep. 2020
Beiträge
4
Ich hab ein Programm geschrieben, welches mit NET Framework 4.5 aufgrund geschrieben wurde.
Nun soll das Programm auch auf Windows 7 Rechner ausgeführt werden, allerdings darf keine Version 4.5 installiert werden.

Existiert eine Möglichkeit dass ich eine bestimme Klasse (bei mir CallerMemberNameAttribute) gleich in der *.exe mitliefern kann?

PS: Meine Sprache C#
 
Das wird nicht funktionieren. Du müsstest dir mit den auf der Zielplattform vorhandenen Mitteln die Funktionalität nachbauen, welche "CallerMemberNameAttribute" besitzt.
Ob sich der Aufwand lohnt?
 
Richtiges Vorgehen: Herausfinden, welches .NET Framework im Einsatz ist (Default Windows 7: 3.5) und dein Programm darauf umstellen.
Alternativ richtiges Vorgehen: .NET Framework 4.5 voraussetzen.

Das was du vor hast, funktioniert nicht vernünftig. Du kannst sie nachprogrammieren, dann aber unter einem neuen Namen, da die Klasse sonst in .NET 4.5 und neuer nicht mehr funktioniert (Doppeldefinition). Wenn du sie aber nachprogrammierst, kannst du direkt auf .NET 3.5 ausweichen ...


Frage am Rande, ist aber OOT: Warum muss eine neu geschrieben Software ein Betriebssystem unterstützen, welches von seinem Hersteller selbst nicht mehr unterstützt wird?
 
  • Gefällt mir
Reaktionen: GroMag
Ich würde mir mal auf Github oder von der Quelle mal den Code anschauen von dem Teil. Wenn nicht einfach mit Resharper oder so decompilen. Wenn du das hast, einfach die Klasse in das Projekt reinduplizieren und entsprechend verwenden.

Wäre jetzt so der pragmatischste Ansatz der mir einfällt. Nicht besonders "clean" aber sollte gehen.
Ergänzung ()

SoDaTierchen schrieb:
Das was du vor hast, funktioniert nicht vernünftig. Du kannst sie nachprogrammieren, dann aber unter einem neuen Namen, da die Klasse sonst in .NET 4.5 und neuer nicht mehr funktioniert (Doppeldefinition). Wenn du sie aber nachprogrammierst, kannst du direkt auf .NET 3.5 ausweichen ...

Warum sollte das nicht gehen? Die namespaces sind doch verschieden insofern kein Ding. Du kannst auch runtime spezifische Implementierungen machen. Aber klar, schön ist das nicht.
 
@Zonk91: Wenn die Namespaces verschieden sind, dann ist doch dem Ratschlag "unter neuem Namen" folge geleistet worden. In c# sind Klassen grundsätzlich auch über den Namespace definiert, eine Extra Erwähnung ist nicht notwendig.

Mit deinem Ansatz würdest du übrigens auch den originalen Namespace verwenden und trotzdem die gewünschte Funktion nicht bekommen, da die Klasse CallerMemberNameAttribute ohne Implementierung auf Github hinterlegt ist. Decompilen von .Net-Code ist wegen Microsofts EULA strafbar.
 
SoDaTierchen schrieb:
Mit deinem Ansatz würdest du übrigens auch den originalen Namespace verwenden und trotzdem die gewünschte Funktion nicht bekommen, da die Klasse CallerMemberNameAttribute ohne Implementierung auf Github hinterlegt ist.
Dass die Klasse keine Implementierung hat und vom Compiler interpretiert wird, war mich nicht bewusst. Dann haut das natürlich nicht hin.

SoDaTierchen schrieb:
Decompilen von .Net-Code ist wegen Microsofts EULA strafbar.
Der Source Code liegt ja sowieso auf github. Und nur um sich anzusehen wie bestimmte Dinge unter der Haube funktionieren, wird nichts passieren. Wo kein Kläger, da kein Richter.
 
Alternativ gleich mit .Net Core (3.1 derzeit) entwickeln und als self-contained Executable publishen.
Da kommt es halt darauf an, wie viel .Net Framework spezifischen Code du hast bzw wie schnell du die zu .Net Core passenden Namespaces als Ersatz findest, das kann aus eigener Erfahrung mitunter sehr mühsam sein.
Wäre aber zumindest dann aktueller Code ohne irgendwelches Reverse Engineering und Co.

Downgrade auf .Net Framework 3.5 wäre sicherlich das schnellste, wenn es nichts in der 4.5er gibt was du unbedingt benötigst.

Edit: Wenn du nur die eine Klasse mit ausliefern müsstest wäre es ja kein großes Programm und vermutlich schnell auf .Net Core geupdated, allerdings ist dann der Overhead (Anteil Mehrcode durch die mitgelieferte Runtime) umso größer..
 
  • Gefällt mir
Reaktionen: Dalek
Zurück
Oben