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


можно ли смешивать файлы vb и c# в одном проекте для библиотеки классов? Есть ли какие-то настройки, которые делают это возможным?

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

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

17 132

17 ответов:

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

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

Edit: если добавить a .файл vb в проект C#, выберите файл на панели обозревателя решений, а затем посмотрите на панель свойств, вы заметите, что действие сборки-это "содержимое", а не "компиляция". Он обрабатывается как простой текстовый файл и даже не внедряется в скомпилированную сборку как двоичный ресурс.

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

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

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

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

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

у меня есть как ссылка на VB, так и компилятор C# в

<system.codedom>
    <compilers>

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

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

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

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

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

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

Не то, чтобы это было тривиальным усилием, но это, вероятно будет работать.

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

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

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

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

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

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

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

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

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

где MyClassName-это объект класса, найденный в пространстве имен выше. теперь выпишите объект в razor с помощью файла cshtml.

<p>@Model.FirstName</p>

пожалуйста обратите внимание, что directoryName= "CSCodeFiles" является избыточным, если это проект C#, а directoryName= "VBCodeFiles" является избыточным, если это VB.Net проект.

Да это возможно.добавление c# и vb.net проекты в единое решение.

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

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

Шаг 3: In vb.net форма, в которой вы хотите использовать C# forms->import namespace of project.

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

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

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

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

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

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

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

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

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

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