Wie funktioniert ein .NET-Konsolenanwendung suchen referenzierten Assemblys?
Erstellte ich eine Konsole-Anwendung mit C#, das Verweise auf externe DLLs. Wenn ich es auf meine dev-Maschine, alles funktioniert einwandfrei. Auf der Produktions-Maschine, bekomme ich ein "Typ initiatization" Fehler. Auf der Suche in dieser, so scheint es, kann es, da die app nicht finden können, die referenzierten DLLs.
Auf meiner dev-box, die referenzierten DLLs im GAC, aber nicht auf die Produktion ein. Beim entfernen der DLLs aus dem GAC auf dem dev-box, tritt der gleiche Fehler auf (es sei denn, ich von einem lokalen Visual Studio bauen im debug-Modus).
Ich bin mehr vertraut mit web-site-setups, und wissen, dass die DLLs können in das bin-Verzeichnis oder im GAC, damit Sie gefunden werden können, indem die web-Anwendung. Aber ich bin mir nicht sicher, wie diese works für Konsolen-apps.
Ich bin zurückhaltend, legen Sie die DLL in den GAC auf die Produktion-box, so es nur für dieses eine kleine Anwendung. Gibt es andere Möglichkeiten für mich bereitstellen die Konsole app und haben Sie Ihren gewünschten Baugruppen?
Ist hier die Ausnahme, ich bin immer:
Fehler 1 Der Typ oder namespace-name 'den Eintrag' konnte nicht gefunden werden (sind Sie
fehlt eine using-Direktive oder ein Assemblyverweis?) C:\Documents und
Einstellungen\Hacker\Eigene Dateien\Visual Studio
2005\Projects\basic\basic\ - Programm.cs 10 8 basic
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste Antwort besteht darin, die DLL im gleichen Verzeichnis wie die Konsole-Anwendung, und es wird Sie finden.
Die längere Antwort ist ziemlich Komplex, da gibt es viele Faktoren, die beeinflussen, wie und wo die CLR sucht für die referenzierten Assemblys. Ich möchte Sie ermutigen, nehmen Sie einen Blick auf die folgenden Artikel aus dem MSDN die geht in großen detail, wie dies funktioniert.
GAC (Global Assembly Cache) registriert Ihren .dll ' s, so dass Sie nicht haben, um Sie in das Arbeitsverzeichnis Ihrer Anwendung. Alle .NET .dll (System.IO.dll, System.dll, etc) eingetragen sind, durch die GAC-was bedeutet, dass Sie nicht haben, um Sie in Ihr Anwendungsverzeichnis. Standardmäßig, wenn ein .dll nicht im GAC registrierte, dann sucht das Programm in einem eigenen Verzeichnis für die fehlenden .dll.
So, haben Sie drei Möglichkeiten:
Wenn Sie untersuchen, die Ausnahme, die Sie erhalten (und Sie müssen möglicherweise Tauchen Sie ein in die innere Ausnahme), Sie sollten sehen, ein Protokoll aller Standorte gesucht (die "fusion-Protokoll").
Ich würde empfehlen die Platzierung nur die abhängigen DLLs in das selbe Verzeichnis wie die console-app.
ex.ToString()
.Können Sie die Bereitstellung referenzierten dlls, wo Sie wollen.
Sie haben zum hinzufügen einer App.Konfiguration (hinzufügen/neues Element/Anwendung-Konfigurations-Datei) zu Ihrem Projekt und verwenden Sie die tag-probing (Konfiguration/runtime/assemblybinding/probing), um anzuzeigen, Sie einen Pfad für Ihre dlls.
Kopieren Sie die dll-oder dlls zu, dass Pfad und fügen Sie einen Verweis in deinem Projekt. In der Referenz-Eigenschaften setzen "lokale Kopie" auf "false".