Можете ли вы смешать файлы VB и C # в одном проекте для библиотеки классов? Есть ли какая-то настройка, которая делает это возможным?
Я попытался, и ни один из intellisense не работает совершенно правильно, хотя фоновый компилятор, кажется, справляется с этим достаточно хорошо (за исключением того факта, что у меня было 2 класса в одном пространстве имен с одинаковым именем, и он не жаловался).
Мы пытаемся конвертировать из VB в C #, но не завершили конвертацию всего кода. У меня есть новый код, который мне нужно написать, но я действительно не хотел делать новый проект только для него.
Ответы:
Нет, ты не можешь. Сборка / проект (каждый проект обычно компилируется в 1 сборку) должен быть одним языком. Однако вы можете использовать несколько сборок, каждая из которых может быть закодирована на другом языке, потому что все они скомпилированы в MSIL.
Он скомпилирован нормально и не жаловался, потому что проект VB.NET на самом деле компилирует только файлы .vb, а проект C # на самом деле компилирует только файлы .cs. Он игнорировал другие, поэтому вы не получили ошибок.
Редактировать: если вы добавляете файл .vb в проект C #, выберите этот файл на панели обозревателя решений, а затем посмотрите на панель «Свойства», и вы заметите, что действие «Построение» - это «Содержимое», а не «Компиляция». Он рассматривается как простой текстовый файл и даже не внедряется в скомпилированную сборку как бинарный ресурс.
Изменить: На сайтах asp.net вы можете добавить пользовательский элемент управления c # на сайт vb.net
источник
Ну, на самом деле я унаследовал проект несколько лет назад от коллеги, который решил смешать веб-формы VB и C # в одном проекте. Это сработало, но поддерживать это далеко не весело.
Я решил, что новый код должен быть классами C #, и чтобы заставить их работать, мне пришлось добавить подузел в часть компиляции web.config
Весь код VB помещается в подпапку в App_Code с именем VB, а код C # - в подпапку CS. Это даст два DLL-файла. Это работает, но код компилируется в том же порядке, который указан в "codeSubDirectories", и, следовательно, интерфейсы должны быть в папке VB, если они используются как в C #, так и в VB.
У меня есть ссылка на компилятор VB и C # в
В настоящее время проект обновлен до фреймворка 3.5, и он все еще работает (но поддерживать его все равно неинтересно)
источник
Вы не можете смешивать vb и c # в одном проекте - если вы заметили, что в Visual Studio файлы проекта - это .vbproj или .csproj. Вы можете в рамках решения - иметь 1 проект в 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. Поставляемые .targets заставляют проекты быть на одном языке - но нет ограничений времени выполнения или инструментария, предотвращающих это.
Оба компилятора VB и CS могут выводить данные в модули - CLR-версию файлов .obj. Используя компоновщик сборки, вы можете взять модули из кода VB и CS и создать одну сборку.
Не то чтобы это было тривиальным усилием, но это, вероятно, сработало бы.
источник
Пошаговое руководство. Использование нескольких языков программирования в проекте веб-сайта http://msdn.microsoft.com/en-us/library/ms366714.aspx
источник
Хотя Visual Studio не поддерживает это (вы можете сделать некоторые трюки и заставить MSBuild скомпилировать оба, но не из Visual Studio), SharpDevelop делает. Вы можете использовать оба в одном решении (если вы используете Visual Studio Professional и выше), поэтому самое простое решение, если вы хотите продолжать использовать Visual Studio, - это разделить код VB в другой проект и получить к нему доступ таким образом.
источник
Щелкните правой кнопкой мыши Проект. Выберите Добавить папку Asp.Net. В папке «Папка» создайте две папки: одну с именем VBCodeFiles, а другую - «CSCodeFiles». В Web.Config добавьте новый элемент при компиляции.
Теперь создайте страницу cshtml. Добавьте ссылку на VBCodeFiles.Namespace.MyClassName, используя
Где MyClassName - объект класса, найденный в пространстве имен выше. Теперь выпишите объект в бритву, используя файл cshtml.
Обратите внимание, что directoryName = "CSCodeFiles" является избыточным, если это проект C #, а directoryName = "VBCodeFiles" является избыточным, если это проект VB.Net.
источник
Да, это возможно. Добавление проектов c # и vb.net в одно решение.
шаг1: Файл-> Добавить-> Существующий проект
Шаг 2: Project-> Add reference-> dll или exe проекта, который вы добавили ранее.
Шаг 3: В форме vb.net, где вы хотите использовать c # forms-> import namespace проекта.
источник
Я не понимаю, как вы можете скомпилировать проект с помощью компилятора C # (или VB-компилятора) и не допустить его несоответствия языку компилятора.
Храните ваш код C # в отдельном проекте от вашего проекта VB. Вы можете включить эти проекты в одно и то же решение.
источник
Вам нужен один проект на язык. Я совершенно уверен, что видел инструмент, объединяющий сборки, если вы найдете этот инструмент, вам стоит поработать. Если вам нужно использовать оба языка в одном и том же классе, вы сможете написать половину из них, скажем, на VB.net, а затем написать остальные на C #, наследуя класс VB.net.
источник
С риском повторения любого другого ответа, нет, вы не можете смешивать их в одном проекте.
Кроме того, если вы только что завершили конвертацию VB в C #, зачем писать новый код на VB?
источник
Для .net 2.0 это работает. Он скомпилирует оба в одном проекте, если вы создаете подкаталоги в коде приложения с кодом соответствующего языка. На данный момент я ищу, должно ли это работать в 3.5 или нет, хотя.
источник
Почему бы вам просто не скомпилировать свой
VB
код в библиотеку (.dll
). Ссылка на него позже из вашего кода и все. Управляетсяdlls
контентом,MSIL
к которому обаc#
иvb
компилируются.источник
Как уже говорили другие, вы не можете поместить оба в один проект. Однако, если у вас есть небольшой фрагмент кода на C # или VB, который вы хотите включить в проект на другом языке, есть инструменты автоматического преобразования . Они не идеальны, но делают большинство вещей довольно хорошо. Кроме того, SharpDevelop имеет встроенную утилиту преобразования.
источник
Нет, не в одном проекте. Но вы можете использовать их в одном решении. хотя вам нужно позаботиться о том, чтобы ваш код соответствовал CLS. Это означает, что вы не должны использовать такую функциональность / функцию, которую не понимает другой язык. Например, VB не понимает целые числа без знака.
источник
В нашем сценарии это один проект VB.NET (приложение Windows Desktop) в одном решении. Однако мы хотели воспользоваться возможностями C #, такими как целые числа со знаком / без знака, литералы XML и строковые функции в VB.NET. Таким образом, в зависимости от функций, во время выполнения мы создаем файл кода, компилируем с использованием соответствующего компилятора Rosalyn (VB / CS) в DLL и динамически загружаем в текущую сборку. Конечно, нам пришлось работать над разделением, выгрузкой, перезагрузкой, именованием и т. Д. Динамических библиотек DLL и управлением памятью, где мы в основном использовали динамический GUID для именования, чтобы избежать конфликта. Это прекрасно работает, когда пользователь приложения может подключиться к любой БД из нашего настольного приложения, написать запрос SQL, преобразовать соединение в соединение LINQ и также написать запросы LINQ, что требует динамического построения исходного кода, компиляции в DLL и присоединения к текущей сборке.
источник
Да, вы можете добавить оба файла только на веб-сайте. Если проект является веб-приложением, он не разрешит использовать файлы другого типа.
источник