Aus irgendeinem Grund haben wir ein Skript, das Batch-Dateien für XCOPY unsere kompilierten Assemblys, Konfigurationsdateien und verschiedene andere Dateien zu einer Netzwerkfreigabe für unsere Betatester erstellt. Wir machen einen Installer, aber einige haben nicht die erforderlichen Berechtigungen für das Installationsprogramm ausführen, oder sie laufen über Citrix.Inhaltsdateien und primäre Ausgabe programmgesteuert abrufen
Wenn Sie über Ihren Schreibtisch bei den Erwähnungen von XCOPY und Citrix übergaben, verwenden Sie es als eine Entschuldigung, um früh nach Hause zu gehen. Bitte.
Der Code hat derzeit Hunderte von Zeilen wie:
CreateScripts(basePath, "Client", outputDir, FileType.EXE | FileType.DLL | FileType.XML | FileType.CONFIG);
Früher war es noch schlimmer, mit 20 int Parameter (eine pro Dateityp) darstellt, ob oder nicht diesen Dateityp in das Ausgabeverzeichnis kopiert werden.
Diese Hunderte von Zeilen erstellen Upload/Download Batch-Dateien mit Tausenden von XCOPY-Zeilen. In unseren Setup-Projekten können wir Dinge wie „Primäre Ausgabe von Client“ und „Content Dateien von Client“ verweisen. Ich würde gerne in der Lage sein, dass von einem nicht-Setup-Projekt programmatisch zu tun, aber ich bin ratlos.
Offensichtlich MS tut es, entweder mit einer API oder durch Parsen der .csproj-Dateien. Wie würde ich das machen? Ich bin nur nach einer Möglichkeit, eine Liste von Dateien für alle Setup-Kategorien zu erhalten, das heißt:
- Primary Output
- Lokalisierte Ressourcen
- Inhaltsdateien
- Dokumentationsdateien
BEARBEITEN: Ich habe ein Setup-Projekt wie Hath vorgeschlagen, und es ist auf halbem Weg zu dem, was ich suche. Das einzige Problem, dass die Beibehaltung von einer perfekten Lösung ist, dass mehrere Projekte hängen von den gleichen Baugruppen in einem eigenen Ordner zu sein, und das Setup wird die Datei nur einmal kopieren.
Beispiel:
Projekte Admin, Client und Server alle auf ExceptionHandler.dll verlassen, und Admin und Kunde sowohl auf Util.dll verlassen, während Server nicht der Fall ist. Dies ist, was ich suche:
- Admin
- Admin.exe
- Admin.exe.config
- ExceptionHandler.dll
- Util.dll
- Client
- Client.exe
- Client.exe.config
- ExceptionHandler.dll
- Util.dll
- Server
- Server.exe
- Server.exe.config
- ExceptionHandler.dll
Da die referenzierten Assemblys sind alle gleich, was ich bekommen, ist dies:
- Admin
- Admin.exe
- Admin.exe.config
- ExceptionHandler.dll
- Util.dll
- Kunde
- Client.exe
- Client.exe.config
- Server
- Server.exe
- Server.exe.config
Dies führt zu einer FileNotFoundException, wenn entweder Client oder Server nicht einer der beiden DLLs finden es erwartet.
Gibt es eine Setup-Eigenschaft I fehlen bin es immer die Ausgabe machen kopieren, auch wenn es an anderer Stelle des in einem anderen Projekt Ausgang dupliziert wird?
BEARBEITEN WIEDER: Alle referenzierten DLLs sind auf "Copy Local" gesetzt und wurden schon immer verwendet. Ich fand einen anständigen Artikel auf using NAnt and XSLT to grab the list of files, so dass eine mögliche Lösung auch sein mag, wie neouser99 vorgeschlagen.
AKZEPTIERTE LÖSUNG: Ich bin ziemlich genau dort, wo ich angefangen habe. Alle .EXE- und .DLL-Ausgaben werden im Setup-Projekt lose in ein "bin" -Verzeichnis abgelegt. Die anderen Ordner pro Anwendung enthalten Verknüpfungen zu der ausführbaren Datei in diesem Verzeichnis.
Der Unterschied besteht jetzt darin, dem Installer eine benutzerdefinierte Aktion hinzuzufügen, Reflektion zu verwenden, die Abhängigkeiten für jede ausführbare Ausgabe aufzuzählen und die EXE- und DLL-Dateien in die separaten Verzeichnisse zu kopieren. Wenig Schmerzen, wie ich war nur angenommen, es eine Möglichkeit, programmatisch zu erkennen, welche Dateien würden über einige Setup-Bibliothek aufgenommen werden.
Nochmals vielen Dank für die Hilfe.
Es funktioniert teilweise. Ich habe die Frage mit dem Problem aktualisiert, auf das ich gerade gestoßen bin. –