Mögliche Visual Studio-Projekt mit Ausgabetyp von „none“ zu schaffen?
-
07-07-2019 - |
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!
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.dll
s 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:
-
Alle
.dll
s In denBundledDLLs
und setzen ihre kopieren Ausgabeverzeichnis Kopieren, falls neuere .Dies geschieht in der Projekt-Explorer und Eigenschaften Fenster.
-
Konfigurieren
BundledDLLs
dem AusgabeverzeichnisMain
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
-
Richten Sie
BundledDLLs
als Abhängigkeit vonMain
.nicht
BundledDLLs
als Projektverweis in demMain
, wie Sie in der Regel könnten; Verwenden Sie stattdessen die Projektabhängigkeiten Dialog. Dadurch wird das Build-Tool sagen, dass, wennMain
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ächstMain
aus der Dropdown-Liste; überprüfenBundledDLLs
dann in der Projektliste unten.BundledDLLs
wird jetzt als eine Abhängigkeit vonMain
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. -
Fügen Sie ein Postbuildereignis
BundledDLLs
, dass das überflüssigeBundledDLLs.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ürBundledDLLs.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“.