Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test



  • Hallo zusammen.

    Kurze Beschreibung des Aufbaus meiner Solution.

    mehrere statische Libs
    2 dll's die die Libs (gemeinsam) verwenden
    2 exe'n - Testprogramme der jeweiligen dll's

    In den dlls habe ich Referencen auf die benötigten Libs gesetzt.
    Und in den exe'n eine Referenz auf die jeweilige DLL

    in jeder Lib und in den dlls sind Dateien (.po und .mo Dateien) für die Sprachumschaltung hinterlegt.

    Diese Dateien werden im OutDir benötigt.

    Definiere ich nun in den Eigenschaften der der Sprachdateien: (in lib's und dll's)
    Configuration Properties -> General -> Item Type: Copy File

    Werden die Dateien zunächst mal in das OutDir des jeweiligen Projektverzeichnises kopiert.

    Die Sprachdateien der dll's werden nun zusätlich ins OutDir der Exe kopiert.
    Aber leider nicht die der libs.

    Vermutung:
    Sprachfiles der DLLs werden ins OutDir der exe kopiert weil DLLs dort ebenfalls benötigt werden
    Sprachfiles der Libs werden nicht kopiert weil die Libs selber statisch gelinkt werden und nicht im OutDir der exe benötigt werden.

    Wie löse ich das nun? Ich möchte ungern in der Lib angeben an welche Stelle ich die Sprachfiles überall hin kopieren muss.



  • Du brauchst die LIBS doch nicht zur Laufzeit. Die sind doch nur für den Build nötig.

    Also für einen Deploy genügen EXE und DLLs.

    Ich definiere für alles ausführbaren Dateien in solch einem Fall ein Output Directory.
    Durch die entsprechende Abhändigkeiten der Projekte zieht sich der Linker schon die passende Lib.



  • Hallo Martin

    @Martin-Richter sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    Durch die entsprechende Abhändigkeiten der Projekte zieht sich der Linker schon die passende Lib.

    Richtig. Um die Libs selber geht es mir ja nicht. Sondern um die Sprachfiles. .po bzw die übersetzen .mo Files.
    Die muss ich ja mit ausliefern weil die erst zur Laufzeit geladen werden.



  • Du könntest mittels des "Post Build" Events die Dateien kopieren: Visual Studio ProTip: Copying Binaries on Pre and Post-Build Macros.



  • Hi th69

    @Th69 sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    u könntest mittels des "Post Build" Events die Dateien kopieren: Visual Studio ProTip: Copying Binaries on Pre and Post-Build Macros.

    Ja dazu hatte ich ja schon geschrieben:

    Ich möchte ungern in der Lib angeben an welche Stelle ich die Sprachfiles überall hin kopieren muss.

    Erstelle ich mir eine weitere Exe oder DLL und verwende die entsprechende DLL muss ich dann immer noch bei der Lib mit angeben wohin diese überall kopiert werden muss. In c# gibt es dafür die Satteliten Assemblies.



  • Wiso im projekt der lib es angeben. Mach doch die kopiererei im Projekt, welches die lib verwendet. Denn das projekt weis doch ganz genau wohin die einzelnen komponenten kopiert werden müssen



  • Ja das wäre auch ein Ansatz. Was mir daran nicht gefällt ist dass nun die Exe die Abhängigkeiten der DLL kennen muss.

    Folgender Fall:

    Wir haben mehrere Entwickler an einer Solution

    Aktueller Stand:
    Exe_1 mit Reference DLL_1. DLL_1 mit Reference auf Lib_1.

    Entwickler A entwickelt Exe_1 mit Reference auf DLL_1.

    Entwickler B erweitert DLL_1 und benötigt nun neben Lib_1 auch noch Lib_2. Kompiliert seine DLL und stellt DLL bereit.

    Woher weiß nun Entwickler A welche Sprachfiles von welcher Lib er benötigt. Er kennnt ja nur die Abhängigkeit zur DLL.



  • Lib wird gar nicht mehr referenziert, ich glaube da ist dein denkfehler.
    Wenn eine EXE/DLL projekt eine lib (.lib unter windows) referenziert so wird die lib beim linken bestandteil der EXE/DLL.
    Daher sollte eher die ganzen sprachfiles wohl der DLL beiligen, welche die funktionen der lib intern verwenden



  • Wenn po und mo separate Build Prozesse haben, dann erzeuge doch ein Custom-Project... Dort führst Du die Operation aus die notwendig ist um aus der Quelle das Ziel zu erzeugen...

    Ich habe auch so etwas. Da wird halt irgendein Befehlszeilen Tool aufgerufen und eine bestimmte Ausgabe erzeugt....



  • @firefly sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    Lib wird gar nicht mehr referenziert, ich glaube da ist dein denkfehler.
    Wenn eine EXE/DLL projekt eine lib (.lib unter windows) referenziert so wird die lib beim linken bestandteil der EXE/DLL
    Ja klar mit reference meine ich die Reference im Visual Studio. Hier defiere ich in meiner DLL eine reference auf die Lib.
    Bei der Ausführung muss die Lib natürlich nicht mehr referenziert werden da sie Bestandteil ist.

    Die Sprachfiles gehören aber zur Lib. Die Lib kann ja in mehreren Dlls verwendet werden. Da will ich ja nicht die Sprachfiles in jede DLL ablegen.

    @Martin-Richter sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    Wenn po und mo separate Build Prozesse haben, dann erzeuge doch ein Custom-Project... Dort führst Du die Operation aus die notwendig ist um aus der Quelle das Ziel zu erzeugen...

    po und mo brauchen keine seperaten Build Prozesse. Ich will nichts erzeugen. Nur die Dateien kopieren.

    Ist den meine Anforderung so unklar definiert?

    Lib hat Sprachfiles. -> Lib kennt aber Verwender nicht. Kann also die Dateien nicht irgendwo hin kopieren.
    Exe -> kennt DLL. Exe kennt aber nicht die libs die DLL wiederum verwendet.

    Möglichkeit:

    DLL kennt Lib und Exe kennt DLL.
    DLL kopiert Sprachfiles von Lib zu sich ins OutDir. Und Exe kopiert alle Sprachfiles von DLLs OutDir zu sich.



  • Dann verwende einen Post-Build Event und kopiere was nötig ist.



  • @Martin-Richter sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    Dann verwende einen Post-Build Event und kopiere was nötig ist.

    Wie ich kopiere ist glaube ich nicht das Problem. Es geht doch darum in welchem Projekt ich die Kopieraktion vornehme.



  • @booster sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    Es geht doch darum in welchem Projekt ich die Kopieraktion vornehme.

    Du sagtest:

    @booster sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    DLL kopiert Sprachfiles von Lib zu sich ins OutDir. Und Exe kopiert alle Sprachfiles von DLLs OutDir zu sich.

    was ist jetzt daran ungut?



  • @Swordfish sagte in Visual Studio 2017 c++ Solution Dateien kopieren für deploy und test:

    was ist jetzt daran ungut?
    Gut. Danke.

    Diese Variante ist mir in der Zwischenzeit eingefallen. Darum habe ich dies dann als "Möglichkeit" aufgeführt.
    Ich wußte jetzt nicht auf was sich Martin Richters Antwort:

    Dann verwende einen Post-Build Event und kopiere was nötig ist.

    Ich dachte er wollte mir wiederholt erklären wie man eine Kopieraktion in Visual Studio durchführt.

    Wenn du nun meine "Möglichkeit" also gut bezeichnen willst. Dann nehme ich das mal als Antwort.
    Und sehe dies aber auch als einzige Möglichkeit an mein Problem sauber zu lösen.



  • Ich verwende Post-Build Event in den Teilprojekten, die primär diese Zusatzdateien benötigen...
    Wenn also die DLL die Sprachdateien braucht, dann kopiert dieser Buildprozess die benötigen Dateien mit in dem Post-Build Event.


Anmelden zum Antworten