Смешивание С# и VB в том же проекте

Можете ли вы смешать vb и С# файлы в одном проекте для библиотеки классов? Возможна ли настройка?

Я попытался, и ни один из intellisense не работает правильно, хотя фоновый компилятор, похоже, справляется с этим достаточно хорошо (кроме того, что у меня тогда было 2 класса в одном и том же пространстве имен с тем же именем, жаловаться).

Мы пытаемся конвертировать из VB в С#, но не закончили, конвертируя весь код. У меня есть новый код, который мне нужно написать, но на самом деле не хотел создавать для него новый проект.

Ответ 1

Нет, вы не можете. Сборка/проект (каждый проект обычно составляет 1 сборку) должен быть одним языком. Однако вы можете использовать несколько сборок, и каждый может быть закодирован на другом языке, потому что все они скомпилированы в MSIL.

Он скомпилировался отлично и не жаловался, потому что проект VB.NET будет только на самом деле компилировать .vb файлы, а проект С# будет фактически компилировать файлы .cs. Он игнорировал другие, поэтому вы не получили ошибок.

Изменить: Если вы добавите файл .vb в проект С#, выберите файл в панели Solution Explorer, а затем перейдите на панель "Свойства", вы заметите, что действие сборки - Content ', а не' Compile '. Он рассматривается как простой текстовый файл и даже не внедряется в скомпилированную сборку в виде двоичного ресурса.

Изменить: С веб-сайтами asp.net вы можете добавить пользовательский элемент управления С# на веб-сайт vb.net

Ответ 2

Ну, на самом деле я унаследовал проект несколько лет назад от коллеги, который решил смешивать веб-формы VB и С# в рамках одного и того же проекта. Это сработало, но далеки от удовольствия.

Я решил, что новый код должен быть классами С# и заставить их работать. Мне пришлось добавить поднод в часть компиляции web.config

        <codeSubDirectories>
            <add directoryName="VB"/>
            <add directoryName="CS"/>
        </codeSubDirectories>

Все VB-коды попадают в подпапку в App_Code, называемую VB, и код С# в подкаталог CS. Это приведет к созданию двух DLL файлов. Он работает, но код компилируется в том же порядке, что и в "codeSubDirectories", и поэтому i.e Интерфейсы должны находиться в папке VB, если они используются как в С#, так и в VB.

У меня есть ссылка на VB и компилятор С# в

<system.codedom>
    <compilers>

В настоящее время проект обновлен до версии 3.5, и он по-прежнему работает (но до сих пор не забавно поддерживать.)

Ответ 3

Вы не можете смешивать vb и С# в одном проекте - если вы заметили в visual studio, файлы проекта либо .vbproj, либо .csproj. Вы можете в пределах решения - иметь 1 proj в vb и 1 в С#.

Похоже, в соответствии с этим вы можете использовать их как в веб-проекте в каталоге App_Code:

http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx

Ответ 4

Это может быть возможно с помощью некоторой пользовательской разработки MSBuild. Поставляемые .targets заставляют проекты быть единым языком, но не существует ограничений времени выполнения или инструментария, предотвращающих это.

Оба компилятора VB и CS могут выводить на модули - версию CLOB файлов .obj. Используя компоновщик компоновки, вы можете взять модули из кода VB и CS и создать единую сборку.

Не то, чтобы это было сложным, но, вероятно, это сработало.

Ответ 5

Пошаговое руководство. Использование нескольких языков программирования в проекте веб-сайта http://msdn.microsoft.com/en-us/library/ms366714.aspx

По умолчанию папка App_Code не поддерживает несколько языков программирования. Однако в проекте веб-сайта вы можете изменить структуру папок и параметры конфигурации для поддержки нескольких языков программирования, таких как Visual Basic и С#. Это позволяет ASP.NET создавать несколько сборок, по одной для каждого языка. Для получения дополнительной информации см. Общие папки кода в веб-проектах ASP.NET. Разработчики обычно включают несколько языков программирования в веб-приложения для поддержки нескольких групп разработчиков, которые работают независимо и предпочитают разные языки программирования.

Ответ 6

Проверьте эту ссылку, в которой обсуждается проблема, и показано, как комбинировать код VB и С# в одном проекте, в .NET 4.0

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

Ответ 7

Хотя Visual Studio не поддерживает это (вы можете сделать некоторые трюки и заставить MSBuild скомпилировать оба, но не из Visual Studio), SharpDevelop делает. Вы можете иметь как в одном решении (пока вы работаете с Visual Studio Professional и выше), поэтому самое простое решение, если вы хотите использовать Visual Studio, - это разделить ваш код VB на другой проект и получить доступ к нему таким образом.

Ответ 8

Щелкните правой кнопкой мыши проект. Выберите Добавить папку Asp.Net. В папке создайте две папки с именем VBCodeFiles и другими CSCodeFiles В Web.Config добавьте новый элемент в компиляцию

<compilation debug="true" targetFramework="4.5.1">
      <codeSubDirectories>
        <add directoryName="VBCodeFiles"/>
        <add directoryName="CSCodeFiles"/>
      </codeSubDirectories>
</compilation>

Теперь создайте страницу cshtml. Добавьте ссылку на имя VBCodeFiles.Namespace.MyClassName, используя

@using DMH.VBCodeFiles.Utils.RCMHD
@model MyClassname

Где MyClassName - это объект класса, найденный в пространстве имен выше. теперь выпишите объект в бритве, используя файл cshtml.

<p>@Model.FirstName</p>

Обратите внимание: каталогName = "CSCodeFiles" является избыточным, если это проект С#, а directoryName = "VBCodeFiles" избыточен, если это проект VB.Net.

Ответ 9

Да, его возможные.доменные проекты С# и vb.net в одно решение.

step1: Файл- > Добавить- > Существующий проект

Шаг 2: Project- > Добавить ссылку- > dll или exe проекта, который u добавил ранее.

step3: В форме vb.net, где вы хотите использовать С# forms- > import namespace проекта.

Ответ 10

Я не вижу, как вы можете скомпилировать проект с компилятором С# (или компилятором VB) и не заставлять его отказываться от неправильного языка для компилятора.

Сохраните код С# в отдельном проекте из проекта VB. Вы можете включить эти проекты в одно и то же решение.

Ответ 11

Вам нужен один проект на каждый язык. Я вполне уверен, что увидел инструмент, который объединил сборки, если вы найдете этот инструмент, вам нужно идти хорошо. Если вам нужно использовать оба языка в одном классе, вы должны будете написать половину его в разделе VB.net, а затем записать остальные в С#, наследуя класс VB.net.

Ответ 12

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

В стороне, если вы только что закончили преобразовывать VB в С#, зачем писать новый код в VB?

Ответ 13

                     

Для .net 2.0 это работает. Он компилируется как в том же проекте, если вы создаете подкаталоги в коде приложения с соответствующим кодом языка. На данный момент я ищу, будет ли это работать в версии 3.5 или нет.

Ответ 14

Почему бы вам просто не скомпилировать ваш код VB в библиотеку (.dll). Ссылка на него позже из вашего кода и его. Управляемый dlls содержит MSIL, скомпилированный как c#, так и VB.

Ответ 15

Как говорили другие, вы не можете поставить оба в одном проекте. Однако, если у вас есть только небольшой фрагмент кода С# или VB, который вы хотите включить в проект на другом языке, есть автоматические инструменты преобразования. Они не идеальны, но они делают все очень хорошо. Кроме того, SharpDevelop содержит встроенную утилиту преобразования.

Ответ 16

Нет, не в том же проекте. Но вы можете использовать их в одном решении. хотя вам необходимо позаботиться о том, чтобы ваш код соответствовал CLS. Это означает, что вы не должны использовать такие функции/функции, которые не понимаются другим языком. Например, VB не понимает unsigned ints.

Ответ 17

В нашем сценарии это один проект VB.NET (приложение для рабочего стола Windows) в одном решении. Однако мы хотели воспользоваться преимуществами С#, такими как целые числа со знаком/без знака, литералы XML и строковые функции в VB.NET. Таким образом, в зависимости от функций, во время выполнения мы создаем файл кода, компилируем с использованием соответствующего компилятора Rosalyn (VB/CS) в DLL и динамически загружаем в текущую сборку. Конечно, нам приходилось работать над разделением, выгрузкой, перезагрузкой, именованием и т.д. Динамических библиотек DLL и управлением памятью, когда мы в основном использовали динамический GUID для именования, чтобы избежать конфликта. Он отлично работает, когда пользователь приложения может подключиться к любой БД из нашего настольного приложения, написать запрос SQL, преобразовать подключение в соединение LINQ и также написать запросы LINQ, что требует динамического построения исходного кода, компиляции в DLL и присоединения к текущей сборке.

Ответ 18

Да, вы можете добавить оба файла только на веб-сайт. Если проект является веб-приложением, он не разрешает использовать другой тип файла.