Mixage C# & VB dans le même projet

Pouvez-vous mélanger les fichiers VB et c# dans le même projet pour une bibliothèque de classes? Y a-t-il un réglage qui le rend possible?

J'ai essayé et aucun intellisense ne fonctionne correctement, bien que le compilateur d'arrière-plan semble le gérer assez bien (mis à part le fait que j'avais alors 2 classes dans le même espace de noms avec le même nom et qu'il ne s'est pas plaint).

Nous essayons de convertir de VB en C # mais n'avons pas fini de convertir tout le code. J'ai quelques nouveaux code J'ai besoin d'écrire, mais je ne voulais pas vraiment faire un nouveau projet juste pour cela.

132
demandé sur gunr2171 2009-08-14 18:01:13

17 réponses

Non, vous ne pouvez pas. un assembly / projet (chaque projet compile en 1 assembly habituellement) doit être une langue. Cependant, vous pouvez utiliser plusieurs assemblys, et chacun peut être codé dans une langue différente car ils sont tous compilés dans MSIL.

Il a compilé bien et ne s'est pas plaint parce qu'un VB.NET projet ne fait compiler le .les fichiers vb et un projet C# ne compileront que le .fichiers cs. Il ignorait les autres, donc vous n'avez pas reçu erreur.

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'est même pas intégré dans l'assembly compilé en tant que ressource binaire.

Modifier: avec asp.net sites Web vous pouvez ajouter c# Web user control à vb.net site web

120
répondu Joel B Fant 2014-10-03 16:12:53

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# webforms dans le même projet. Cela a fonctionné mais est loin d'être amusant à maintenir.

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

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

Le tout le code VB VA dans un sous-dossier dans L'App_Code appelé VB et le code C# dans le sous-dossier CS. Cela en produira deux .les fichiers dll. Il fonctionne, mais le code est compilé dans le même ordre que listé dans "codeSubDirectories" et donc les Interfaces doivent être dans le dossier VB si elles sont utilisées à la fois en C# et VB.

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

<system.codedom>
    <compilers>

Le projet est actuellement mis à jour vers framework 3.5 et il fonctionne toujours (mais toujours pas amusant à maintenir..)

32
répondu Lars Strange 2010-10-21 14:18:21

Vous ne pouvez pas mélanger vb et c# dans le même projet-si vous remarquez dans visual studio les fichiers de projet sont soit .VBPROJ ou .csproj. Vous pouvez dans une solution-avoir 1 proj en vb et 1 en c#.

On dirait que selon cela, vous pouvez potentiellement les utiliser tous les deux 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_Code-folder.aspx

20
répondu brendan 2009-08-14 14:15:09

Cela pourrait être possible avec un développement MSBuild personnalisé. Le fourni .les cibles forcent les projets à être un seul langage-mais aucune restriction d'exécution ou d'outillage n'empêche cela.

Les deux compilateurs VB et CS peuvent sortir vers modules - la version de CLR.les fichiers obj. En utilisant l'éditeur de liens d'assemblage, vous pouvez prendre les modules du code VB et CS et produire un seul assemblage.

Pas que ce serait un effort trival, mais cela fonctionnerait probablement.

12
répondu Scott Weinstein 2009-08-14 14:20:20

Procédure pas à pas: Utilisation de plusieurs langages de programmation dans un projet de Site web http://msdn.microsoft.com/en-us/library/ms366714.aspx

Par défaut, le dossier App_Code n'autorise pas plusieurs langages de programmation. Cependant, dans un projet de site Web vous pouvez modifier la structure de votre dossier et les paramètres de configuration pour prendre en charge plusieurs langages de programmation tels que Visual Basic et C#. Cela permet ASP.NET pour créer plusieurs assemblys, un pour chaque langue. Pour plus d'informations, voir dossiers de Code partagés dans ASP.NET projets Web. Les développeurs incluent généralement plusieurs langages de programmation dans les applications Web pour prendre en charge plusieurs équipes de développement qui fonctionnent indépendamment et préfèrent différents langages de programmation.

7
répondu gerryLowry 2015-03-31 19:49:22

Consultez ce lien, qui traite du problème et montre comment combiner le code VB et c# dans un projet, dans. NET 4.0

Http://msdn.microsoft.com/en-us/library/t990ks23.aspx

6
répondu Kevin 2012-06-30 17:17:33

Bien que Visual Studio ne supporte pas cela (vous pouvez faire quelques astuces et obtenir MSBuild pour compiler les deux, mais pas à partir de Visual Studio), SharpDevelop le fait. Vous pouvez avoir les deux dans la même solution (tant que vous exécutez Visual Studio Professional et supérieur), donc la solution la plus simple si vous voulez continuer à utiliser Visual Studio est de séparer votre code VB dans un projet différent et d'y accéder de cette façon.

2
répondu Kris Erickson 2009-08-14 14:42:38

Cliquez avec le bouton droit sur le projet. Choisissez Ajouter Asp.Net Dossier. Sous le dossier, créez deux dossiers, l'un nommé VBCodeFiles et L'autre CSCodeFiles Dans Le Web.Config ajoute un nouvel élément sous compilation

<compilation debug="true" targetFramework="4.5.1">
      <codeSubDirectories>
        <add directoryName="VBCodeFiles"/>
        <add directoryName="CSCodeFiles"/>
      </codeSubDirectories>
</compilation>

Maintenant, créez une page cshtml. Ajoutez une référence aux fichiers VBCodeFiles.Espace de noms.MyClassName utilisant

@using DMH.VBCodeFiles.Utils.RCMHD
@model MyClassname

Où MyClassName est un objet de classe trouvé dans l'espace de noms ci-dessus. maintenant, écrivez l'objet dans razor en utilisant un fichier cshtml.

<p>@Model.FirstName</p>

Veuillez noter, le directoryName= "CSCodeFiles" est redondant s'il s'agit d'un projet C# et directoryName="VBCodeFiles" est redondant s'il s'agit d'un projet C#. VB.Net projet.

2
répondu RickIsWright 2015-05-04 23:45:21

Oui c'est possible.ajouter c# et vb.net projets en une seule solution.

Étape 1: Fichier - > Ajouter - > Projet Existant

Step2: Projet - > Ajouter une référence - > dll ou exe du projet que vous avez ajouté auparavant.

Étape 3: dans vb.net formulaire où vous voulez utiliser des formulaires c#- > importer l'espace de noms du projet.

2
répondu user6808128 2016-09-08 08:15:24

Je ne vois pas comment vous pouvez compiler un projet avec le compilateur C# (ou le compilateur VB) et ne pas l'avoir rechigné au mauvais langage pour le compilateur.

Conservez votre code C# dans un projet séparé de votre projet VB. Vous pouvez inclure ces projets dans la même solution.

1
répondu rein 2009-08-14 14:04:56

Vous avez besoin d'un projet par langue. Je suis assez confiant d'avoir vu un outil qui fusionne les assemblages, si vous trouvez cet outil, vous devriez être prêt à partir. Si vous devez utiliser les deux langues dans la même classe, vous devriez être capable d'en écrire la moitié par exemple VB.net et puis écrivez le reste en C# en héritant du VB.net classe.

1
répondu svinto 2009-08-14 14:09:05

Au risque de faire écho à toutes les autres réponses, non, vous ne pouvez pas les mélanger dans le même projet.

Cela mis à part, si vous venez de terminer la conversion de VB en C#, pourquoi écririez-vous un nouveau code dans VB?

1
répondu Adam Robinson 2009-08-14 14:09:37

Pour. net 2.0 cela fonctionne. Il compile les deux dans le même projet si vous créez des sous-répertoires de code in app avec le code de langue associé. Pour l'instant, je cherche si cela devrait fonctionner dans 3.5 ou non.

1
répondu mgbeers 2010-09-29 16:11:14

Pourquoi ne pas simplement compiler votre code VB dans une bibliothèque (.dll).Référence plus tard à partir de votre code et c'est tout. Géré dlls contiennent MSIL, dont les deux c# et vb sont compilés.

1
répondu Ajov 2011-12-14 09:56:07

Comme d'autres l'ont dit, vous ne pouvez pas mettre les deux dans un projet. Cependant, si vous avez juste un petit morceau de code C# ou VB que vous souhaitez inclure dans un projet dans l'autre langue, il existe des outils de conversion automatiques . Ils ne sont pas parfaits, mais ils font la plupart des choses assez bien. En outre, SharpDevelop a un utilitaire de conversion Intégré.

0
répondu Scott Whitlock 2009-08-14 14:09:27

Non, pas dans le même projet.mais vous pouvez utiliser dans la même solution. bien que vous devez veiller à ce que votre code soit conforme à CLS. Cela signifie que vous ne devez pas avoir utilisé une telle fonctionnalité / fonctionnalité qui n'est pas comprise par une autre langue. Par exemple, VB ne comprend pas les ints non signés.

0
répondu juhi 2014-02-15 04:10:23

Oui, vous pouvez ajouter les deux fichiers dans le site Web uniquement.Si le projet est une application web, il n'autorisera pas différents types de fichiers.

-1
répondu Python 2014-08-07 14:54:42