2010-02-26 2 views
23

Вопрос довольно старый и часто спрашиваемый, у меня есть подобные вопросы, но мой вопрос немного конкретнее.Смешивание кода 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?

ответ

49

От 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 передает компилятор для использования на основе файлов в подпапке.

+3

+1. хороший ответ... –

+7

Данное решение работает для веб-проекта SITE. Однако Стив спросил о проекте web APPLICATION, который не использует папки app_code. – Axeva

+0

WHAT THE GENIUS .... +10000 –

0

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

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

8

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

+1

"(Опять же, проект веб-сайта не имеет решения или файла проекта.)« Он * может * иметь файл решения, фактически (VS может даже предложить вам его сохранить), но да, у него нет проекта. –

+0

@ user692918: +1, Исправлена ​​ошибка с заголовком и содержанием. У меня было решение с проектом веб-сайта с несколькими другими проектами. –

+0

Выше решения работает для проекта веб-приложений? У меня есть большое веб-приложение с несколькими проектами. Я собираюсь добавить новые изменения в C# с тем же веб-проектом и другими библиотечными проектами класса. Это работает для меня? –

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