2010-01-22 19 views
5

Mam rozwiązanie vb.net i chcę dodać tam nowe pliki DLL napisane w języku C# i korzystać z funkcji z biblioteki dll, w kodzie napisanym w vb.net.Mieszanie kodu VB.net z C# kod

Zrobiłem kilka zastosowań i wygląda na to, że działa dobrze, , ale czy to jest mądrą rzeczą, że robisz messingowy kod vb.net za pomocą C# jak chcę.

A jakie są zagrożenia związane z tym, co robię?

Bardzo dziękuję za pomoc.

Odpowiedz

11

Twoja biblioteka DLL nie jest biblioteką DLL w stylu C#, jest biblioteką .NET DLL. Po skompilowaniu wszystko, co masz, to IL - nie ma znaczenia, z jakiego języka pochodzi. Nie powinno być problemu, chyba że natkniesz się na jeden z nieparzystych przypadków, w których interfejs DLL zawiera coś, co nie jest obsługiwane przez Visual Basic. Ale to byłaby bardzo ważna sprawa.

Specyfikacja języka wspólnego (CLS) definiuje podzbiór funkcji .NET, które muszą być obsługiwane przez język .NET, a jeśli biblioteka DLL jest zgodna z CLS, można z niej korzystać bez żadnych problemów. Jeśli nie masz pewności co do różnicy między CLS, CTS, CLR itp., To bardzo mi pomogło to w pokryciu tego w this book, chociaż jest to przede wszystkim książka C#.

+0

OP pyta, czy to jest właściwe *, ponieważ ma już tę mieszankę językową w miejscu –

+1

To jest 95% - 99,99% prawdziwe, ale nie jest w 100% prawdziwe. Właśnie dlatego istnieje specyfikacja języka wspólnego. Oznacz bibliotekę DLL jako zgodną z CLS, która powinna w 100% zagwarantować, że będziesz mógł wywołać ją z dowolnego języka CLS (np. VB.Net). http://stackoverflow.com/questions/2117937#/mixing-vb-net-code-w-c-code2117937#2117937 – MarkJ

+0

@Mark - dziękuję, wyraźnie nie rozpalam dzisiaj wszystkich cylindrów. Chyba dlatego nie jestem w pracy. W każdym razie, zredagowałem odpowiedź. –

3

Możesz mieszać kod VB i C# w tym samym projekcie - Pracowałem nad kilkoma projektami, które je pomieszały i nie mają problemów.

Twoja mieszanka językowa wydaje się być znacznie bardziej odizolowana - jedno rozwiązanie z wieloma bibliotekami DLL C# i projektem (projektami) vb.

Nie widzę z tym wielu problemów.

+6

Na pewno chodziło Ci o "to samo rozwiązanie"? Mieszanie w jednym projekcie nie działa. –

+0

Może pracować w projekcie witryny sieci Web ASP.NET. –

+0

Możliwe jest posiadanie dwóch języków w tym samym projekcie - po prostu nie w tym samym pliku. –

0

Myślę, że największym zagrożeniem jest posiadanie programisty znającego oba języki; podczas gdy C# i VB.NET są podobne, ponieważ są związane z platformą .NET, mają pewne osobliwości.

Znajdziesz wiele dobrych programistów C# i VB.NET wielu dobrych programistów, ale może być trochę trudniej znaleźć dobrego programistę dla oba języki

również spojrzeć na ten artykuł: A Manager’s Retrospective on the C# versus VB.NET decision ponieważ mówi o innych rzeczach, o których należy pamiętać, jako preferencjach programisty, funkcjach językowych i rekrutacji.

+0

Nie ja, a nie inny programista pracujący nad tym projektem, nie znam w ogóle języka v. Więc naprawdę chcemy przejść do C#. –

+0

można odwoływać się do złożeń vb.net, tak jak już to robisz, i próbować kupić czas z szefem, aby stworzyć rozwiązanie, które używa jednego języka; możesz uzasadnić, że mówisz o wydajności –

1

Jedno rozwiązanie zostało znalezione here:

Jednakże jest możliwe użycie różnych języków w jednym projektu. Może być konieczne napisanie polecenia kompilacji linii , aby zbudować projekt. W pakiecie SDK środowiska .NET znajduje się na nim jedna próbka . Można uzyskać do niego dostęp w C: \ Program Files \ Microsoft Visual Studio .NET \ FrameworkSDK \ Samples \ Technologies \ CrossDevLan guage.

Ten przykład demonstruje użycie różnych języków programowania w jednym projekcie . Ta próbka tworzy dwa zespoły o wartości . Pierwszym z nich jest biblioteka lub zestaw DLL, który definiuje prostą klasę bazową napisaną w zarządzanych rozszerzeniach dla C++.Drugi zestaw jest wykonywalnym zestawem , który definiuje trzy pochodne klasy napisane w C#, VB i IL (język pośredni). Te typy pochodzą od siebie i ostatecznie z klasy bazowej zapisanej w zarządzanym C++. Na koniec plik wykonywalny tworzy instancje każdego z wyprowadzonych typów i wywołuje metodę wirtualną dla każdego z nich. .NET Framework to środowisko , w którym różni deweloperzy mogą bez problemu współpracować z wersją , tworząc w ich języku .

Ale można używać zarówno VB.NET i kod C# wewnątrz aplikacji asp.net.

Musisz utworzyć dwa foldery (ex vbFolder i csFolder.) W folderze App_Code i napisać ten kod w pliku web.config:

<system.web>  
<compilation>  
<CODESUBDIRECTORIES>  
<ADD directoryName="vbFolder" />  
<ADD directoryName="csFolder" />  
</CODESUBDIRECTORIES>  
</compilation>  
</system.web> 

Dobre wyjaśnienie jest here.

0

Zarówno VB.NET & C# są kompilowane do MSIL (Microsoft Intermediate Language) nie natywnego kodu i to, aby ukończyć pełną kompilację do rodzimej (maszyna) na komputerze użytkownika końcowego za pośrednictwem szkieletu exist .NET, które znajduje się na komputer użytkownika końcowego, więc gdyby był .NET dla systemu operacyjnego x twój program powinien działać dobrze dla systemu operacyjnego x, a jeśli był to system operacyjny, twoja aplikacja powinna działać dobrze z OS y, i to jest rozwiązanie, które technologia .NET ma do pozwól, aby system operacyjny aplikacji .NET był zależny.

Istnieje również usługa Marshaler COM, która obsługuje stary komponent (sterowanie) do pracy z aplikacjami .NET, dzięki czemu można na przykład wywołać kontrolkę vb6 (* .ocx) w aplikacji okna C#.

To doskonała integracja technologii i technik firmy Microsoft.

i nie trzeba mieć developer dobro zarówno VB.NET i C#, ale w dowolny sposób, jeśli zajdzie taka potrzeba, jestem tutaj :)

ale pytanie brzmi, dlaczego jestem w obu?

to tylko dlatego, że dostarczam treningi, więc pomyślałem o rozszerzeniu moich umiejętności i byłem zaskoczony, że oboje są bardzo blisko, z wyjątkiem składni.

5

Oznacz kod jako zgodny z CLS, a następnie kompilator C# wyświetli ostrzeżenie, jeśli zrobisz coś, co może spowodować problemy, gdy twoja biblioteka DLL zostanie wywołana z innego języka .Net.

Niektóre cytaty z MSDN

Aby w pełni współdziałać z innymi obiektami niezależnie od języka zostali realizowanego w obiekty muszą wystawiać na rozmówców tylko te funkcje, które są wspólne dla wszystkich języków muszą współpracować z. Z tego powodu zdefiniowano Common Language Specification (CLS), który jest zestawem podstawowych funkcji językowych wymaganych przez wiele aplikacji potrzebnych w wielu aplikacjach .

Można oznaczyć zespoły, moduły, typy i elementy jako zgodne z CLS przy użyciu CLSCompliantAttribute.

Niektóre kompilatory zgodne z CLS językowe, such as the C# compiler, pozwalają określić, że planują swój kod do być zgodny z CLS. Kompilatory te mogą sprawdzić zgodność z CLS i niech wiedzieć, kiedy twój kod wykorzystuje funkcjonalność , który nie jest obsługiwany przez CLS.

Ponadto Twoja organizacja będzie potrzebować umiejętności C# oraz umiejętności Vb.Net. Powinieneś chyba przekonać się, że to jest w porządku, a następnie przekonać kluczowych decydentów.