Смешивание С# и 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
Да, вы можете добавить оба файла только на веб-сайт. Если проект является веб-приложением, он не разрешает использовать другой тип файла.