In der Regel ist ein bin-Ordner als Hauptkomponente Ihres Bereitstellungspakets vorgesehen. In einer sehr einfachen Anwendungsbereitstellung ist alles, was ein Programm benötigt, im bin-Ordner vorhanden. Du könntest den Ordner irgendwo kopieren und es würde funktionieren. Das wird natürlich nicht passieren, wenn Ihre externe Baugruppe nicht da ist.
Sie finden, dass diese Baugruppen nicht an zwei Stellen auf Ihrem Entwicklungscomputer vorhanden sein sollten, und ich verstehe, warum Sie das nicht mögen. Der Grund dafür, dass CopyLocal standardmäßig auf "true" gesetzt ist, liegt darin, dass das oben beschriebene typische Szenario die Kosten für die doppelte Bereitstellung von Assemblys auf einem Entwicklungscomputer in Anspruch nimmt. In der Regel wird eine Anwendung auf vielen Clientcomputern häufiger als auf Entwicklungscomputern ausgeführt. Daher ist die Einfachheit eines einzelnen Bereitstellungsordners die Kosten für Festplattenspeicher auf Dev-Computern wert.
Sie haben selbst gesagt, dass Sie den lib-Ordner immer dann einfügen würden, wenn Sie Ihre exe jemand anderem geben würden? Wäre es nicht einfacher, dem bin-Ordner einfach alles zu geben?
In Ihrer ursprünglichen Frage, Sie erwähnen, dass der Compiler die Assemblys nicht finden kann, ich denke, das ist falsch und ich habe eine ähnliche Situation getestet. Der Compiler hat die Assembly gefunden, aber als ich versuchte, den Code auszuführen, sagte mir die Runtime, dass sie ihn nicht finden konnte. Der Compiler fügt keinen Code ein, damit die ausführbare Datei Assemblys in relativen Pfaden findet. Sie finden das detaillierte Antastverhalten von .Net-externen Baugruppen here. Ihre Exe kann nicht magisch vermuten, dass sich die Assembly in einem lib-Ordner im übergeordneten Ordner befindet.
Sie können all dies umgehen, indem Sie Ihre eigene Assembly-Auflösung codieren, aber wenn Sie nicht für ein paar Kilobyte Speicherplatz hungern, lassen Sie Visual Studio seine Sache machen.
Wenn Sie keine Assemblys mit GAC registrieren oder sich mit Dateipfaden herumärgern möchten, tun Sie sich einen Gefallen und lassen Sie sie im selben Ordner wie Ihre ausführbare Datei. – hoodaticus
Ich würde lieber mit Dateipfaden durcheinander;) Ich möchte verstehen, wie es funktioniert – fazega
Dann Derek hat Ihnen die Antwort gegeben, die Sie akzeptieren sollten. Sie können die Assembly-Auflösungsroutine überschreiben und die DLLs zur Laufzeit selbst mit C# -Code suchen und laden. – hoodaticus