2009-07-30 5 views
1

Ich habe ein Bibliotheksprojekt, das einige Inhaltsdateien (z. B. XML- und Schemadateien, Bilddateien usw.) alle mit Build-Aktion auf Inhalt (immer kopieren) festgelegt hat.Was kann ich bei Inhaltsdateien tun, wenn ich eine Assembly-DLL mit einem anderen Programmierer teile?

Dieses Bibliotheksprojekt lebt in einer Visual Studio-Lösung, die auch über eine Testanwendung (WPF) verfügt, die auf die Bibliothek verweist.

Beim Erstellen der Lösung werden alle Inhaltsdateien aus dem abhängigen Bibliotheksprojekt in den Ordner bin meiner Testanwendung kopiert. (Sie werden auch in den bin-Ordner des Bibliotheksprojekts kopiert.)

Heute habe ich die Assembly-DLL, die von meinem Bibliotheksprojekt generiert wurde, einem anderen Programmierer gegeben, damit er darauf verweist. Es kam mir jedoch nicht einmal in den Sinn, dass dies nicht genug war. Ich musste ihm auch die Inhaltsdateien geben. Also tat ich es, und er fügte sie seinem Projekt hinzu.

Diese Lösung funktioniert, aber ich fühle mich nicht wohl dabei. Ich mag es nicht, dass die Inhaltsdateien mit seinen Projektdateien vermischt sind. Dies macht es wahrscheinlicher, dass sie versehentlich geändert oder gelöscht werden könnten.

Also ich hoffe, ich kann einen Rat bekommen, wie Bibliotheken mit anderen Programmierern geteilt werden, wenn Inhaltsdateien beteiligt sind.

Hinweis: Es ist nicht, dass ich versuche, die Inhaltsdateien zu verstecken (es wirklich wichtig ist, dass Programmierer diese Bibliothek zu ihnen haben Referenzierung Zugang), aber ich mag sie von der Referenzierung Projekt getrennt bleiben und dennoch richtig kopiert werden in den bin-Ordner, wenn ihr Projekt kompiliert wird. Ich denke, was ich sage, ist, ich möchte, dass sie das Bibliotheksprojekt in ihrer Lösung haben, nur nicht die Code-Dateien und XAML-Dateien.

Danke.

EDIT:

Eine Idee, die ich einfällt, ist, dass ich Struktur einfach die Ordners kopieren konnte und Inhaltsdateien aus meinem Bibliothek-Projekt in ein neues Klassenbibliotheksprojekt. Dann könnte jeder, der auf mein Bibliotheksprojekt verweist, diese minimale Klassenbibliothek in seiner Lösung hinzufügen. Sie müssten immer noch als separaten Schritt auf die DLL verweisen, aber das ist definitiv besser als die aktuelle Lösung. Vielleicht könnte ich sogar ein Postbuildereignis schreiben, das automatisch alle Inhaltsdateien von meinem Bibliotheksprojekt in die minimale Klassenbibliothek kopiert. (Jetzt muss ich nur noch herausfinden, wie man ein Build-Event schreibt :)). Kommentare willkommen.

EDIT 2:

ich auf meinem ursprünglichen bearbeiten gebaut mit einer Lösung zu kommen ich denke, ich werde mit glücklich sein. Siehe meine Antwort unten.

Antwort

0

Ich entschied mich, die Inhaltsdateien aus dem Bibliotheksprojekt zu entfernen und sie in ein neues "content-only" -Bibliotheksprojekt einzufügen, das nur Inhalt enthält. Wenn jemand das Bibliotheksprojekt verwenden muss, teile ich einfach den dll- und den content-only-Bibliotheksprojektordner. Auf diese Weise bleibt die Beziehung zwischen Projekten und Inhaltsdateien im Lösungsordner identisch, und alles wird beim Kompilieren automatisch aktualisiert.

@
2

Machen Sie die Inhaltsdateien eingebettete Ressourcen. Sie können dann mit Assembly.GetManifestResourceStream() auf sie zugreifen. Es macht Ihre Assembly viel portabler - Sie verlassen sich nicht mehr zur Ausführungszeit auf Dateisystemstandorte.

+0

@ Jon, das würde definitiv das Portabilitätsproblem lösen, aber ich brauche die "Kunden" dieser Bibliothek, um in der Lage zu sein, die Inhaltsdateien zu sehen, weshalb ich sie an erster Stelle gemacht habe. – devuxer

+0

@DanThMan: Könnten Sie ein separates Tool (oder eine separate Methode) schreiben, um die Ressourcen für diejenigen zu extrahieren, die sie als separate Dateien benötigen, aber sie für diejenigen in der Assembly behalten, die das nicht tun? –

+0

@Jon, Hmm, meinst du, ein benutzerdefiniertes Installationsprogramm für mein Bibliotheksprojekt zu erstellen, das die DLL- und Inhaltsdateien direkt in den Ordner bin der referenzierenden Anwendung installiert? Ich bin mir sicher, dass so etwas möglich ist, aber es klingt nach einer Art Unterfangen. – devuxer

Verwandte Themen