2010-01-22 3 views
5

У меня есть решение vb.net, и я хочу добавить туда новые DLL-файлы, написанные на C#, и использовать функциональные возможности из dll в коде, написанном на vb.net.Смешивание кода VB.net с кодом C#

Я сделал несколько его применений, и кажется, что все работает правильно, , но это умная вещь, чтобы делать messing код vb.net с C#, как я хочу.

И какая опасность того, что я делаю?

Большое спасибо за помощь.

ответ

11

Ваш DLL не является DLL C#, это DLL .NET. После компиляции все, что у вас есть, это IL - неважно, на каком языке он появился. Не должно быть никаких проблем, если вы не столкнетесь с одним из случаев нечетного края, когда интерфейс DLL включает в себя что-то, что не поддерживается Visual Basic. Но это будет очень важный вопрос.

Общая спецификация языка или CLS определяет подмножество функций .NET, которые должны поддерживаться языком .NET, и если ваша DLL совместима с CLS, то вы можете использовать ее без проблем. Если вы смущены различием между CLS, CTS, CLR и т. Д., То я нашел покрытие в this book очень полезным, хотя это, в основном, книга C#.

+0

OP спрашивает, если это * правильно, что делать, поскольку у него уже есть этот языковой микс на месте –

+1

Это 95% - 99,99% истина, но не 100% истинная. Вот почему существует общая спецификация языка. Отметьте DLL как совместимую с CLS, и это должно гарантировать 100%, что вы можете назвать ее с любого языка CLS (например, VB.Net). http://stackoverflow.com/questions/2117776/mixing-vb-net-code-with-c-code/2117937#2117937 – MarkJ

+0

@Mark - спасибо, я явно не стреляю по всем цилиндрам сегодня. Полагаю, поэтому я не работаю. Во всяком случае, отредактировал ответ. –

3

Вы можете смешивать код VB и C# в одном проекте - я работал над несколькими проектами, которые их смешивали и не имеют проблем.

Вы, похоже, гораздо более изолированы от языкового сочетания - одно решение с несколькими DLL-библиотеками C# и проектом (-ами) vb.

Я не вижу много проблем с этим.

+6

Несомненно, вы имели в виду «такое же решение»? Смешивание в одном проекте не может работать. –

+0

Он может работать в проекте ASP.NET «Веб-сайт». –

+0

В одном проекте можно иметь два языка - просто не в том же файле. –

0

Я думаю, что большая опасность состоит в том, чтобы разработчик знал оба языка; в то время как C# и VB.NET похожи, потому что они связаны с платформой .NET, у них есть некоторые особенности.

Вы найдете много хороших C# программистов и много хороших программистов VB.NET, но может быть немного сложнее найти хороший программист для как языков

Кроме того, обратите внимание на эту статью: A Manager’s Retrospective on the C# versus VB.NET decision поскольку он говорит о других вещах, чтобы иметь в виду, как предпочтения разработчика, особенности языка и рекрутинг.

+0

Не я, а не другой программист, работающий над этим проектом, не знаю вообще языка vb. Поэтому мы действительно хотим перейти на C#. –

+0

вы можете ссылаться на сборки vb.net, как вы уже это делали, и попытаться выиграть время у своего босса, чтобы создать решение, которое использует один язык; вы можете обосновать, что говорить о производительности –

1

Одно решение было найдено here:

Однако можно использовать различных языков в одном проекте . Для создания проекта вам может понадобиться написать команду . В .NET framework SDK есть один образец . Вы можете получить к нему доступ в C: \ Program Files \ Microsoft Visual Studio . NET \ FrameworkSDK \ Образцы \ Технологии \ CrossDevLan guage.

Этот образец демонстрирует использование различных языков разработки в одном проекте . Этот образец создает две сборки. Первая - это библиотека или сборка DLL, которая определяет простой базовый класс , написанный в управляемых расширениях для C++.Вторая сборка представляет собой исполняемую сборку , которая определяет три производных класса , написанные на C#, VB и IL (промежуточный язык). Эти типы происходят друг от друга и в конечном итоге от базового класса, написанного на управляемом C++. Наконец, исполняемый файл создает экземпляров каждого из производных типов и вызывает виртуальный метод для каждого из них. .NET Framework - это среда , где различные разработчики могут работать вместе при разработке на своем языке по выбору.

Но вы можете использовать код VB.NET и C# внутри приложения asp.net.

Вам необходимо создать две папки (например, vbFolder и csFolder.) В папке App_Code и написать этот код в файле web.config:

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

Хорошее объяснение here.

0

Оба VB.NET & C# скомпилированы для не родного кода MSIL (Microsoft Intermediate Language), и это завершает полную компиляцию на native (machine) на компьютере конечного пользователя через существующую работу фрейма .NET, которая находится на конечный пользователь, поэтому, если это была .NET для операционной системы x, ваша программа должна отлично работать для операционной системы x, и если бы это была операционная система, ваше приложение должно работать нормально с OS y, и это решение, с которым идет технология .NET пусть операционная система .NET приложений работает в зависимости.

также существует служба COM-маршалера для поддержки старого компонента (элементов управления) для работы с приложениями .NET, например, вы можете вызвать элемент управления vb6 (* .ocx) в приложении Windows C#.

и это отличная интеграция между технологиями и технологиями Microsoft.

и нет необходимости иметь разработчиков хорошо в обоих VB.NET и C#, но и любой способ, если он вам нужен, я здесь :)

но возникает вопрос, почему я нахожусь в обоих?

это просто потому, что я доставляю обучение, поэтому я решил расширить свои способности, и я был удивлен, что они оба очень близки, кроме синтаксиса.

5

Отметьте свой код как совместимый с CLS, а затем компилятор C# предупредит вас, если вы сделаете все, что может вызвать проблемы, когда ваша DLL вызывается с другого языка .Net.

Некоторые цитаты из MSDN

Чтобы полностью взаимодействовать с другими объектами , независимо от языка, они были реализованного в объекты должны подвергать звонящих только те функции, которые общие для всех языков, которые они должны взаимодействовать с. По этой причине был определен Common Language Specification (CLS), который представляет собой набор базовых функций языка , необходимых для многих приложений .

Вы можете пометить сборки, модули, , а также члены как CLS-совместимые, используя CLSCompliantAttribute.

Некоторые языковые компиляторы CLS-совместимые, such as the C# compiler, позволяют указать, что вы собираетесь ваш код быть CLS-совместимыми. Эти компиляторы могут проверить соответствие CLS и сообщить вам, когда ваш код использует функциональность , который не поддерживается CLS.

Кроме того, вашей организации понадобятся навыки C#, а также навыки Vb.Net. Вы должны, вероятно, убедить себя, что все в порядке, а затем убедить ключевых лиц, принимающих решения.

Смежные вопросы