Frage

Ich plane, eine Open-Source auf die Freigabe (MIT) NET-Bibliothek, sondern auch DLLs einschließlich es für die Menschen leicht zu machen, damit sie müssen alles nicht selbst kompilieren.

Meine Bibliothek ist sehr simpel in den Typen Referenzen es, die einzige wirkliche Abhängigkeit scheint .NET 3.0 oder höher zu sein (da es zu Func<T> und dergleichen bezeichnet).

Ich möchte meine Bibliothek durch mehrere Ziele verwendbar sein, einschließlich .NET 4.0-Server, .NET 3.5 Server, Windows Phone 7 Silverlight, normal Silverlight, XNA (Telefon), XNA (Windows), und XNA (XBox 360).

ich sicherstellen, dass nicht alle Typen zu verwenden, die auf den Plattformen nicht verfügbar sind, ich bin Targeting, z.B. HashSet<T> ist nicht auf Windows Phone 7, so dass ich es nicht verwenden.

Notwendigkeit Will ich verschiedene Projekte und somit mehrere DLLs für jedes dieser Ziele oder gibt es eine Möglichkeit, um eine gemeinsame DLL zu erzeugen, für sie alle zu benutzen?

War es hilfreich?

Lösung

Es wurde auf PDC ein Gespräch in diesem Jahr über diese Art von Sachen zu tun:

Dies ist das Video und das sind die Folien .

Andere Tipps

separate Projektdateien mit gemeinsamen, gemeinsamen Quelldateien sind der Weg zu gehen. Stellen Sie sicher, dass die Projekte festgelegt werden, um zu bauen, um verschiedene Ausgabeordner (z nicht \bin\Debug, aber \CF\bin\debug) Belästigungen zu verhindern, wenn die Bibliothek von mehreren Zielen raubend (wie ein Desktop-und Geräteprojekt).

Der OpenNETCF.IoC Rahmen ist ein Beispiel dafür - den Desktop unterstützt, CF, Windows Phone und Monotouch alle mit den gleichen Quelldateien, sondern separaten Projektdateien pro Plattform. Der Versuch, auf eine einzige binäre Baugruppe zu kompilieren, das verwendbar ist, auf alle von ihnen zu chaotisch waren und schwer zu pflegen.

Der Hauptschmerzpunkt ist hier alle Projektdateien synchron zu halten, wenn Sie hinzufügen / ändern Dateien und sicherstellen, dass alle von ihnen immer kompilieren. Ein Build-Server kann das tun, wenn Sie Zugriff auf Automatisierung (die Codeplex leider aussetzen nicht).

Ich mache etwas ähnliches mit einer Bibliothek, die Ziele .NET und Silverlight. Ich habe einen einzigen Satz von Quelldateien und eine separaten Projektdateien, die auf die gleichen freigegebenen Dateien.

Manchmal benutze ich die bedingte Kompilierung Funktionen umfasst nur für .NET und Silverlight nicht, oder nutzen Sie Funktionen in .NET zur Verfügung zu tragen, dass führen zu einer schöneren Implementierung und eine Sturz zurück Implementierung für Silverlight, wo es Lücken hat.

Der gleiche Ansatz könnte für die anderen Plattformen verwendet werden Sie erwähnen -. Einen Satz von Quelldateien, sondern eine separate Projektdatei pro Plattform Ziel

Wenn Sie ein Build-Tool wie MSBuild oder NAnt verwenden, können Sie dann den Build-Produkte alle DLLs für alle Zielplattformen, wenn Sie das Skript ausführen.

Sehen Sie sich die Tragbare Bibliothek Werkzeuge (Zuletzt aktualisiert: 2011.06.17) Erweiterung von BLC-Team (Microsoft) und diese Einführung MSDN-Artikel (Letzte Aktualisierung: August 2011).

würde ich eine Bibliothek für jede der Plattform vor. Lassen Sie mich erklären.

Lassen Sie uns sagen, dass die volle .NET Framework eine Reihe von Funktionen beinhaltet, Methoden, die nicht Teil des .NET Compact Framework wie die sind Sie mit Windows CE und Smartphones finden. Also, um vollständig zu Vorteil der vollen Last der Möglichkeiten jeder Plattform zu nehmen, würde ich eine gemeinsame Bibliothek viele Schnittstellen nutzen, dann implementieren Sie diese Schnittstellen innerhalb einer .NET Framework platform specific Klassenbibliothek, die Ihnen erlauben, in vollem Umfang nutzen Sie über das, was angeboten wird, auf einer bestimmten Plattform.

Auf der anderen Seite, wenn gemeinsame Wiederverwendung von Code, und aus Gründen der Wartbarkeit, Sie könnten es vorziehen, mit einer einzigen „do-sie-all“ Bibliothek zu gehen. Unter solchen Voraussetzungen, müssen Sie in vollem Umfang von jeder der Unterschiede bewusst sein, zwischen den vielen Plattformen, die Sie unterstützen möchten.

Das ist natürlich eine wichtige Analyse und Architektur Frage, wie von beiden leiden die Mängel von einer Plattform über die andere.

Hier ist, wie ich vor einer solchen Situation vorgehen würde:

  1. Ich würde die Unterschiede zwischen der plattformspezifischen .NET Framework untersuchen;
  2. würde ich beiseite alle setzen (bei Bedarf) die gemeinsame Objekte, die Sie denken, Sie könnten brauchen;
  3. Ich würde die Unterschiede hervorheben, dh Objekte können Sie unter einer Plattform verwenden, aber nicht die andere;

Dies ist eine organische Analyse müssen Sie durchführen, um zu sehen, was als nächstes nach oben kommt.

Das heißt, für eine eine Art Wasserfall Ansatz.


Wie bei einem Scrum-Ansatz, wenn ich so sagen darf, da dies Empirismus schon sagt, würde ich eine einzige gemeinsame Bibliothek sagen versuchen, für sie alle, und sehen, was Sie tun können. Wenn Sie über einige Dinge kommen, können Sie absolut nicht tun, dann könnte es relevant sein, nur ein andere Klasse Bibliothek zu erstellen, die auf Ihrer „do-sie-all“ Bibliothek abhängen würden, so dass Sie für jede Plattform einen gemeinsamen Block, dann einig andere spezifischen Bibliotheken für das, was Sie in den gemeinsamen nicht tun können. Tun Sie dies, und sieht, was Vorteile, die Sie von ihm bekommen, und einen Weg aus der Misere finden, wenn die Zeit kommt, um genauer zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top