Czy można mieszać pliki VB i C # w tym samym projekcie dla biblioteki klas? Czy jest jakieś ustawienie, które to umożliwia?
Próbowałem i żaden z technologii intellisense pracuje całkiem dobrze, choć kompilator tło wydaje się obsługiwać go wystarczająco dobrze (pomijając fakt, że ja wtedy miał 2 klasy w tej samej przestrzeni nazw o tej samej nazwie, a nie narzekać).
Próbujemy przekonwertować z VB na C #, ale nie zakończyliśmy konwersji całego kodu. Mam nowy kod, który muszę napisać, ale tak naprawdę nie chciałem tworzyć nowego projektu tylko dla niego.
Odpowiedzi:
Nie, nie możesz. Zespół / projekt (zazwyczaj każdy projekt kompiluje się do 1 zestawu) musi być w jednym języku. Można jednak używać wielu zestawów, a każdy z nich może być kodowany w innym języku, ponieważ wszystkie są skompilowane do MSIL.
Skompilował się dobrze i nie narzekał, ponieważ projekt VB.NET faktycznie kompiluje tylko pliki .vb, a projekt C # faktycznie kompiluje tylko pliki .cs. Ignorował pozostałe, dlatego nie otrzymałeś błędów.
Edycja: Jeśli dodasz plik .vb do projektu C #, wybierz plik w panelu Eksplorator rozwiązań, a następnie spójrz na panel Właściwości, zauważysz, że Akcją kompilacji jest „Zawartość”, a nie „Kompiluj”. Jest traktowany jako prosty plik tekstowy i nie jest nawet osadzany w skompilowanym zestawie jako zasób binarny.
Edit: Z stronach asp.net można dodać c # kontrolą użytkownika na stronie internetowej vb.net
źródło
Cóż, właściwie odziedziczyłem projekt kilka lat temu od kolegi, który zdecydował się na połączenie formularzy internetowych VB i C # w tym samym projekcie. To działało, ale nie jest przyjemne w utrzymaniu.
Zdecydowałem, że nowy kod powinien być klasami C # i aby je uruchomić, musiałem dodać podwęzeł do części kompilacyjnej web.config
Cały kod VB trafia do podfolderu w App_Code o nazwie VB, a kod C # do podfolderu CS. Spowoduje to utworzenie dwóch plików .dll. Działa, ale kod jest kompilowany w tej samej kolejności, jak podano w „codeSubDirectories”, a zatem interfejsy powinny znajdować się w folderze VB, jeśli są używane zarówno w języku C #, jak i VB.
Mam zarówno odniesienie do VB, jak i kompilatora C # w programie
Projekt jest obecnie aktualizowany do frameworka 3.5 i nadal działa (ale nadal nie jest przyjemny w utrzymaniu ...)
źródło
Nie możesz mieszać vb i c # w tym samym projekcie - jeśli zauważysz w Visual Studio, pliki projektu to .vbproj lub .csproj. Możesz w ramach rozwiązania - mieć 1 proj w VB i 1 w C #.
Wygląda na to, że zgodnie z tym możesz potencjalnie użyć ich obu w projekcie internetowym w katalogu App_Code:
http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx
źródło
Może to być możliwe w przypadku niektórych niestandardowych rozwiązań MSBuild. Dostarczone .targets wymuszają, aby projekty były jednojęzyczne - ale nie ma ograniczeń dotyczących środowiska wykonawczego ani narzędzi, które to uniemożliwiają.
Kompilatory VB i CS mogą wysyłać do modułów - pliki .obj w wersji CLR. Używając konsolidatora zespołu, możesz pobrać moduły z kodu VB i CS i utworzyć pojedynczy zestaw.
Nie żeby był to trywialny wysiłek, ale prawdopodobnie zadziała.
źródło
Przewodnik: używanie wielu języków programowania w projekcie witryny sieci Web http://msdn.microsoft.com/en-us/library/ms366714.aspx
źródło
Chociaż Visual Studio tego nie obsługuje (możesz wykonać kilka sztuczek i uzyskać MSBuild, aby skompilować oba, ale nie z poziomu programu Visual Studio), SharpDevelop to robi. Możesz mieć oba w tym samym rozwiązaniu (o ile korzystasz z programu Visual Studio Professional i nowszych wersji), więc najłatwiejszym rozwiązaniem, jeśli chcesz nadal używać programu Visual Studio, jest oddzielenie kodu VB do innego projektu i dostęp do niego w ten sposób.
źródło
Kliknij prawym przyciskiem myszy projekt. Wybierz opcję Dodaj folder Asp.Net. W folderze utwórz dwa foldery, jeden o nazwie VBCodeFiles, a drugi o nazwie Inne pliki CSCode w sieci Web.Config dodaj nowy element do kompilacji
Teraz utwórz stronę cshtml. Dodaj odwołanie do VBCodeFiles.Namespace.MyClassName przy użyciu
Gdzie MyClassName jest obiektem klasy znajdującym się w powyższej przestrzeni nazw. teraz zapisz obiekt w maszynce do golenia, używając pliku cshtml.
Zwróć uwagę, że directoryName = "CSCodeFiles" jest nadmiarowa, jeśli jest to projekt C #, a directoryName = "VBCodeFiles" jest nadmiarowa, jeśli jest to projekt VB.Net.
źródło
Tak, to możliwe. Dodanie projektów C # i vb.net do jednego rozwiązania.
krok 1: Plik-> Dodaj-> Istniejący projekt
Krok 2: Projekt-> Dodaj odniesienie-> dll lub exe projektu, który dodałeś wcześniej.
step3: W formularzu vb.net, w którym chcesz użyć formularzy C #-> Importuj przestrzeń nazw projektu.
źródło
Nie rozumiem, jak można skompilować projekt za pomocą kompilatora C # (lub kompilatora VB) i nie przeszkadzać w niewłaściwym języku kompilatora.
Zachowaj kod C # w oddzielnym projekcie od projektu VB. Możesz uwzględnić te projekty w tym samym rozwiązaniu.
źródło
Potrzebujesz jednego projektu na język. Jestem pewien, że widziałem narzędzie, które łączyło zespoły, jeśli znajdziesz to narzędzie, powinieneś być dobry. Jeśli potrzebujesz używać obu języków w tej samej klasie, powinieneś być w stanie napisać połowę z nich w, powiedzmy, VB.net, a resztę napisać w C #, dziedzicząc klasę VB.net.
źródło
Ryzykując powtórzenie każdej innej odpowiedzi, nie, nie możesz ich łączyć w tym samym projekcie.
Pomijając to, jeśli właśnie zakończyłeś konwersję VB do C #, dlaczego miałbyś pisać nowy kod w VB?
źródło
W przypadku .net 2.0 to działa. Kompiluje oba w tym samym projekcie, jeśli utworzysz podkatalogi w kodzie aplikacji z powiązanym kodem języka. Na razie jednak szukam, czy to powinno działać w 3.5, czy nie.
źródło
Dlaczego po prostu nie skompilujesz swojego
VB
kodu do biblioteki (.dll
), odnieś to później do swojego kodu i to wszystko. Zarządzanydlls
zawiera,MSIL
do którego są kompilowane zarównoc#
ivb
.źródło
Jak powiedzieli inni, nie można umieścić obu w jednym projekcie. Jeśli jednak masz tylko mały fragment kodu C # lub VB, który chcesz dołączyć do projektu w innym języku, dostępne są narzędzia do automatycznej konwersji . Nie są idealne, ale większość rzeczy robią całkiem dobrze. Ponadto SharpDevelop ma wbudowane narzędzie do konwersji.
źródło
Nie, nie w tym samym projekcie, ale możesz ich użyć w tym samym rozwiązaniu. chociaż musisz uważać, aby Twój kod był zgodny z CLS. Oznacza to, że nie możesz używać takiej funkcji / funkcji, która nie jest zrozumiała w innym języku. Na przykład VB nie rozumie unsigned ints.
źródło
W naszym scenariuszu jest to pojedynczy projekt VB.NET (aplikacja Windows Desktop) w jednym rozwiązaniu. Chcieliśmy jednak skorzystać z funkcji języka C #, takich jak liczby całkowite ze znakiem / bez znaku oraz literały XML i funkcje ciągów w VB.NET. W zależności od funkcji, w czasie wykonywania kompilujemy plik kodu, kompilujemy go przy użyciu odpowiedniego kompilatora Rosalyn (VB / CS) do DLL i dynamicznie ładujemy do bieżącego zestawu. Oczywiście musieliśmy popracować nad usuwaniem linków, wyładowywaniem, ponownym ładowaniem, nazywaniem itp. Dynamicznych bibliotek DLL oraz zarządzaniem pamięcią, w przypadku gdy w większości używaliśmy dynamicznego identyfikatora GUID do nazewnictwa, aby uniknąć konfliktów. Działa dobrze, gdy użytkownik aplikacji może łączyć się z dowolną bazą danych z naszej aplikacji komputerowej, pisać zapytania SQL, konwertować połączenie na połączenie LINQ i pisać zapytania LINQ, co wszystko wymaga dynamicznego budowania kodu źródłowego, kompilowania do DLL i dołączania do bieżącego zestawu.
źródło
Tak, oba te pliki można dodać tylko w serwisie WWW.Jeśli projekt jest aplikacją internetową, nie zezwoli na inny typ pliku.
źródło