.NET dll - wohin damit? - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: DLL & externer Code (/Forum-DLL-externer-Code) +---- Thema: .NET dll - wohin damit? (/Thread-NET-dll-wohin-damit) |
.NET dll - wohin damit? - gfzk - 27.02.2013 16:18 Hallo Forengemeinde, habe einen Messverstäkerer zu dem eine .NET DLL mitgeliefert wird. Der Installer spielt mir eine proprietäre Software auf die Platte zum konfigurieren und auslesen sowie LabView Treiber und noch ein paar Sachen mehr. Nun habe ich mehrere Verzeichnisse, in der diese DLL, in verschiedenen Versionen, existiert. Das hat auch schon zu Konflikten geführt. Welche Möglichkeiten habe ich, um diesen Versionswirrwar zu vermeiden? Folgendes hab ich schon ausprobiert: 1) Die DLL dem LabView Projekt hinzugefügt. Wenn ich aber mein VI startet, sucht es trotzdem kurz nach der DLL, obwohl sie im selben Verzeichnis wie das VI liegt. Ich bekomme zudem ständig Meldungen, dass die DLL unter einem anderen Pfad gefunden wurde, als wie erwartet, wenn ich die Beispiel VIs des Herstellers verwende. Jedesmal sind Änderungen zu speichern. 2) Alle reduntanten DLLs gelöscht, so dass auf dem Rechner nur noch eine DLL mit der Version vorliegt, die ich haben möchte. Dabei wird funktioniert aber die proprietäre Software nicht mehr, die ich gerne weiterhin zur Kontrolle einsetzten möchte. Habe versucht die DLL mit Adminrechten per Regsvr32 zu registrieren. Trotzdem startet das Programm nicht, weil es die DLL vermisst, auch noch nach einem Neustart. Wie verwende ich nun eine solche DLL richtig? Ich hätte sie gern zentral an einer Stelle, entweder bei meinem VI oder im Windows Verzeichnis, so dass alle Programme darauf zugreifen. LG Georg RE: .NET dll - wohin damit? - rolfk - 02.03.2013 23:10 .Net assemblies haben spezielle Anforderungen wo sie liegen müssen. Standard kann .Net nur Assemblies laden die entweder im gleichen Verzeichnis wie das Executable des aktuellen Prozesses abegelegt sind oder aber im Global Assembly Cache (GAC). LabVIEW fügt da noch das Verzeichnis hinzu, in dem die Projektdatei liegt (wenn man ein Projekt benützt). Um eine Assembly im GAC ablegen zu können muss sie sogenannt strongly named sein, was besagt dass sie eine vollständige Versionsnummer haben muss und vom Herausgeber signiert sein muss. Das heisst grundsätzlich dass man eine strongly named Assembly sowohl im GAC, im Verzeichnis wo LabVIEW.exe liegt als auch im Verzeichnis wo die LabVIEW Projektdatei liegt ablegen kann. Für ein LabVIEW Executable sollte man die Assembly im gleichen Verzeichnis ablegen lassen wie das Executable ausser die Assembly wird im GAC installiert was man dann auch auf allen anderen Computer wo die Applikation laufen soll so machen sollte. RE: .NET dll - wohin damit? - Lucki - 03.03.2013 15:00 Alle Achtung, für mich kommen hier nie gehörte Begriffe vor, und leider habe ich die höheren Weihen der Software-Wissenschaft nie an mir erfahren. Also wäre ich nach der Brecheisen-Methode vorgegangen: Die allein für LV bestimmte DLL umbenennen, und die Treiber-VIs, in denen darauf zugegriffen wird, entsprechend editieren. Oder hätte die Sache, abgesehen von ihrer Uneleganz, einen Haken? RE: .NET dll - wohin damit? - rolfk - 04.03.2013 07:52 Umbenennen der DLL ist für .Net Assemblies nicht genügend. Der DLL Name braucht nichts mit dem Assemblynamen zu tun zu haben, wie eine Applikation ihn benützt um die Assembly zu laden. Der steht in der Assembly selber und darum verwendet .Net wohl auch nur diese eingeschränkte Anzahl Directories die nach allfälligen Assemblies durchsucht werden. Der GAC baut automatisch ein Verzeichnis auf das einfach indiziert werden kann, und das Executable Directory zu durchsuchen ist ein verantwortbarer Aufwand da eine Applikation wohl kaum tausende unnötige Assemblies in ihrem Verzeichnis haben wird. Der Vorteil ist das das ganze Getue mit regserv32 komplett entfällt da nichts mehr in einer sich immer mehr ausweitenden Registry abgespeichert werden muss. RE: .NET dll - wohin damit? - gfzk - 04.03.2013 14:44 Danke für deine Erklärung Rolf! In den Explorer einfach das GAC Verzeichnis öffnen %SystemRoot%\assembly und per Drag & Drop die DLL rüberkopieren, fertig. Dazu muss man allerdings Administratorrechte besitzen. Die DLL liegt jetzt zentral verfügbar auf dem Rechner, keine doppelte Versionen und sowohl das LabView VI als auch die mitgelieferte Software können auf die DLL zugreifen - super. Gruß, Georg |