Czy okno interaktywne C # może współdziałać z moim kodem?

161

W programie Visual Studio 2015 lub nowszym mogę otworzyć interaktywne okno C # i uruchomić kod:

> 5 + 3
8

To słodkie. Jak mogę teraz korzystać z mojego kodu - moich zajęć? Załóżmy, że mam otwarty projekt.

> 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?)
Colonel Panic
źródło
Roslyn nie jest oknem interaktywnym. Jest to API kompilatora .NET. Czy na pewno nie przegapisz rzeczy?
Tigran,
3
To jest jedna funkcja dostarczana z Roslyn blogs.msdn.com/b/csharpfaq/archive/2012/01/30/ ...
Colonel Panic
Zawsze używam do tego standardowego okna natychmiastowego - działa również z Twoimi własnymi typami.
Polyfun
2
Co to jest „standardowe okno natychmiastowe”?
Panika pułkownika,
@MattHickford Zobacz moją zaktualizowaną odpowiedź, aby uzyskać więcej informacji
lenistwo

Odpowiedzi:

221

W przypadku korzystania z programu Visual Studio 2015:

Możesz otworzyć okno interaktywne, przechodząc do widoków> inne okna> C # interaktywne ,

Następnie kliknij prawym przyciskiem myszy swój projekt i uruchom Initialize Interactive with Project z menu kontekstowego.


W przypadku starszych wersji:

Aby użyć interaktywnego okna C # z kodem, upewnij się, że najpierw skompilujesz kod, a następnie dodaj odwołanie do wynikowego zestawu za pomocą następującego #rpolecenia:

Wiersz polecenia C #


Możesz również użyć okna bezpośredniego do interakcji z kodem, na przykład:

Bezpośrednie okno

Leniwiec
źródło
1
Dzięki. Bardziej podoba mi się okno interaktywne C #. Bezpośrednie okno jest nieprzyjazne, nie ma autouzupełniania. 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
Panika pułkownika
-1 pytanie dotyczy używania nowego C # REPL (okno interaktywne), które jest częścią Roslyn. Spójrz na filmy c9 Don Syme'a, w których używa on interaktywnego okna F # w miarę rozwoju. Dobry towar. channel9.msdn.com/Series/…
John
25
@JohnDhom Why the downvote? Moje odpowiedzi całkowicie pokazują, jak współdziałać z własnym kodem za pośrednictwem interaktywnego okna C # (jest nawet pokazujący to zrzut ekranu).
lenistwo
8
W projektach .Net Core pozycja menu kontekstowego nie pojawia się, więc wymagana jest metoda #r. Ta odpowiedź jest do tego idealna.
Ryan
2
Chcę dodać jeszcze jedną przydatną wskazówkę: jeśli chcesz użyć pewnych rzeczy w czasie wykonywania, możesz łatwo dodać tę dyrektywę:#r "System.Runtime"
mostafa8026
70

Możesz użyć klas z własnego projektu.
Kliknij prawym przyciskiem myszy rozwiązanie i wybierz opcję „Resetuj elementy interaktywne z projektu”.

Jeśli potrzebujesz więcej informacji, oto źródło:
Używanie interaktywnego okna C #, które jest dostarczane z Roslyn - część 2

Botz3000
źródło
1
Dzięki, to brzmi dobrze. Niestety, nie działa to zgodnie z opisem - niezależnie od projektu, w którym go wypróbuję, wyskakuje alert o błędzie mówiący „nieprawidłowa nazwa zespołu”. Frustrujące jest to, że nie wyjaśnia, o czym mówi montaż. Myślę, że oprogramowanie jest zepsute.
Panika pułkownika,
@MattHickford: Jakiego rodzaju jest projekt? Nie wykonaliśmy zbyt wielu testów poza prostymi aplikacjami ConsoleApplications i bibliotekami klas.
Kevin Pilch
Dzięki, że zapytałeś Kevina. Właśnie próbowałem `` zresetować interaktywność z projektu '' w niektórych mniejszych projektach, działało dobrze. Projekty, w których nie działa niezawodnie, to bardziej skomplikowane biblioteki i aplikacje z wieloma odniesieniami.
Panika pułkownika
25
Nic z tego nie dotyczy już VS 2015. Polecenie menu kontekstowego zniknęło i #rnie znajduje moich zestawów projektu. Jakieś pomysły?
ygoe
18
W VS 2015 Update 3 po kliknięciu projektu prawym przyciskiem myszy w rozwiązaniu (w Eksploratorze rozwiązań) znajduje się opcja „Zainicjuj interaktywne z projektem”.
Andrei Pana
44

Tylko aktualizacja z odpowiedzi @ Botz3000.

Polecenie, które chcesz znaleźć, nazywa się teraz „Zainicjuj interaktywne z projektem”

wprowadź opis obrazu tutaj

Warto również zauważyć, że nie mogłem znaleźć tego polecenia, jeśli moje interaktywne okno C # nie było widoczne.

Luke Hammer
źródło
11
Nie, nie jest. Mam to dokładnie w tym samym miejscu, na które wskazuje zrzut ekranu.
Tom
3
@Tom wydaje się działać lub nie w zależności od typu projektu, nad którym pracujesz. z jakim typem projektu pracowałeś, kiedy go znalazłeś?
Luke Hammer
@WizardHammer Wierzę, że biblioteka klasowa
Tom
10
Próbuję zmusić to do pracy z biblioteką NetStandard, a opcji nie ma w menu kontekstowym
ChadT
15

Warto zauważyć, że ta funkcja nie jest jeszcze obsługiwana w VS 2019 dla projektu .Net Core.

Nie znajdziesz tej opcji i jest to znany problem, jak podkreślono w tej odpowiedzi. Brakuje „Zainicjuj interakcję z projektem” dla projektów .Net Core w programie Visual Studio 2019

Sposób obejścia problemu polega na użyciu polecenia #r (#r „Path / MyDll.dll”) w celu ręcznego załadowania zestawu, jak pokazano w powyższej odpowiedzi.

Mahmoud Hanafy
źródło
11

Całkowicie zgadzam się, że „Zainicjuj interaktywne z projektem” jest fajne.

Moje podejście polega na wypchnięciu klas do biblioteki i użyciu // css_reference w skrypcie C # lub #r w C # oknie interaktywnym

Na przykład:

#r "D:\\dev\\DbHMonData\\LoadH2Stats\\bin\\Debug\\DbHMonStats.dll"
using DbHMonStats;
beloblotskiy
źródło