Может ли интерактивное окно C # взаимодействовать с моим кодом?


161

В Visual Studio 2015 или более поздней версии я могу открыть «интерактивное окно C #» и запустить код:

> 5 + 3
8

Это мило. Теперь, как я могу взаимодействовать с моим кодом - моими классами? Предположим, у меня есть открытый проект.

> new Cog()
(1,5): error CS0246: The type or namespace name 'Cog' could not be found (are you missing a using directive or an assembly reference?)

Рослин не является интерактивным окном. Это API компилятора .NET. Вы уверены, что не пропустили вещи?
Тигран

3
Это одна из функций, поставляемых с Roslyn blogs.msdn.com/b/csharpfaq/archive/2012/01/30/…
полковник Паник

Я всегда использую стандартное окно Immediate для этого - работает также с вашими собственными типами.
Polyfun

2
Что такое «стандартное немедленное окно»?
Полковник Паник

@MattHickford Смотрите мой обновленный ответ для получения дополнительной информации
ленивец

Ответы:


221

При использовании Visual Studio 2015:

Вы можете открыть интерактивное окно, перейдя в « Виды»> «Другие окна»> «Интерактивный C #» ,

Затем просто щелкните правой кнопкой мыши свой проект и запустите Initialize Interactive with Project из контекстного меню.


Для более старых версий:

Чтобы использовать интерактивное окно C # с вашим кодом, убедитесь, что вы сначала скомпилировали свой код, а затем добавили ссылку на получившуюся сборку с помощью #rкоманды следующим образом:

Командная строка C #


Вы также можете использовать Immediate Window для взаимодействия с вашим кодом, например, так:

Немедленное окно


1
Спасибо. Мне больше нравится интерактивное окно C #. Непосредственное окно недружелюбно, автозаполнения нет. Console.WriteLine("hey") The name 'Console' does not exist in the current context System.Console.WriteLine("hey") Expression has been evaluated and has no value
полковник Паник

-1 вопрос об использовании нового C # REPL (интерактивного окна), которое является частью roslyn. Посмотрите видео c9 Дона Сайма, где он использует интерактивное окно F # по мере своего развития. Хорошая вещь. channel9.msdn.com/Series/…
Джон Дом

25
@JohnDhom Почему понижающий голос? Мои ответы полностью показывают, как взаимодействовать с вашим собственным кодом через интерактивное окно C # (есть даже скриншот, показывающий это).
ленивец

8
В проектах .Net Core пункт контекстного меню не появляется, поэтому требуется метод #r. Этот ответ идеально подходит для этого.
Райан

2
Я хочу добавить еще одну полезную подсказку: если вы хотите использовать некоторые вещи во время выполнения, вы можете легко добавить эту директиву:#r "System.Runtime"
mostafa8026

70

Вы можете использовать классы из вашего собственного проекта.
Просто щелкните правой кнопкой мыши свое решение и выберите «Сбросить Интерактив из Проекта».

Если вам нужна дополнительная информация, вот источник:
Использование интерактивного окна C #, которое поставляется с Roslyn - Часть 2


1
Спасибо, это звучит правильно. Увы, он не работает так, как описано - в любом проекте, на котором я это пробую, появляется предупреждение об ошибке «Недопустимое имя сборки». К сожалению, это не объясняет, о какой сборке идет речь. Я думаю, что программное обеспечение сломано.
Полковник Паник

@MattHickford: какой тип проекта? Мы не провели большого тестирования, кроме простых ConsoleApplications и ClassLibraries.
Кевин Пилч

Спасибо, что спросили Кевина. Я только что попробовал «сбросить интерактив из проекта» в некоторых небольших проектах, он работал правильно. Надежные проекты, для которых он не работает, представляют собой более сложные библиотеки и приложения со многими ссылками.
полковник Паник

25
Ничто из этого больше не относится к VS 2015. Команда контекстного меню пропала и #rне находит мои сборки проекта. Любые идеи?
ygoe

18
В VS 2015, обновление 3, при щелчке правой кнопкой мыши проекта в решении (в обозревателе решений) появляется «Инициализировать интерактив с проектом».
Андрей Пана

44

Просто обновление от ответа @ Botz3000.

Команда, которую вы хотите найти, теперь называется «Инициализировать интерактив с проектом»

введите описание изображения здесь

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


11
Нет, это не так. Я получил его точно в том же месте, как показано на скриншоте.
Том

3
@ Кажется, он работает или не работает в зависимости от типа проекта, с которым вы работаете. с каким типом проекта вы работали, когда нашли его?
Люк Хаммер

@WizardHammer Я полагаю, библиотека классов
Том

10
Я пытаюсь заставить это работать с библиотекой NetStandard, а опция отсутствует в контекстном меню
ChadT

15

Стоит отметить, что эта функция еще не поддерживается в VS 2019 для проекта .Net Core.

Вы не найдете эту опцию, и это известная проблема, выделенная в этом ответе «Отсутствует инициализация интерактивной работы с Project» для .Net Core Projects в Visual Studio 2019 »

Обходной путь должен использовать команду #r (#r "Path / MyDll.dll"), чтобы загрузить сборку вручную, как показано в ответе выше.


11

Полностью согласен, что "Initialize Interactive with Project" - это круто.

Мой подход заключается в том, чтобы поместить классы в библиотеку и использовать // css_reference в скрипте C # или #r в интерактивном окне C #

Например:

#r "D:\\dev\\DbHMonData\\LoadH2Stats\\bin\\Debug\\DbHMonStats.dll"
using DbHMonStats;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.