Смешивание кода VB.Net и C # в проекте веб-сайта ASP.Net?

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

Q1. Законно ли смешивать код C # и VB.Net на веб-сайте ASP.Net? Подействует или нет? Если это работает, как это можно сделать? Любой образец будет хорош.

Q2. Если есть какие-либо последствия смешивания кода C # и VB.Net, пожалуйста, поделитесь ими.

У меня есть веб-проект, написанный на VB.Net. Я работаю над одним модулем проекта. и я хочу писать код на C #. Я не могу преобразовать весь проект на C #, потому что я не единственный, кто работает над ним. Однако модуль, который я собираюсь построить, я хочу, чтобы он был построен на C #.

Я слышал, что в случае веб-проектов, если мы кодируем часть на C # и часть на VB.net, тогда возникают проблемы с компиляцией проекта в dll. Это правда? если да, то каково решение.

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


person Steve Johnson    schedule 26.02.2010    source источник


Ответы (3)


Из http://msdn.microsoft.com/en-us/library/t990ks23.aspx:

Несколько языков программирования в папке App_Code

Поскольку исходный код в папке App_Code скомпилирован в единую сборку, все файлы в папке App_Code должны быть на одном языке программирования. Например, папка App_Code не может включать исходный код как на Visual Basic, так и на C #.

Однако вы можете настроить свое веб-приложение для обработки вложенных папок папки App_Code как отдельных компилируемых единиц. Каждая папка может содержать исходный код на другом языке программирования. Конфигурация задается путем создания элемента codeSubDirectories в элементе компиляции файла Web.config и добавления ссылки на подпапку. В следующем примере показано, как настроить вложенные папки с именами VBCode и CSCode для компиляции в отдельные сборки:

<compilation debug="false">
    <codeSubDirectories>
        <add directoryName="VBCode" />
        <add directoryName="CSCode" />
    </codeSubDirectories>
</compilation>

Ссылки на подпапки VBCode и CSCode не должны включать какую-либо информацию о том, какой язык программирования содержится в подпапке. Как и в случае с самой папкой App_Code, ASP.NET определяет, какой компилятор использовать, на основе файлов в подпапке.

person Gabe    schedule 26.02.2010
comment
Данное решение работает для проекта веб-САЙТА. Однако Стив спросил о проекте веб-приложения, в котором папки app_code не используются. - person Axeva; 01.12.2011

Ответ, набравший наибольшее количество голосов, работает только для проектов веб-сайтов, а не для проектов веб-приложений. Я думаю, что многие разработчики используют термин «веб-приложение» в целом, игнорируя тот факт, что технически это другое дело в .NET. Microsoft сообщает: «По умолчанию веб-приложение компилируется на основе языковых настроек в файле проекта. Могут быть сделаны исключения, но это относительно сложно». Итак, я предполагаю, что единственный способ сделать это - иметь два отдельных проекта в одном решении. (Опять же, у проекта веб-сайта нет решения или файла проекта.) Я не уверен во всех деталях.

person user692918    schedule 04.08.2011
comment
(Опять же, у проекта веб-сайта нет решения или файла проекта.) На самом деле он может иметь файл решения (VS может даже предложить вам его сохранить), но да, у него нет проекта. - person Sören Kuklau; 27.11.2011
comment
@ user692918: +1, Исправлено название и содержание. У меня было решение с проектом веб-сайта с несколькими другими проектами. - person Steve Johnson; 07.11.2012
comment
Подходит ли вышеуказанное решение для проекта веб-приложения? У меня есть большое веб-приложение с несколькими проектами. Я собираюсь добавить новые изменения в C # с тем же веб-проектом и другими проектами библиотеки классов. Это работает для меня? - person Mayur Borad; 09.04.2014

Кажется, вы можете смешивать их в одном проекте, если вы выполняете фрагмент кода, который вам нужен в качестве элемента управления. Итак, если основной сайт находится на C #, и вы выполняете ту часть VB, которую хотите в качестве элемента управления ascx, вы можете перетащить ее на свой сайт.

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

person Leroy    schedule 02.11.2010