2011-01-05 23 views
2

Ich habe eine C# -Lösung, die ich Dependency-Injektion verwende, um Verweise zwischen DLLs aufzulösen. Ich habe ein exe-Projekt und einige andere DLL-Projekte, die nicht von der exe referenziert werden (Es verwendet die dlls durch den IoC-Container). Die Projekteinstellungen sind die Standardeinstellungen für Visual Studio, bei denen jede DLL in einem eigenen Ordner erstellt wird. Da die Exe nicht auf die DLLs verweist, werden sie niemals in das Ausgabeverzeichnis der EXE kopiert und vom IoC-Framework nicht gefunden.C# - Kopieren Sie DLLs in das Exe-Ausgabeverzeichnis, wenn Sie die Abhängigkeitsinjektion ohne Referenzen verwenden?

Wie gehen Sie damit um? Erstellst du sie alle im selben Verzeichnis? Verwenden Sie Post-Build-Kopierbefehle? Oder etwas anderes?

Antwort

4

Normalerweise handhabe ich dies mit einem Post-Build-Kopierbefehl (mit Build Events, so dass sie automatisch sind), die die Abhängigkeit Assemblies in einen freigegebenen Ordner versetzt.

Ich stelle dann sicher, dass dieser Ordner im Suchpfad meines IoC-Containers enthalten ist, damit sie gefunden werden.

Eine andere, ähnliche Option ist die Verwendung eines Build-Ereignisses in Ihrem Hauptanwendungsprojekt. Es kann dann die Abhängigkeiten in einen geeigneten Ordner kopieren. Dies hat den Vorteil, dass unterschiedliche Abhängigkeiten für verschiedene Anwendungen innerhalb derselben Lösung verwendet werden können, während sie weiterhin einfach zu warten sind.

+0

Wir haben tatsächlich ein Build-Ereignis jetzt im Hauptprojekt .. aber das Problem ist, wenn es nicht ändert, und Sie drücken F5, die Projekte, die sich geändert haben, werden gebaut, aber die Kopie geschieht nicht b/c der exe hat sich nicht geändert/gebaut. – NotDan

+0

@NotDan: Ja - das ist das Problem mit dem zweiten (Pull) Ansatz. Es gibt Optionen - hauptsächlich jedoch - Klicken Sie mit der rechten Maustaste auf die Lösung im Projektmappen-Explorer und wählen Sie "Projektabhängigkeiten" - stellen Sie sicher, dass Sie die Bibliotheken als Abhängigkeiten des Hauptprojekts hinzufügen. Es sollte sie zwingen, wieder aufzubauen ... –

+0

@ReedCopsey Es gibt kein "Haupt" -Projekt, wenn Sie mehrere Zusammensetzungswurzeln haben (z. B. wcf-Dienst, mvc/Web-App). Hinzufügen von 20 Referenzen zu jedem ist nicht sehr angenehm. Hast du eine bessere Lösung gefunden? Wie gehst du auch mit Pfaden von shared libs in der Produktion um? – drozzy

2

Verwenden Post build Kopierbefehle oder Änderung Ausgabeverzeichnis für alle Projekte zur gemeinsamen Verzeichnis

0

würde ich (und habe) verwenden Post Build Kopierbefehle. Erstellen Sie eine .BAT-Datei, die alle erforderlichen Kopien erstellt, an das Post-Build-Ereignis anfügt, und Sie sind fertig.

Verwandte Themen