Pouvez-vous mélanger des fichiers vb et c # dans le même projet pour une bibliothèque de classes? Y a-t-il un paramètre qui le rend possible?
J'ai essayé et aucun des intellisense ne fonctionne tout à fait 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 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 du nouveau code à écrire, mais je ne voulais pas vraiment créer un nouveau projet juste pour ça.
Réponses:
Non, tu ne peux pas. Un assemblage / projet (chaque projet se compile en 1 assemblage généralement) doit être un langage. Cependant, vous pouvez utiliser plusieurs assemblys, et chacun peut être codé dans un langage différent car ils sont tous compilés vers MSIL.
Il s'est bien compilé et ne s'est pas plaint car un projet VB.NET ne compilera en fait que les fichiers .vb et un projet C # ne compilera réellement que les fichiers .cs. Il ignorait les autres, donc vous n'avez pas reçu d'erreurs.
Modifier: Si vous ajoutez un fichier .vb à un projet C #, sélectionnez le fichier dans le panneau Explorateur de solutions, puis regardez le panneau Propriétés, vous remarquerez que l'action de génération est «Contenu», pas «Compiler». Il est traité comme un simple fichier texte et n'est même pas incorporé dans l'assembly compilé en tant que ressource binaire.
Edit: Avec les sites Web asp.net, vous pouvez ajouter un contrôle utilisateur Web c # au site Web vb.net
la source
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 les formulaires Web VB et C # dans le même projet. Cela a fonctionné mais est loin d'être amusant à entretenir.
J'ai décidé que le nouveau code devrait être des classes C # et pour les faire fonctionner, j'ai dû ajouter un sous-nœud à la partie compilation de web.config
Le code tout VB va dans un sous-dossier dans App_Code appelé VB et le code C # dans le sous-dossier CS. Cela produira deux fichiers .dll. Cela fonctionne, mais le code est compilé dans le même ordre que celui indiqué dans "codeSubDirectories" et par conséquent, les interfaces doivent être dans le dossier VB si elles sont utilisées à la fois en C # et en VB.
J'ai à la fois une référence à un VB et un compilateur C # dans
Le projet est actuellement mis à jour vers le framework 3.5 et il fonctionne toujours (mais toujours pas amusant à maintenir ..)
la source
Vous ne pouvez pas mélanger vb et c # dans le même projet - si vous remarquez dans Visual Studio, les fichiers du projet sont .vbproj ou .csproj. Vous pouvez dans une solution - avoir 1 proj en vb et 1 en c #.
On dirait qu'en fonction de 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
la source
Cela pourrait être possible avec un développement MSBuild personnalisé. Les .targets fournis forcent les projets à être dans un seul langage - mais aucune restriction d'exécution ou d'outillage ne l'empêche.
Les compilateurs VB et CS peuvent générer des sorties vers des modules - la version CLR des fichiers .obj. À l'aide de l'éditeur de liens d'assembly, vous pouvez prendre les modules du code VB et CS et produire un seul assembly.
Non pas que ce serait un effort trival, mais cela fonctionnerait probablement.
la source
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
la source
Bien que Visual Studio ne prenne pas en charge cela (vous pouvez faire quelques astuces et demander à MSBuild de 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 souhaitez continuer à utiliser Visual Studio est de séparer votre code VB dans un projet différent et d'y accéder de cette manière.
la source
Cliquez avec le bouton droit sur le projet. Choisissez Ajouter un dossier Asp.Net. Sous le dossier, créez deux dossiers, l'un nommé VBCodeFiles et l'autre CSCodeFiles dans Web.Config, ajoutez un nouvel élément sous compilation
Maintenant, créez une page cshtml. Ajoutez une référence à VBCodeFiles.Namespace.MyClassName en utilisant
Où MyClassName est un objet de classe trouvé dans l'espace de noms ci-dessus. écrivez maintenant l'objet dans rasoir en utilisant un fichier cshtml.
Veuillez noter que le directoryName = "CSCodeFiles" est redondant s'il s'agit d'un projet C # et le directoryName = "VBCodeFiles" est redondant s'il s'agit d'un projet VB.Net.
la source
Oui, il est possible d'ajouter des projets c # et vb.net en une seule solution.
Étape 1: Fichier-> Ajouter-> Projet existant
Étape 2: Projet-> Ajouter une référence-> dll ou exe du projet que vous avez ajouté auparavant.
step3: sous la forme vb.net où vous voulez utiliser c # forms-> importer l'espace de noms du projet.
la source
Je ne vois pas comment vous pouvez compiler un projet avec le compilateur C # (ou le compilateur VB) et ne pas le faire hésiter au mauvais langage pour le compilateur.
Conservez votre code C # dans un projet distinct de votre projet VB. Vous pouvez inclure ces projets dans la même solution.
la source
Vous avez besoin d'un projet par langue. Je suis assez confiant d'avoir vu un outil qui a fusionné des assemblages, si vous trouvez cet outil, vous devriez être prêt à partir. Si vous avez besoin d'utiliser les deux langages dans la même classe, vous devriez pouvoir en écrire la moitié dans, disons VB.net, puis écrire le reste en C # en héritant de la classe VB.net.
la source
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 en VB?
la source
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 d'application avec le code de langue associé. Pour l'instant, je cherche à savoir si cela devrait fonctionner en 3.5 ou non.
la source
Pourquoi ne pas simplement compiler votre
VB
code dans une bibliothèque (.dll
) .Référer plus tard à partir de votre code et c'est tout. Manageddlls
contientMSIL
dans lequel les deuxc#
etvb
sont compilés.la source
Comme d'autres l'ont dit, vous ne pouvez pas mettre les deux dans un même projet. Cependant, si vous ne disposez que d'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 automatique . Ils ne sont pas parfaits, mais ils font assez bien la plupart des choses. En outre, SharpDevelop a un utilitaire de conversion intégré.
la source
Non, pas dans le même projet, mais vous pouvez les utiliser dans la même solution. mais vous devez vous assurer que votre code est 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 entiers non signés.
la source
Dans notre scénario, il s'agit d'un seul projet VB.NET (application Windows Desktop) dans une seule solution. Cependant, nous voulions tirer parti des fonctionnalités C # telles que les entiers signés / non signés et les littéraux XML et les fonctionnalités de chaîne dans VB.NET. Ainsi, en fonction des fonctionnalités, au moment de l'exécution, nous construisons le fichier de code, compilons à l'aide du compilateur Rosalyn respectif (VB / CS) dans la DLL et chargeons dynamiquement dans l'assemblage actuel. Bien sûr, nous avons dû travailler sur la dissociation, le déchargement, le rechargement, la dénomination, etc. des DLL dynamiques et la gestion de la mémoire où nous utilisions largement le GUID dynamique pour la dénomination afin d'éviter les conflits. Cela fonctionne bien lorsque l'utilisateur de l'application peut se connecter à n'importe quelle base de données à partir de notre application de bureau, écrire une requête SQL, convertir la connexion en connexion LINQ et écrire également des requêtes LINQ, ce qui nécessite la construction dynamique du code source, la compilation en DLL et l'attachement à l'assembly actuel.
la source
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.
la source