169 votes

Mélange de c# & VB dans le même projet

Vous pouvez mélanger vb et c# les fichiers dans le même projet pour une bibliothèque de classe? Est-il un paramètre qui rend-il possible?

J'ai essayé et aucun de l'intellisense fonctionne tout à fait raison, bien que l'arrière-plan compilateur semble gérer assez bien (à part le fait que je, puis, avait 2 classes dans le même espace de noms avec le même nom et il ne se plaint pas).

Nous essayons de convertir à partir de VB, C#, mais n'avez pas fini de convertir tout le code. J'ai quelques nouveaux code que j'ai besoin d'écrire, mais je n'ai pas vraiment envie de faire un nouveau projet.

136voto

Joel B Fant Points 14013

Non, vous ne pouvez pas. Un assembly/projet (chaque projet se compile à 1 assemblée en général) doit être une langue. Toutefois, vous pouvez utiliser plusieurs assemblées, et chacun peut être codé dans un langage différent parce qu'ils sont compilés en MSIL.

Il a compilé fine et ne se plaint pas parce qu'un VB.NET le projet ne compiler les .vb fichiers et un projet C# ne compiler les .cs fichiers. Il a été en ignorant les autres, donc vous ne recevez pas d'erreurs.

Edit: Si vous ajoutez un .vb fichier à un projet C#, sélectionnez le fichier dans l'Explorateur de solutions, puis de regarder le panneau des Propriétés, vous remarquerez que l'Action de Construire est 'Contenu', pas 'Compiler'. Il est traité comme un simple fichier texte, et n'a même pas de s'incruster dans l'assembly compilé en tant que ressource binaire.

34voto

Lars Strange Points 91

Eh bien, en fait j'ai hérité d'un projet il y a quelques années d'un collègue qui avait décidé de mélanger VB et C#, web forms dans le même projet. Que de travail mais est loin d'être amusant à préserver.

J'ai décidé que le nouveau code devrait être classes C# et pour les faire fonctionner, j'ai dû ajouter un sous-nœud à la compilation partie du web.config

        <codeSubDirectories>
            <add directoryName="VB"/>
            <add directoryName="CS"/>
        </codeSubDirectories>

La tous code VB va dans un sous-dossier App_Code appelé VB et le code C# dans le CS sous-dossier. Ceci va produire deux .les fichiers dll. Il fonctionne, mais le code est compilé dans le même ordre que dans la liste de "codeSubDirectories" et donc je.e des Interfaces doit être dans le VB dossier si elle est utilisée en C# et VB.

J'ai à la fois une référence à une VB et un compilateur C# dans

<system.codedom>
    <compilers>

Le projet est actuellement mis à jour pour framework 3.5 et il fonctionne toujours (mais toujours pas de plaisir à maintenir..)

22voto

brendan Points 15097

Vous ne pouvez pas mélanger des vb et c# au sein d'un même projet - si vous remarquez dans visual studio, les fichiers de projet sont soit .vbproj ou .csproj. Vous pouvez dans une solution de 1 proj en vb et 1 en c#.

Ressemble en fonction de ce que vous pouvez éventuellement l'utiliser dans un projet web dans le répertoire App_Code:

http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App%5FCode-folder.aspx

15voto

Scott Weinstein Points 11404

Il peut être possible avec un développement personnalisé de MSBuild. Le .targets fourni forcer les projets comme unique langue - mais il n’y a aucune restriction DUREE ou outillage empêcher cela.

Le VB et le CS compilateurs peuvent sortir à modules - version du CLR de fichiers .obj. À l’aide de l’utilitaire assembly linker, vous pourriez prendre les modules de code VB et CS et produire un assembly unique.

Pas que ce serait un effort trival, mais ça marcherait probablement.

5voto

D. Lambert Points 1147

Soit dit en passant, j’ai pensé qu’il serait possible de retirer une approche hybride utilise les classes partielles dans deux projets différents, mais partiels ne couvrent ensembles, donc cela ne fonctionnera pas, non plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X