Fehlermeldung „Die Datei oder Assembly oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.“ lösen

Letztens hatte ich folgende Fehlermeldung:

Die Datei oder Assembly „ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73“ oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Trotz Suchen mit CheckAsm und dem Aktivieren von Fusion-Logging konnte ich keine fehlende DLL finden.

Die Ursache war dann, dass ich die DLL aus dem Internet downgeloadet hatte und Windows diese irgendwie „schützt“ (schöner Euphemismus).

Als Lösung dann ganz einfach Rechtsklick auf die Datei und die Schaltfläche „Zulassen“ anklicken.

Die Datei oder Assembly oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

Danach lief alles wie gewünscht.

„Fahrzeugenergiebedarf ist hoch“

Falls Ihr ein Golf (GTI) 7 mit Start-Stopp-Automatik habt und diese den Dienst versagt und im Fahrzeugstatus-Menü einer der folgenden Meldungen steht:

„Fahrzeugenergiebedarf ist hoch“
„Motorlauf ist notwendig“

Dann ist das ein Euphemismus für:

„Die Batterie ist zu wenig geladen“.

Bei mir kommt die Meldung alle halbe Jahr und gleichzeitig ist im Display die Batterieanzeige auf 60%.

Die einzige Lösung ist wohl, die Batterie zu laden.

Fehlermeldung mit „DotNetOpenAuth.Core“ in ASP.NET MVC beseitigen

Eine neue Website mit ASP.NET MVC 4, frisch auf einen Server publiziert, lieferte die Fehlermeldung:

Die Datei oder Assembly „DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246“ oder eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040)

Im Englischen klingt das ungefähr so:

Could not load file or assembly ‚DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246‘ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Nach viel Suchen, fand ich schließlich die Lösung:

Da ich dieses „DotNetOpenAuth.Core“ via NuGet installiert hatte, wurde in meiner lokalen Web.config-Datei automatisch Einträge ergänzt. Diese Einträge haben im öffentlichen Web auf dem Webserver noch gefehlt.

Hier der komplette Ausschnitt:

<runtime>
 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
 <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
 <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
 <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
 <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="System.Spatial" publicKeyToken="31bf3856ad364e35" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
 </dependentAssembly>
 <dependentAssembly>
 <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-2.2.13.0" newVersion="2.2.13.0" />
 </dependentAssembly>
 </assemblyBinding>

Sobald ich das ergänzt hatte, war der Fehler weg.

Lautsprecher geben lauten Plopp beim Türe-Öffnen im VW Golf GTI 7

Das hier soll mal als Referenz/Dokumentation dienen für ein Phänomen, das bei meinem neuen Volkswagen VW Golf GTI 7 auftritt.

Phänomen

Beim Öffnen von Türen oder Kofferraum, um meinen abgestellten Golf GTI 7 zu “betreten”, gibt es nach 1-5 Sekunden einen sehr lauten Plopp/Knack-Geräusch. Höchstwahrscheinlich aus dem Lautsprecher. Manchmal gibt es auch 2-3 Plopps/Knacks in einem.

Häufigkeit

Tritt in 98% der Fälle auf. Wenn der Wagen nur ganz kurz abgestellt ist, ohne zu verschließen, tritt das Ploppen gefühlt seltener auf.

Versuche/Experimente

  • Öffnen nur der Fahrertür (Plopp kommt)
  • Öffnen nur der Beifahrertür (Plopp kommt)
  • Öffnen des Kofferraums (Plopp kommt)
  • Alles mit Handy in der Tasche (Plopp kommt)
  • Alles ohne Handy dabei (Plopp kommt)
  • Andere Personen, ganz ohne mich (Plopp kommt)

Ausstattung des Golf

Falls es relevant ist, hier grob die Ausstattung:

  • Golf GTI 7
  • 2-Türer
  • DSG
  • Bluetooth-Koppelung für iPhone
  • Freisprecheinrichtung
  • Verkehrszeichenerkennung
  • Spurhalteassistent
  • Tempomat
  • Abstandssensor
  • Einparkassistent

Vermutung

Ggf. initialisiert sich der Bus irgendwie und „testet“ dabei die Lautsprecher. Bei meinem PC habe ich mit externen Lautsprechern ebenfalls so ein Phänomen, dass beim Booten von Windows 8 die Lautsprecher mehrfach laut knacken.

Im Golf-Forum von Motor-Talk habe ich die Frage auch gestellt und inzwischen schon ein paar sehr interessante Antworten erhalten.

Hilfe!

Mein Autohaus spielt auf Zeit und rät mir: „Beobachten Sie das noch ein paar Wochen“ (Hallo? Ich „beobachte“ das schon seit 3 Wochen, das reicht mir -_-).

Falls Ihr das Phänomen kennt, ggf. sogar samt Lösung, gerne Kommentare hierher.

Wenn ich eine Lösung finde, dokumentiere ich sie ebenfalls hier im Artikel.

Update 26.07.2013

Gerade hat mein Autohändler zurück gerufen.

Heute morgen haben sie wohl ein Ticket bei VW aufgemacht und VW hat jetzt als Rückantwort gegeben, dass das anscheinend ein bekanntes Problem mit dem Navigationssystem ist (heißt wohl „Discovery Pro“).

So wie ich es verstanden habe, ist zurzeit noch kein Fix bekannt, es gilt wohl die Devise „erst mal abwarten“.

Sobald es dann einen Fix gibt, wird VW wohl meinem Autohändler Bescheid geben und ich poste hier dann gerne, wie die Lösung aussieht. In der Hoffnung, dass es eine Lösung gibt.

Update 31.10.2013

Nach ziemlich starkem Druck (leider) von mir beim Autohändler, habe ich jetzt tatsächlich ein komplett Plopp-freies Auto.

Laut Händler haben sie ein „Software-Update“ eingespielt, und wohl noch ein bisschen was konfiguriert/ausprobiert, um den Plopp in den Griff zu bekommen. Genaueres wollte er nicht rauslassen, nur dass sie das Update sogar teuer bei VW kaufen mussten.

Ich vermute, der Bus wird jetzt anders initialisiert und dadurch wird das Ploppen/Knacken vermieden.

Einmal hat es noch ganz ganz leise mal kurz geziept, seit dem habe ich nichts mehr gehört.

Fehlermeldung „CS0103: Der Name ‚ViewBag‘ ist im aktuellen Kontext nicht vorhanden“ bei ASP.NET MVC 4 lösen

Heute habe ich bei einem neu deployten Projekt mit ASP.NET 4.5 und MVC 4 folgende Fehlermeldung erhalten:

CS0103: Der Name ‚ViewBag‘ ist im aktuellen Kontext nicht vorhanden
CS0103: The name ‚ViewBag‘ does not exist in the current context

Eine ähnliche Meldung lautet:

CS0103: Der Name ‚model‘ ist im aktuellen Kontext nicht vorhanden
CS0103: The name ‚model‘ does not exist in the current context

Lokal lief alles, auf dem Produktivserver kam die Fehlermeldung. Ich habe lange gesucht, bis ich die funktionierende Lösung gefunden habe.

Lösung

Die Lösung war im Endeffekt, dass es zwei Web.Config-Dateien gibt:

Diese im Views-Ordner hat bei mir gefehlt. Sobald ich diese hinzugefügt und entsprechend gefüllt hatte, hat alles funktioniert.

Fehlermeldung „Ein Clientvorgang ist fehlgeschlagen“ beim Öffnen fremder Postfächer in Outlook 2010

Obwohl ich Administrator bin, bekomme ich beim Öffnen von eingebundenen Microsoft-Exchange-Postfächern anderer Benutzer eine Fehlermeldung:

Der Ordner kann nicht erweitert werden. Ein Clientvorgang ist fehlgeschlagen.

Fuck for Outlook/Exchange.

Die Lösung (zumindest bei mir) sah dann so aus:

  1. Auf Exchange-Server mit RDP anmelden.
  2. Die „Exchange Management Console“ starten.
  3. Den Baum aufklappen:
    • Microsoft Exchange
    • Microsoft Exchange lokal
    • Empfängerkonfiguration
    • Postfach
  4. In der Liste im Hauptfenster dann das Postfach selektieren.
  5. Im rechten Bereich „Aktionen“ (oder via Rechtsklick auf Element) die Aktion „Berechtigung ‚Vollzugriff‘ verwalten…“ auswählen.
  6. Im erscheinenden Assistent auf „Hinzufügen“ klicken.
  7. Den entsprechenden Benutzer suchen, auswählen und mit „OK“ bestätigen.
  8. Den Assistent mit der „Verwalten“-Schaltfläche“ durchlaufen lassen.
  9. Via „Fertig stellen“ den Assistent schließen.

Ich musste dann mein Outlook 2010 nochmals starten, danach konnte ich aufs Postfach zugreifen. Insgesamt eher eine Brute-Force-Methode, für mich war’s ausreichend.

Fixing „A dynamic link library (DLL) initialization routine failed.“ error on Windows 8

Just fixed an issue with our Zeta Producer 11 that occurs only on the brand new Windows 8. The German error message was:

Die Datei oder Assembly „ZetaHtmlTidy.dll“ oder eine Abhängigkeit davon wurde nicht gefunden. Eine DLL-Initialisierungsroutine ist fehlgeschlagen. (Ausnahme von HRESULT: 0x8007045A)

Translated to English it was:

System.IO.FileLoadException ‚A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A)‘

The DLL in concern was a mixed Managed/Unmanaged C++ assembly that wrapped the popular HTML Tidy C sources into a .NET-usable assembly.

So my first idea was that some CRT DLLs were missing:

  • msvcm90.dll
  • msvcp90.dll
  • msvcr90.dll
  • Microsoft.VC90.CRT.manifest

But all were present, even the well-known Dependency Walker/Viewer did not help any further.

Since version 10 of our application worked and version 11 did not work and brought the above error, I was clueless. The main difference was:

  • Version 10 was installed into „C:\Program Files (x86)\Zeta Producer 10“.
  • Version 11 was installed into „C:\Users\YourName\AppData\Local\Zeta Producer 11″ (to bypass administrative setup permissions).

When I moved Version 10 also below the „C:\Users\…“ folder, the error also occurred!

So the cause was not a missing assembly but some kind of (weird?) policy thing.

Some further digging/googling finally lead to the solution on Stack Overflow. The solution was to add some more App.config settings.

My previous, non-working App.config file contained:

<startup>
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
</startup>

My new, working App.config file was:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
</startup>

So it seems that setting „useLegacyV2RuntimeActivationPolicy“ to „true“ finally switched something to allow for loading mixed-mode DLLs from local folders. Doh!

Automatically restart Microsoft IIS if website is not available

To automatically restart the Microsoft Internet Information Services (IIS) web server if a website is not available, you need:

  • Administrative access to your web server.
  • The WGET command line utility.
  • A text editor like Notepad to create a batch script file.
  • the Task Scheduler to make the batch script run every n Minutes (e.g. every 10 Minutes)

The batch file I created for one of my own web servers looks like:

@REM ==============================================
@REM Automatically restart IIS if website is not available.
@REM (Checks for a sub string in a page of the website).
@REM
@REM Created 2011-10-28, Uwe Keim uk@zeta.li
@REM ==============================================

@REM Remove any existing previous downloads.
del d:\scripts\index.html

@REM Change drive and folder so that WGET stored in a
@REM well-defined location.
D:
cd d:\scripts

@REM Download file.
D:\scripts\wget.exe ^
    --timeout=30 ^
    --tries=1 ^
    http://www.my-server.com/index.html 

@REM Search for the term in the previously downloaded file.
find /I /C "Some String On Website" d:\scripts\index.html

@REM Restart IIS if string is not found.
IF ERRORLEVEL 1 iisreset /RESTART /TIMEOUT:120 /REBOOTONERROR

Please note the following:

  • WGET downloads the URL to a file with the same file name („index.html“ in my above example)
  • The scheduled task must be created to run with an administrative user.
  • The scheduled task must have the „Run with highest privileges“ checkbox set, because IISRESET only runs with administrative privileges.

Fehlermeldung „Column does not belong to table“

Bei mir trat/tritt von Zeit-zu-Zeit die Fehlermeldung „Column does not belong to table“ auf, jeweils mit einer angegebenen Spalte, z.B.

Column ‚TestPlanID‘ does not belong to table

Oder

Column ‚ParentID‘ does not belong to table

Bzw. auf Deutsch

Spalte ‚RunnableTestCaseID‘ gehört nicht zu Tabelle

Da das nur teilweise auftritt und nur bei manchen Kunden und nur wenn viele SQL-Anfragen hintereinander ausgeführt werden, hat mir dieser Blogpost hier geholfen.

Der Autor dort geht davon aus, dass er ggf. Connections nicht rechtzeitig schließt. Als er das beseitigt hatte und der Fehler immer noch auftrat, hat er folgende Schlussfolgerungen/Aktionen daraus gezogen:

  1. Use „iisreset“ command every time you stop the IIS server.
  2. Walk through your code and make sure you are closing connection properly.
  3. Use „Connection Lifetime“ property of connection pool if required.
  4. Try to use ClearAllPools/ClearPool in appropriate application event.

Bei mir hat das teilweise geholfen, ggf. ist das ja doch irgend ein .NET-Bug, der irgendwann mal mit den neuesten Treibern für Microsoft SQL Server beseitigt sind.

Ergänzung 1:

Gerade heute bekomme ich wieder eine ähnliche Meldung bei einem Oracle-Projekt:

Column „FACH“ does not belong to table

Ich deute das so, dass das auch beim Oracle-Treiber so ein Issue ist. Es handelt sich hier um eine ASP.NET-4.0-Webanwendung. Andere sprechen auch darüber, dass es bei Ihnen auch bei Oracle auftritt. Vermutlich also ein Issue in ADO.NET. Einer schreibt:

We had this exact problem and we solved it.

Using static (C#) or shared (VB) .Net data classes on a multi-processor server will cause this error. The data class and its objects, e.g. DataTable, get resused across threads for some reason. So when when two requests come in at the same time, the second request overwrote the DataTable object variable with its own results, causing the first request to fail when it went looking for its tables, columns, etc.

This problem only occurred on multi-processor servers and went away when we declared our data classes without static or shared.

Wobei ich ihm das nicht ganz glaube. der Oracle provider hat auch eine Funktion ClearAllPools/ClearPool, diese werde ich jetzt mal aufrufen.

Ergänzung 2:

Den Fehler konnte ich jetzt beim Oracle erfolgreich beseitigen, indem ich meinen (eigenen) Cache deaktiviert habe. Eventuell hängt es mit dem Background-Cache-Aufräumen zusammen oder mit zu vielen Elementen im Cache.

Ergänzung 3 (2013-04-22):

Hatte jetzt erneut so einen Fall, den ich durch Cache-Deaktivieren lösen konnte.

Eventuell ist es ja sinnvoll, wenn eine DataTable aus dem Cache geholt wird, diese zu clonen, so dass nur die gleiche, nicht jedoch dieselbe DataTable genutzt wird und es so nicht zu Concurrency-Issues kommen kann. (Habe das jetzt probiert, hat in meinen Tests keine Änderung gebracht, leider).

Fehlermeldung „Fehler bei sqlmaint.exe“ bei einem geplanten Auftrag in SQL Server

Fehlerbeschreibung

Es kommt eine Meldung „Fehler bei sqlmaint.exe. [SQLSTATE 42000] (Fehler 22029). Fehler bei Schritt“ und der Auftrag ist mit einem roten X als fehlgeschlagen markiert.

Ursache

Der Aufruf der Anwendung „sqlmaint.exe“ schlug fehl.

Lösung

Zunächst den Auftrag anschauen und das T-SQL-Skripts des Auftrags analysieren. Dies kann z.B. wie folgt aussehen:

EXECUTE
    master.dbo.xp_sqlmaint
    N"-PlanID 99F45116-2803-46BB-A95D-058C5D8E72EC
    -WriteHistory
    -VrfyBackup
    -BkUpOnlyIfClean
    -CkDBRepair
    -BkUpMedia DISK
    -BkUpDB "c:mybackfolder"
    -DelBkUps 4DAYS
    -BkExt "BAK""

Der Aufruf „xp_sqlmaint“ ist eine Erweiterte Gespeicherte Prozedur die schlicht ein Wrapper für die Anwendung „sqlmaint.exe“ ist.

Wenn nun „sqlmaint.exe“ direkt von der Befehlszeile aus aufgerufen wird mit den Parametern die auch an „xp_sqlmaint“ übergeben wird, liefert „sqlmaint.exe“ eine sehr detaillierte Fehlermeldung warum der Aufruf tatsächlich fehlschlug.

Mit dieser Fehlermeldung dann die tatsächliche Ursache beseitigen.

Noch einfacher ist es, die Ausgabe von „sqlmaint.exe“ wenn es durch „xp_sqlmaint“ aufgerufen wird sich direkt ausgeben zu lassen. Dazu:

  1. Eigenschaften des T-SQL-Skripts des Auftrags anzeigen.
  2. Registerkarte „Erweitert“
  3. Im Feld Ausgabedatei einen Datei angeben, möglichst als UNC-Pfad, z. B. „\\myserver\myfolder\sqlmaint-output.txt“. Diese Ausgabe dann analysieren.

Tipps

  • „sqlmaint.exe“ ist normalerweise im Ordner „C:\Programme\Microsoft SQL Server\MSSQL\Binn“ gespeichert. (bzw. „C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\Binn“ für SQL Server 2005)
  • Ein Fehler war „Error 21268: [SQL-DMO]Row or column specified is outside the range of the specified query result set„. Ein Autor schlug vor, die Begrenzung der Zeilenanzahl für Protokolle aufzuheben, ein anderer „dbcc checkdb“ auf der Datenbank auszuführen (im SQL Query Analyzer). Es wurden dann auch tatsächlich Fehler in der „msdb“ Datenbank gefunden. Um diese zu beseitigen:
    1. Den SQL-Server Dienst anhalten
    2. Den SQL-Server manuell starten „C:\Programme\Microsoft SQL Server\MSSQL\Binn>sqlservr.exe -m“
    3. „ISQL.exe“ starten
      „C:\Programme\Microsoft SQL Server\MSSQL\Binn>isql -U sa“ und den Reparieren-Befehl ausführen, z.B.:
      1> alter database msdb set SINGLE_USER
      2> DBCC CHECKDB („msdb“, REPAIR_ALLOW_DATA_LOSS)
      3> alter database msdb set MULTI_USER
      4> GO

    Für den SQL Server 2005 lauten die entsprechenden Befehle/Ordner:

    1. Den SQL-Server Dienst anhalten
    2. Den SQL-Server manuell starten „C:\Programme\Microsoft SQL Server\MSSQL.1\MSSQL\Binn>sqlservr.exe -m
    3. „OSQL.exe“ starten
      C:\Programme\Microsoft SQL Server\90\Tools\Binn>osql -U sa“ und den Reparieren-Befehl ausführen, z.B.:
      1> alter database msdb set SINGLE_USER
      2> DBCC CHECKDB („msdb“, REPAIR_ALLOW_DATA_LOSS)
      3> alter database msdb set MULTI_USER
      4> GO

(Stichwörter für Suchmaschinen: )