Frage

Ich baue ein Werkzeug in verwaltetem Code (meist C ++ / CLI) in zwei Versionen, eine ‚normale Benutzer‘ -Version und eine ‚Pro‘ -Version.

Die Tatsache, dass der Kern-Code zwischen den beiden Versionen identisch ist hat mir eine wenig Mühe verursacht, wie ich das resultierende Werkzeug als eine einzige Baugruppe (DLL) verpacken will, und ich will nicht die CPP-Dateien müssen schließen für den gemeinsamen Code in den Projekten der beiden Versionen der Werkzeuge. Ich würde eher ein Projekt für den gemeinsamen Code haben und ein Projekt für jede Version des Werkzeugs und haben jede Version des Projekts Tools hängen von der gemeinsamen Code und verknüpfen Sie es in nach Wunsch.

In nicht verwalteten C ++ Ich würde dies tun, indem Sie den gemeinsamen Code in einer statischen Bibliothek platzieren und verbinden beiden Versionen des Werkzeugs zu. Ich scheine nicht in der Lage zu sein, dies zu erhalten, in C ++ / CLI zu arbeiten. Es scheint, dass ich den gemeinsamen Code in eine DLL Baugruppe zu bauen gezwungen und das führt zu einer DLL als Ich mag würde.

So in der Zusammenfassung, ich kann nicht arbeiten, wie der gemeinsamen Code in einem Projekt zu erstellen und verknüpft es mit jedem der Endprodukt Projekte zwei einzelne DLL-Baugruppen zu produzieren, die sowohl den gemeinsamen Code enthalten.

mache ich wohl etwas falsch, aber ich versuchte, herauszufinden, wie dies mit netmodules zu tun, und was auch immer, und ich konnte einfach nicht daran zu arbeiten. Am Ende war der einzige Weg, ich habe es funktioniert, den Linker zu sagen, die Build-Produkte der gemeinsamen Code-Anordnung, anstatt die Ergebnisse zu verknüpfen, die funktioniert, aber ist ein bisschen wie ein Hack IMHO.

Wie auch immer, hat jemand irgendwelche Vorschläge, wie ich soll dieses Problem werden lösen?

Editiert: Ich glaube, ich die Tatsache erwähnt haben sollte, dass die erzeugten Baugruppen sind nicht 100% Code verwaltet werden, sie eine Mischung aus verwalteten und nicht verwalteten Code enthalten, wie es ist, wahrscheinlich, durchaus üblich, mit Baugruppen hergestellt mit C ++ / CLI ...

War es hilfreich?

Lösung

Wenn Sie verärgert über alle DLLs sind, laden Sie ILMerge . Ich benutze dies für meine Kunden zusammen mehr DLL in einen einfach zu bedienende .EXE zu bündeln.

Andere Tipps

Wie gesagt ILMerge ein Weg ist, persönlich, wenn Ihr einige exe mit viel DLL Bündeln ich bevorzugen Netz .

könnten Sie verwenden Module . Sie können sie in eine Baugruppe verbinden die Baugruppe Linker mit, al.exe.

Wenn ich das richtig zu verstehen, haben Sie eine Lösung, die zwei Projekte enthält. Ein Projekt für den „normalen“ Benutzer und ein Projekt für die „pro“ Benutzer. Visual Studio ermöglicht es Ihnen, einen „Link“ auf eine andere Datei Quelle von einem anderen Projekt hinzuzufügen. Wenn Ihr „Pro“ Version der eigentliche Kern-Code-Datei hat, und in der „normalen“ Version hinzufügen Sie bestehende -> finden Sie die Datei im „Pro“ Projekt, und klicken Sie auf den Pfeil nach unten durch die Schaltfläche Hinzufügen und wählen Sie „Als Verknüpfung “. Jetzt haben Sie einzelne Datei, die buchstäblich das gleiche zwischen zwei Projekten ist.

Das ist der Nachteil des .Net Kompilierungsvorgang, können Sie nicht Dinge wie statische Bibliotheken und die Header-Dateien, die sie zusammenhalten, alles in einer großen DLL-Datei gehalten wird und der einzige Weg, um Informationen zu teilen, ist entweder zu bauen eine gemeinsame DLL und es von anderen Baugruppen Referenz oder den Code in jedem dll (möglicherweise durch Kopieren / Verknüpfung CS-Dateien zwischen Projekten) zu duplizieren.

Beachten Sie, dass die zweite Art und Weise verschiedene Arten erklären wird, auch wenn sie den gleichen Namen haben. Dies wird beißen Sie auf dem Esel mit Sachen wie Remoting (oder alles, was auf spezifische gemeinsamen Schnittstellen zwischen Prozessen erfordert Gießen).

Remotesoft Salamander werden Sie anschließen. Es ist im Grunde ein nativer Compiler und Linker.

Bei der Verwendung von Mono (oder Cygwin ist eine Option) mkbundle kann auch sein eine gültige Wahl.

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