Können Sie vb- und c # -Dateien im selben Projekt für eine Klassenbibliothek mischen? Gibt es eine Einstellung, die dies ermöglicht?
Ich habe es versucht und keiner der Intellisense funktioniert ganz richtig, obwohl der Hintergrund-Compiler gut genug damit umzugehen scheint (abgesehen von der Tatsache, dass ich damals zwei Klassen im selben Namespace mit demselben Namen hatte und mich nicht beschwerte).
Wir versuchen, von VB nach C # zu konvertieren, haben jedoch noch nicht den gesamten Code konvertiert. Ich habe neuen Code, den ich schreiben muss, wollte aber nicht wirklich ein neues Projekt nur dafür erstellen.
Antworten:
Nein, das kannst du nicht. Eine Assembly / ein Projekt (jedes Projekt wird normalerweise zu einer Assembly kompiliert) muss eine Sprache haben. Sie können jedoch mehrere Assemblys verwenden, und jede kann in einer anderen Sprache codiert werden, da alle in MSIL kompiliert sind.
Es wurde gut kompiliert und hat sich nicht beschwert, da ein VB.NET-Projekt nur die .vb-Dateien kompiliert und ein C # -Projekt nur die .cs-Dateien kompiliert. Die anderen wurden ignoriert, daher haben Sie keine Fehler erhalten.
Bearbeiten: Wenn Sie einem C # -Projekt eine .vb-Datei hinzufügen, die Datei im Projektmappen-Explorer auswählen und dann im Eigenschaftenfenster nachsehen, werden Sie feststellen, dass die Build-Aktion "Inhalt" und nicht "Kompilieren" ist. Es wird als einfache Textdatei behandelt und nicht einmal als binäre Ressource in die kompilierte Assembly eingebettet.
Bearbeiten: Bei asp.net-Websites können Sie der vb.net-Website eine C # -Webbenutzersteuerung hinzufügen
quelle
Eigentlich habe ich vor einigen Jahren ein Projekt von einem Kollegen geerbt, der beschlossen hatte, VB- und C # -Webformulare innerhalb desselben Projekts zu mischen. Das hat funktioniert, aber es macht keinen Spaß, es zu pflegen.
Ich entschied, dass neuer Code C # -Klassen sein sollte, und um sie zum Laufen zu bringen, musste ich dem Kompilierungsteil von web.config einen Unterknoten hinzufügen
Der gesamte VB-Code wird in einen Unterordner im App_Code mit dem Namen VB und der C # -Code in den CS-Unterordner verschoben. Dadurch werden zwei DLL-Dateien erstellt. Es funktioniert, aber der Code wird in derselben Reihenfolge kompiliert, wie er in "codeSubDirectories" aufgeführt ist. Daher sollten sich die Schnittstellen im VB-Ordner befinden, wenn sie sowohl in C # als auch in VB verwendet werden.
Ich habe sowohl einen Verweis auf einen VB- als auch einen C # -Compiler in
Das Projekt wird derzeit auf Framework 3.5 aktualisiert und funktioniert immer noch (aber es macht immer noch keinen Spaß, es zu warten.)
quelle
Sie können vb und c # nicht innerhalb desselben Projekts mischen. Wenn Sie in Visual Studio feststellen, dass die Projektdateien entweder .vbproj oder .csproj sind. Sie können innerhalb einer Lösung 1 proj in vb und 1 in c # haben.
Sieht so aus, als könnten Sie beide möglicherweise in einem Webprojekt im Verzeichnis App_Code verwenden:
http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx
quelle
Möglicherweise ist dies mit einer benutzerdefinierten MSBuild-Entwicklung möglich. Die bereitgestellten .targets erzwingen, dass die Projekte einsprachig sind - dies wird jedoch durch keine Laufzeit- oder Tooling-Einschränkung verhindert.
Sowohl der VB- als auch der CS-Compiler können in Module ausgeben - die CLR-Version von OBJ-Dateien. Mit dem Assembly-Linker können Sie die Module aus dem VB- und CS-Code entnehmen und eine einzelne Assembly erstellen.
Nicht, dass dies eine triviale Anstrengung wäre, aber es würde wahrscheinlich funktionieren.
quelle
Exemplarische Vorgehensweise: Verwenden mehrerer Programmiersprachen in einem Website-Projekt http://msdn.microsoft.com/en-us/library/ms366714.aspx
quelle
Obwohl Visual Studio dies nicht unterstützt (Sie können einige Tricks ausführen und MSBuild veranlassen, beide zu kompilieren, jedoch nicht aus Visual Studio heraus), tut SharpDevelop dies. Sie können beide in derselben Lösung haben (solange Sie Visual Studio Professional und höher ausführen). Die einfachste Lösung, wenn Sie Visual Studio weiterhin verwenden möchten, besteht darin, Ihren VB-Code in ein anderes Projekt zu trennen und auf diese Weise darauf zuzugreifen.
quelle
Klicken Sie mit der rechten Maustaste auf das Projekt. Wählen Sie Add Asp.Net Folder. Erstellen Sie unter Der Ordner zwei Ordner mit dem Namen VBCodeFiles und den anderen CSCodeFiles. Fügen Sie in Web.Config ein neues Element hinzu, das kompiliert werden soll
Erstellen Sie nun eine cshtml-Seite. Fügen Sie mithilfe von einen Verweis auf VBCodeFiles.Namespace.MyClassName hinzu
Wobei MyClassName ein Klassenobjekt ist, das im obigen Namespace gefunden wird. Schreiben Sie nun das Objekt mit einer cshtml-Datei in Rasiermesser.
Beachten Sie, dass directoryName = "CSCodeFiles" redundant ist, wenn es sich um ein C # -Projekt handelt, und directoryName = "VBCodeFiles" redundant ist, wenn es sich um ein VB.Net-Projekt handelt.
quelle
Ja, es ist möglich, c # - und vb.net-Projekte zu einer einzigen Lösung hinzuzufügen.
Schritt 1: Datei-> Hinzufügen-> Vorhandenes Projekt
Schritt 2: Projekt-> Referenz hinzufügen-> DLL oder Exe des Projekts, das Sie zuvor hinzugefügt haben.
Schritt 3: In vb.net Form, wo Sie c # Formulare verwenden möchten -> Namespace des Projekts importieren.
quelle
Ich sehe nicht ein, wie Sie ein Projekt mit dem C # -Compiler (oder dem VB-Compiler) kompilieren können, ohne dass die falsche Sprache für den Compiler verwendet wird.
Bewahren Sie Ihren C # -Code in einem von Ihrem VB-Projekt getrennten Projekt auf. Sie können diese Projekte in dieselbe Lösung aufnehmen.
quelle
Sie benötigen ein Projekt pro Sprache. Ich bin mir ziemlich sicher, dass ich ein Tool gesehen habe, mit dem Baugruppen zusammengeführt wurden. Wenn Sie dieses Tool finden, sollten Sie bereit sein. Wenn Sie beide Sprachen in derselben Klasse verwenden müssen, sollten Sie in der Lage sein, die Hälfte davon in beispielsweise VB.net zu schreiben und den Rest in C # zu schreiben, indem Sie die VB.net-Klasse erben.
quelle
Nein, Sie können sie nicht im selben Projekt mischen, da die Gefahr besteht, dass jede andere Antwort wiederholt wird.
Abgesehen davon, wenn Sie gerade die Konvertierung von VB in C # abgeschlossen haben, warum sollten Sie dann neuen Code in VB schreiben?
quelle
Für .net 2.0 funktioniert dies. Es kompiliert beide im selben Projekt, wenn Sie Unterverzeichnisse im App-Code mit dem zugehörigen Sprachcode erstellen. Bis jetzt bin ich auf der Suche, ob dies in 3.5 funktionieren soll oder nicht.
quelle
Warum kompilieren Sie Ihren
VB
Code nicht einfach in eine Bibliothek (.dll
). Referenzieren Sie ihn später aus Ihrem Code und fertig. Verwaltetedlls
enthalten,MSIL
zu denen beidec#
undvb
kompiliert werden.quelle
Wie andere gesagt haben, können Sie nicht beide in einem Projekt zusammenfassen. Wenn Sie jedoch nur ein kleines Stück C # - oder VB-Code haben, das Sie in einem Projekt in einer anderen Sprache einfügen möchten, gibt es automatische Konvertierungstools . Sie sind nicht perfekt, aber sie machen die meisten Dinge ziemlich gut. In SharpDevelop ist außerdem ein Konvertierungsdienstprogramm integriert.
quelle
Nein, nicht im selben Projekt. Sie können sie jedoch in derselben Lösung verwenden. Sie müssen jedoch darauf achten, dass Ihr Code CLS-kompatibel ist. Das bedeutet, dass Sie keine Funktionen / Features verwendet haben dürfen, die von einer anderen Sprache nicht verstanden werden. Zum Beispiel versteht VB keine vorzeichenlosen Ints.
quelle
In unserem Szenario handelt es sich um ein einzelnes VB.NET-Projekt (Windows Desktop-Anwendung) in einer einzelnen Lösung. Wir wollten jedoch C # -Funktionen wie vorzeichenbehaftete / vorzeichenlose Ganzzahlen und XML-Literale sowie Zeichenfolgenfunktionen in VB.NET nutzen. Abhängig von den Funktionen erstellen wir zur Laufzeit die Codedatei, kompilieren sie mit dem entsprechenden Rosalyn-Compiler (VB / CS) in die DLL und laden sie dynamisch in die aktuelle Assembly. Natürlich mussten wir daran arbeiten, die dynamischen DLLs zu entkoppeln, zu entladen, neu zu laden, zu benennen usw., und die Speicherverwaltung, bei der wir größtenteils dynamische GUID für die Benennung verwendeten, um Konflikte zu vermeiden. Es funktioniert einwandfrei, wenn App-Benutzer von unserer Desktop-App aus eine Verbindung zu einer beliebigen Datenbank herstellen, eine SQL-Abfrage schreiben, die Verbindung in eine LINQ-Verbindung konvertieren und auch LINQ-Abfragen schreiben können, was alles das dynamische Erstellen von Quellcode, das Kompilieren in DLL und das Anhängen an die aktuelle Assembly erfordert.
quelle
Ja, Sie können beide Dateien nur auf der Website hinzufügen. Wenn es sich bei dem Projekt um eine Webanwendung handelt, sind keine anderen Dateitypen zulässig.
quelle