2010-03-17 15 views
7

In Visual Studio 2008-Projekteigenschaften, Registerkarte Anwendung, kann ich den Ausgabetyp auf Windows-Anwendung, Konsolenanwendung oder Klassenbibliothek festlegen. Ich habe ein Projekt, das ich als Standalone-Tool (Konsolen-App) und für ein paar andere Werkzeuge, die ich arbeiten, als eine Klassenbibliothek erstellen möchte.Visual Studio-Projekt als ausführbare Datei und DLL erstellen

Mit der VS GUI kann ich nur das eine oder das andere auswählen, und es ist unbequem, zweimal das Projekt zu erstellen.

Wie kann ich es einrichten, um beide Ausgabetypen in einem einzigen Build-Auftrag zu erstellen? Schreib ich eine benutzerdefinierte MSBuild .targets-Datei oder was?

+0

Problem mit niedrigerer Priorität ist das Testen meines Werkzeugs; Wenn ich Visual Studio 'Create Unit Tests' verwende, um ein Testprojekt zu generieren, wird es * leicht * anders ausfallen, abhängig davon, ob das Hauptprojekt zu der Zeit auf Console App oder Class Lib eingestellt war, so dass das Hauptprojekt zurückgeschaltet wird und weiter wird abwechselnd der Build des Testprojekts unterbrochen. Lame. –

Antwort

18

Wenn ich mich nicht irre, können Sie die EXE als eine Klassenbibliothek verwenden.
Fügen Sie einfach einen Verweis darauf hinzu, in den anderen Projekten. Eine .NET EXE ist nur eine Assembly.

3

Erstellen Sie zwei separate Projekte, eines für Ihre Konsolenanwendung und eines für die Klassenbibliothek. Legen Sie für jeden den entsprechenden Ausgabetyp fest.

Vergessen Sie nicht, einen Verweis auf Ihre Klassenbibliothek zu Ihrem Konsolen-App-Projekt hinzuzufügen.

3

Sie können nicht zu einer EXE und zu einer DLL kompilieren. Ob eine Assembly als exe oder dll behandelt wird, wird durch ein einzelnes Bit-Flag im portablen ausführbaren Header der Datei bestimmt (siehe http://msdn.microsoft.com/en-us/magazine/cc301805.aspx für weitere Informationen). Dieses Flag kann nicht beide Werte haben.

Was Sie tun können, um Ihre Anforderung zu erfüllen, ist hinzufügen einen Verweis auf Ihre exe. Sie können dies in einigen Versionen von Visual Studio (2005 und später) nicht tun, da die Benutzeroberfläche Sie nicht lässt, aber Sie können die Projektdatei manuell bearbeiten, um die Referenz hinzuzufügen. In späteren Versionen von Visual Studio können Sie Referenzen zu EXE-Dateien über die Benutzeroberfläche hinzufügen.

+1

Dieses Bit-Flag bedeutet, dass eine einzelne * Datei * nicht gleichzeitig eine DLL und eine .exe sein kann, das ist offensichtlich. Aber ein .NET-Build kann nicht mehr als ein Build-Ziel haben? Das klingt fishy für mich, und wenn es wahr ist, wäre es eine große Einschränkung von MSBuild (vielleicht müsste ich also NAnt lernen ...) –

4

Sie können die DLL standardmäßig erstellen und ein anderes abhängiges Ziel erstellen, das einfach eine Wrapper-Konsolenanwendung ist, die die DLL verwendet.

3

Ich denke, die einfachste Lösung ist, als eine EXE zu erstellen und dann eine Post-Build-Aktion, die die EXE in eine DLL kopiert. Es gibt keinen wirklichen Unterschied zwischen den beiden in .Net.

Verwandte Themen