Baue das gleiche Projekt wie die Konsole und die DLL

8

Ich habe ein C # -Projekt in Visual Studio, das Console Application als Ausgabetyp hat.

Aber ich brauche auch ein Class Library dieses Projekts für eine andere Lösung.

Im Moment muss ich den Ausgabetyp jedes Mal wechseln, aber ich frage mich, ob es möglich ist, exe und dll gleichzeitig build-event zu generieren?

Gibt es post-build-event dafür?

    
Smartis 17.08.2016, 07:06
quelle

6 Antworten

9

Nach meinem Wissen gibt es keine Möglichkeit, den Ausgabetyp nach dem Übersetzen zu ändern. Davon abgesehen wäre es möglich, zwei Projekte wie Konsole und Bibliothek in Ihrer Lösung zu haben, die aber dieselben Quellcodedateien verwenden haben unterschiedliche Ausgabetypen. Auf diese Weise hätten Sie unterschiedliche Ausgaben ohne Doppelcode.

    
Codor 17.08.2016, 07:09
quelle
4

Es ist im Allgemeinen möglich, auf eine .net-EXE-Assembly zu verweisen, wie es eine Klassenbibliothek wäre.

Sie können also einfach eine exe-Datei erstellen und auf die exe (klingt seltsam, aber funktioniert) in Ihrem anderen Projekt verweisen.

Dies ist der Dialog zum Suchen nach Referenzen. Wie Sie sehen, können Sie exe-Dateien auswählen.

Aber wie kommentiert, hängt es wirklich davon ab, was Ihr Anwendungsfall ist. Ich empfehle nicht, eine exe mit einem Einstiegspunkt an Ihren Kunden zu versenden, in der Hoffnung, dass der Kunde die exe nicht entdeckt. Aber was Sie tun können, ist, Ihren Einstiegspunkt zu kompilieren.

Zum Beispiel

%Vor%

Wenn es einen relevanten Grund gibt, eine ausgelieferte exe und eine ausgelieferte Klassenbibliothek zu haben, würde ich Ihre Lösung wie folgt umgestalten:

  • (A) vollständige Bewerbung (.sln)
    • (B) Konsolenanwendung (.csproj), die einen Verweis auf (C)
    • enthält
    • (C) Klassenbibliotheksprojekt (.csproj)

Damit ist anderen völlig klar, dass es eine Anwendung gibt, die die Bibliothek und die Bibliothek selbst verwendet.

    
Peter Ittner 17.08.2016 07:14
quelle
2

Konsolenanwendung ist der Typ Ihres Projekts. Sie können es nicht ändern.

Was Sie können und müssen, ist, tragen Sie Ihre Logik in ein Klassenbibliotheksprojekt und verwenden Sie Ihre Klassenbibliothek von jedem gewünschten Projekttyp.

    
Doruk 17.08.2016 07:10
quelle
2

Sie sollten Ihr Projekt zu einer DLL kompilieren und dann diese DLL in einer Konsolenanwendung verwenden.

Eine Möglichkeit, das zu erreichen, was Sie wollen, ist, das msbuild manuell auf Ihrem Post-Build-Event Ihres Projekts auszuführen.

Siehe: Wie erstelle ich eine Lösung programmatisch in C # ?

oder Erstellen von C # Solution im Release-Modus mit MsBuild .exe

    
DaKirsche 17.08.2016 07:20
quelle
0

Ich bin nicht wirklich sicher, warum Leute denken, dass es nicht möglich ist, aber es ist tatsächlich.

Der einfachste Weg wäre das Umbenennen von exe in dll Klingt dumm, ich weiß. Aber es funktioniert in vielen Fällen. Auch, wie "Peter I" sagte, kann eine .NET-Exe als Assembly in andere Projekte importiert werden. Also brauchst du vielleicht sowieso keine DLL.

Ein anderer Weg wäre die Verwendung von C# command line wie hier angegeben: / out (C # -Compiler-Optionen)

Sie können Befehlszeilenoptionen in Pre / Post-Build-Ereignissen verwenden Befehlsvorbereitungsdialogfeld für Vorbereitungs-Ereignis / Post-Build-Ereignis

    
uTeisT 17.08.2016 07:24
quelle
0

Die übliche Lösung hierfür ist die Verwendung einer Lösung mit zwei Projekten:

  • eine Klassenbibliothek mit dem gesamten Code (der in eine DLL integriert wird)
  • Eine Konsolenanwendung, die auf die Bibliothek verweist, deren Main nur einige Funktionen aufruft.

Weitere Informationen finden Sie auf der MSDN-Seite zu Lösungen .

Codor hat vorgeschlagen, die Dateien manuell zum Console-Projekt hinzuzufügen, aber ein Nachteil ist, dass die Build-Einstellungen nicht zwischen beiden Versionen geteilt werden, so dass es zu Inkonsistenzen kommen kann.

    
Kroltan 17.08.2016 15:03
quelle