Frage

Ich bin mit Visual Studio 2008 und mag eine Art von Container-Projekt erstellen, die eine Reihe von DLL enthält, die mit einer Lösung installiert werden muss. Ich mag, dass sie in einem separaten Projekt sein, so dass sie leicht zu einer Lösung als Gruppe gebunden sein.

Ich habe einen leeren Projekt Anruf TEST, fügte meinen DLL, um es mit einer Build Action von „Content“, und setzen Sie sie auf „Immer kopieren“. Das alles funktioniert genau so, wie ich will. Das Problem ist, dass, wenn ich das Testprojekt Ausgangstyp auf „Console Application“ oder „Windows-Anwendung“ eingestellt ist, dass es nicht bauen, weil es kein Einstiegspunkt. Wenn ich den Ausgabetyp auf „Klassenbibliothek“ gesetzt, baut sie aber ich mit einer zusätzlichen TEST.DLL Datei am Ende, dass ich nicht wirklich will.

Gibt es trotzdem zu Art setzt den Ausgabetyp auf „none“? Ich möchte, dass die Build-Aktionen stattfinden (so get meine DLL kopiert), aber ich möchte nicht die Dummy-Klasse Montage erstellt. Irgendwelche Ideen?

Danke!

War es hilfreich?

Lösung

Annahmen für die folgenden Schritt-für-Schritt-Anleitung:

Nehmen wir an, dass Sie eine Lösung mit zwei Projekten haben:

  • Main. Ihr Haupt (Start-up) Projekt
  • BundledDLLs: a. Bibliotheksprojekt, das den .dlls enthält, die in dem Hauptprojektausgabeverzeichnis am Ende sollte

Schritt-für-Schritt-Anleitung:

Der einfachste Weg, Ihr Ziel in Visual Studio zu erreichen, ist wahrscheinlich die folgende:

  1. Alle .dlls In den BundledDLLs und setzen ihre kopieren Ausgabeverzeichnis Kopieren, falls neuere .

    Dies geschieht in der Projekt-Explorer und Eigenschaften Fenster.

  2. Konfigurieren BundledDLLs dem Ausgabeverzeichnis Main dem Ausgabeverzeichnis identisch.

    Dies kann in der getan werden Build Registerkarte BundledDLL des Projekteigenschaften Seite. Geben Sie so etwas wie die folgenden in der Ausgabepfad Textbox:

    ..\Main\bin\Debug
    
  3. Richten Sie BundledDLLs als Abhängigkeit von Main.

    nicht BundledDLLs als Projektverweis in dem Main, wie Sie in der Regel könnten; Verwenden Sie stattdessen die Projektabhängigkeiten Dialog. Dadurch wird das Build-Tool sagen, dass, wenn Main gebaut wird, BundledDLLs zuerst gebaut werden muss.

    Tun Sie dies, indem mit der rechten Maustaste auf das Main Projektknoten über das Kontextmenü zu öffnen; Wählen Sie Projektabhängigkeiten ... von dort aus. Im nun geöffneten Dialog wählen Sie zunächst Main aus der Dropdown-Liste; überprüfen BundledDLLs dann in der Projektliste unten. BundledDLLs wird jetzt als eine Abhängigkeit von Main registriert.

      

    P. S:. Ein Nachteil nicht in Main eine explizite Montage Referenz ist, dass einige Werkzeuge, die die Abhängigkeit nicht erkennen könnten. Zum Beispiel könnte Clickonce-Bereitstellung nicht richtig funktionieren.

  4. Fügen Sie ein Postbuildereignis BundledDLLs, dass das überflüssige BundledDLLs.dll löscht.

    Wie Sie sagten, Sie wollen nicht, und nicht brauchen, die Dummy-Ausgabe erzeugt, wenn BundledDLLs gebaut wird. So fügen Sie ein Post-Build-Ereignis, das einfach diese .dll löscht, sobald es erstellt wurde.

    Öffnen Sie die Build Ereignisse Tab in BundledDLLs des Projekteigenschaften Seite, und geben Sie so etwas wie die folgenden in dem Post-Build-Textfeld ein:

    DEL "$(TargetDir)\$(TargetName).*"
    

    (Falls Sie sich gewundert: Der Grund, warum Sie nicht dieses Projekt als Projektverweis hinzugefügt haben früher Main, weil, wenn Sie dies getan hatten, Main für BundledDLLs.dll suchen würde, die es nicht in der Lage sein würde, finden da Sie eigentlich nicht wollen, eine solche Datei erzeugt werden.)

      

    P. S:. Ein Nachteil der Zugabe eines solchen Post-Build-Schritt ist, dass es stören könnte mit inkrementellen aufbaut. Wenn Ihr Projekt hält danach von Grund auf neu kompiliert zu werden, dass Sie die Post-Build-Schritt und das Leben mit dem zusätzlichen BundledDLLs.dll besser dran zu entfernen in Ausgabeverzeichnis Ihrer Lösung ist.

Andere Tipps

Eine weitere Option ist ein Makefile-Projekt zu verwenden, die Sie nicht benötigen bauen / etwas verbinden.

In den Projekteigenschaften (Rechtsklick Eigenschaft in Lösung Explorer und klicken Sie auf „Eigenschaften“), unter „Konfigurationseigenschaften“ und dann unter „Allgemein“, wählen Sie „Makefile“ aus dem „Konfigurationstyp“ im Dropdown-Menü. Die Build-Ausgabe wird die Warnung schließen „Die Eigenschaft‚NMakeBuildCommandLine‘existiert nicht ... Skipping“, aber das Build erfolgreich sein wird, ohne den Aufbau jeder dll / exe / etc.

Während andere Antworten hier besser können Ihre spezifischen Bedürfnisse ansprechen, eine Make-Datei Angabe mehr direkt beantwortet die Frage Titel „Möglichen Visual Studio-Projekt mit Ausgabetyp none zu schaffen?“ Ich hoffe, das für die Menschen nützlich ist, die hier in diesem Sinne und Land etwas googeln.

Kredit geht für die gemeinsame Nutzung dieser Spitze im #winapi freenode IRC-Kanal Xeek.

Statt sie in einem Projekt setzen, können Sie die Dateien in einem Lösung Ordner . Eines Ihrer Projekte können eine Build-Aktion, die das Kopieren der Fall ist, aber da sie nicht in einem Projekt sein wird, wird sie nicht versuchen zu „bauen“.

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