“Es wurde versucht, eine Datei mit einem falschen Format zu laden”

Wenn Ihr in einem .NET-Programm diese Fehlermeldung bekommt:

Es wurde versucht, eine Datei mit einem falschen Format zu laden.

Auf englisch:

BadImageFormatException – Could not load file or assembly … An attempt was made to load a program with an incorrect format

Dann liegt das ziemlich sicher daran, dass Ihr ein 64-Bit-Anwendung habt und darin versucht eine 32-Bit-Assembly (DLL) zu laden.

Die Lösung ist dann oft, dass Ihr Eure Anwendung explizit als 32-Bit kompiliert.

Ankommende Suchanfragen:

  • c# badimageformatexception Es wurde versucht eine Datei mit einem falschen Format zu laden
  • https://yandex ru/clck/jsredir?from=yandex ru;search;web;;&text=&etext=1829 Fph4mat-_s4Ky2cVo4dCdBb2GZhE5DhjxGDX_g2yw-wV4fL1H7h7O3uTB7U_8i4Q ed60547ded225efbc1f9d99d1f810b5527bec92e&uuid=&state=_BLhILn4SxNIvvL0W45KSic66uCIg23qh8iRG98qeIXme

InvalidOperationException – Das Objekt wird bereits an anderer Stelle verwendet

Zur Fehlermeldung

InvalidOperationException – Das Objekt wird bereits an anderer Stelle verwendet

im Umgang mit Bitmap-Objekten in GDI+ habe ich in meinem neuen, kleinen Entwickler-Forum ein Posting geschrieben.

Ankommende Suchanfragen:

  • c# bitmap wird bereits verwendet

Memory-Leaks in ADO.NET mit NumberOfReclaimedConnections protokollieren

Eine Bibliothek von mir macht irgendwie Connections falsch zu.

Selbst mit ANTS Memory Profiler bin ich nicht so richtig weiter gekommen, um zu sehen, ob meine Annahme mit den nicht geschlossenen Connections überhaupt zutrifft.

Dann bin ich auf den Leistungsindikator (englisch “Performance Counters”) gestossen, der mir hilft: NumberOfReclaimedConnections. MSDN schreibt:

The number of connections that have been reclaimed through garbage collection where Close or Dispose was not called by the application. Not explicitly closing or disposing connections hurts performance.

In Deutsch:

Anzahl der Verbindungen, die durch die Garbage Collection (automatische Speicherbereinigung) wieder verfügbar gemacht wurden, bei denen die Anwendung weder Close noch Dispose aufgerufen hat. Nicht mehr benötigte Verbindungen, die weiterbestehen, weil sie nicht explizit geschlossen oder gelöscht wurden, beeinträchtigen die Arbeitsgeschwindigkeit.

Den wollte ich also analysieren. Ich bin gescheitert, dies via Leitungsüberwachung-MMC-Tool zu machen und fand auch keine konkreten Code-Beispiele um in der Anwendung selbst den Counter auszulesen.

Also habe ich selbst Code geschrieben, der auf meinem deutschen Windows auch funktioniert:

Damit konnte ich dann verifizieren, dass über die Zeit hinweg der Counter stets gewachsen ist und nie gesunken.

In einer anderen Vergleichs-App war der Wert stets 0, dort habe ich die Connections also korrekt geschlossen bzw. via Dispose-Aufrufe (oder implizit via using) freigegeben.

error MSB6006: “sgen.exe” exited with code 1

Wenn bei mir die folgende Fehlermeldung beim Kompilieren einer WinForms-Anwendung mit DevExpress-Steuerelementen auftrat:

error MSB6006: “sgen.exe” exited with code 1

Dann war die Ursache, dass ich nachgelagerte, eigene, Assemblies verwendet hatte, die auch DevExpress benutzen, jedoch nach einem DevExpress-Update noch nicht neu kompiliert wurden.

In anderen Worte, die nachgelagerten Assemblies haben eine ältere (u.U. nicht mehr vorhandene) DevExpress-Version verwendet als mein Hauptprogramm.

Die Lösung war dann schlicht, dass ich die nachgelagerten Assemblies neu kompiliert hatte, so dass diese nach dem DevExpress-Update auch an die neuesten DevExpress-Versionen gebunden waren.

Ankommende Suchanfragen:

  • https://yandex ru/clck/jsredir?from=yandex ru;search;web;;&text=&etext=1827 UpUnFDVEKOsSmjVPEptp3pquhyx9vI2d657GsMDeNBvxGceegzUV5eSt1eNWT4Gp 5bda890322da35641ab06ee030045b24a00ede2a&uuid=&state=_BLhILn4SxNIvvL0W45KSic66uCIg23qh8iRG98qeIXme
  • sgen exe Code 1

Ausnahme DeletedRowInaccessibleException beim Zugriff auf DataRow-Spalte

In einem kleinen, unverfänglichen Codestück habe ich so etwas wie das hier:

In manchen Fällen hat die zweite Zeile dann eine Fehlermeldung DeletedRowInaccessibleException ausgelöst:

Auf gelöschte Zeileninformationen kann nicht über die Zeile zugegriffen werden.

Nach etwas Recherche habe ich dann dieses Posting gefunden und damit (in meinem Fall) auch die Lösung:

D.h. ich habe auf die Original-Zeile zugegriffen, nicht auf eine potentiell schon gelöschte. Das klappt logisch nicht in jedem Fall, bei mir war’s zum Glück ausreichend.

 

Bubble Mouse Move events from child controls up the hierarchy in Windows Forms

Windows Forms (or “WinForms” for short) does not know the concept of event bubbling (also called “event propagation” sometimes). To solve this in terms of command routing, I’ve written some small classes earlier.

To bubble up events from child controls to parent controls (or the form itself), the idea is to hook into the child control creation and hook up for those specific events and manually forward them.

Based on this idea and with the help of a forum answer on MSDN, I’ve written a small class that you can attach to a control and get all child control MouseMove events. The class looks like:

I’ve also saved it as a PasteBin.

The class can be adjusted to match other events than the MouseMove event, if required.

Ankommende Suchanfragen:

  • https://blog magerquark de/bubble-mouse-move-events-from-child-controls-up-the-hierarchy-in-windows-forms/

CryptographicException bei Verwendung von Oracle.ManagedDataAccess lösen

Gestern hatte ein Kollege beim Aufsetzen einer Website ASP.NET MVC 4 auf einem IIS unter Windows Server 2008 R2 eine Fehlermeldung:

Zunächst war es eine Herausforderung, statt den “normalen” Oracle.DataAccess-Klassen die Oracle.ManagedDataAccess-Klassen zum Laufen zu bringen. Hier haben uns zwei Artikel geholfen:

Wir haben dann zum Lösen des eigentlichen Fehlers lange rumgesucht, viel ausprobiert und schließlich beim Weblog-Artikel “SOLVED: Windows Identity Foundation – “The system cannot find the file specified”” fündig geworden.

Die Lösung bestand dann schlicht darin, im Anwendungspool (App Pool) für die Anwendung die Option “Benutzerprofil laden” auf “True” zu stellen:

IIS App Pool - Benutzerprofil laden

Danach lief alles wie gewünscht.

Shopware-4-REST-API von .NET 4 aus ansprechen

Zurzeit arbeite ich an einem Projekt bei dem aus Microsoft Navision (“Dynamics Nav” oder wie das jetzt heißt) heraus Daten nach Shopware geschrieben werden sollen.

Dazu scheint mit die REST-API von Shopware gut geeignet zu sein. Aus diesem Grund habe ich ein Beispielprojekt geschrieben. Das ganze ist eine .NET-4-Konsolenanwendung mit einer einzigen Datei.

Den Quelltext findet Ihr nachfolgend (alternativ auch bei Pastebin):

In dem Projekt verwende ich auch zum ersten Mal NuGet, dem wirkliche eleganten Paket-Manager für Visual Studio. Damit lade ich Json.NET und RestSharp als Referenz in das Projekt.

Ankommende Suchanfragen:

  • shopware api
  • shopware rest api c#