Hallo,
ich habe versucht aus einer bestehenden App ein Basisformular herauszuziehen, damit ich das in zukünftigen Projekten verwenden kann. Die Durchführung habe ich gemäß Exemplarische Vorgehensweise: Demonstrieren der visuellen Vererbung - Windows Forms .NET Framework versucht.
Das Bauen der DLL hat jetzt soweit geklappt - oder auch nicht. Beim Versuch die als geerbtes Formular in ein anderes Projekt hinzuzufügen kommt die Meldung > Fehlermeldung:
Die Assembly ...dll kann nicht geladen werden. Stellen Sie sicher, dass die Datei eine gültige .Net Framework-Assembly ist
Welche Einstellung ist denn da falsch?
Gruß
Udo
Hallo,
du hast also das Projekt mit dem Basisformular als Verweis (reference) zu dem Hauptprojekt hinzugefügt und dann bei einer Form die Basisklasse entsprechend geändert? Und beim Ausführen kommt dann die Fehlermeldung?
Ist die DLL denn beim Bauen in das Ausgabeverzeichnis ("bin/debug" bzw. "bin/release") kopiert worden? Ansonsten gibt es beim Verweis dafür eine Einstellung ("Copy local").
Hallo Th69,
Äh, nein.
Die Fehlermeldung kommt dann, wenn ich versuche die DLL mit der Basisklasse zu dem anderen Projekt im VS über "Hinzufügen -> neues Element -> Windows Forms -> Geerbtes Formular" hinzufügen will. Dabei kann man auch die DLL direkt über einen Datei-öffnen-Dialog im BIN/debug-Verzeichnis auswählen. Klickt man die an und dann OK, dann kommt die Fehlermeldung. Nicht erst beim Ausführen, soweit kommt man garnicht, da es schon nicht funktioniert die DLL zum Projekt hinzuzufügen.
Gruß
Udo
Edit: Ich probiere mal die DLL in das andere Projekt zu kopieren und dort hinzuzufügen.
Edit2: Nein, funktioniert dann auch nicht.
Das klingt von der Fehlermeldung her, als ob du eine Unmanaged DLL z. B. in C++ vorliegen hast.
Eine normal in C# oder C++/CLI Assembly (DLL) sollte sich Problemlos einbinden lassen.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Geschrieben ist die DLL ausschließlich in C#. Gäbe es eine Einstellung, mit der sich die DLL derart verhunzten ließe?
Huh, sehe grade das scheint ein Bug in VS zu sein. Hab einfach mal versucht ein geerbtes Formular zu erstellen. Und siehe da. Gleicher Fehler (hier: VS Professional 2017).
Ich empfehle dir ohnehin: Verweise auf die Bibliothek mit dem BaseForm, erstelle ein neues Formular und ändere den Basistyp von Form auf dein BaseForm.
Damit solltest du allen ärger aus dem Weg gehen.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Also den Link konnte ich hinzufügen, die Klassen der DLL sind jetzt im Hauptprojekt auch bekannt. Allerdings bekomme ich jetzt fast überall Fehlermeldungen wie :
Fehler CS1705 Assembly "xxxdll" mit Identität "...dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" verwendet "System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mit einer höheren Version als die referenzierte Assembly "System.Runtime" mit Identität "System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Wo stelle ich denn die Runtime-Version ein?
Hauptprogramm ist derzeit Framework 4.8 (hatte es auch mit 4.7 am Anfang) und DLL ist .NET Core 3.1
Gibt's da noch eine andere Einstellung oder fehlt mir da gerade etwas?
Du kannst keine Core-DLL in eine Framework-DLL einbinden, musst dich schon für eins von beiden entscheiden
Ich habe keine Möglichkeit etwas anderes auszuwählen.
Bei der DLL gibt es nur Core-Auswahlen, im Hauptprogramm nur Framework-Auswahlen. Sollte das an anderer Stelle entschieden werden?