La fenêtre interactive C # peut-elle interagir avec mon code?

161

Dans Visual Studio 2015 ou version ultérieure, je peux ouvrir la `` fenêtre interactive C # '' et exécuter du code:

> 5 + 3
8

C'est mignon. Maintenant, comment puis-je interagir avec mon code - mes classes? Supposons que j'ai un projet ouvert.

> 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
la source
Roslyn n'est pas une fenêtre interactive. C'est l'API du compilateur .NET. Êtes-vous sûr de ne pas manquer les choses?
Tigran
3
Ceci est une fonctionnalité livrée avec Roslyn blogs.msdn.com/b/csharpfaq/archive/2012/01/30/…
Colonel Panic
J'utilise toujours la fenêtre Immédiat standard pour cela - fonctionne également avec vos propres types.
Polyfun
2
Qu'est-ce que la «fenêtre immédiate standard»?
Colonel Panic
@MattHickford Voir ma réponse mise à jour pour plus d'informations
paresseux

Réponses:

221

Lors de l'utilisation de Visual Studio 2015:

Vous pouvez ouvrir la fenêtre interactive en accédant à Vues> Autres fenêtres> C # Interactive ,

Ensuite, faites un clic droit sur votre projet et exécutez Initialize Interactive with Project à partir du menu contextuel.


Pour les anciennes versions:

Pour utiliser la fenêtre interactive C # avec votre code, assurez-vous de compiler d'abord votre code, puis ajoutez une référence à l'assembly résultant avec la #rcommande comme suit:

Invite de commandes C #


Vous pouvez également utiliser la fenêtre d' exécution pour interagir avec votre code, comme ceci:

Fenêtre immédiate

la paresse
la source
1
Merci. J'aime mieux la fenêtre interactive C #. La fenêtre immédiate n'est pas conviviale, il n'y a pas de saisie semi-automatique. 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
Colonel Panic
-1 la question concerne l'utilisation du nouveau C # REPL (fenêtre interactive) qui fait partie de roslyn. Jetez un œil aux vidéos c9 de Don Syme où il utilise la fenêtre interactive F # au fur et à mesure de son développement. Bon produit. channel9.msdn.com/Series/…
John Dhom
25
@JohnDhom Pourquoi le vote défavorable? Mes réponses montrent totalement comment interagir avec votre propre code via la fenêtre interactive C # (il y a même une capture d'écran le montrant).
paresseux
8
Dans les projets .Net Core, l'élément de menu contextuel n'apparaît pas, la méthode #r est donc requise. Cette réponse est parfaite pour cela.
Ryan
2
Je veux ajouter un autre conseil utile: si vous souhaitez utiliser des éléments d'exécution, vous pouvez facilement ajouter cette directive:#r "System.Runtime"
mostafa8026
70

Vous pouvez utiliser des classes de votre propre projet.
Faites un clic droit sur votre solution et sélectionnez "Réinitialiser Interactive à partir du projet".

Si vous avez besoin de plus d'informations, voici la source:
Utilisation de la fenêtre interactive C # fournie avec Roslyn - Partie 2

Botz3000
la source
1
Merci, cela semble juste. Hélas, cela ne fonctionne pas comme décrit - quel que soit le projet sur lequel j'essaye, il affiche une alerte d'erreur indiquant «nom d'assembly invalide». Frustrant, cela n'explique pas de quel assemblage il parle. Je suppose que le logiciel est cassé.
Colonel Panic
@MattHickford: Quel type de projet est le projet? Nous n'avons pas fait beaucoup de tests au-delà des simples applications console et des bibliothèques de classes.
Kevin Pilch
Merci d'avoir demandé à Kevin. Je viens d'essayer de «réinitialiser le projet interactif» sur certains projets plus petits, cela a bien fonctionné. Les projets pour lesquels il ne fonctionne pas de manière fiable sont des bibliothèques et des applications plus complexes avec de nombreuses références.
Colonel Panic
25
Rien de tout cela ne s'applique plus à VS 2015. La commande du menu contextuel a disparu et #rne trouve pas mes assemblys de projet. Des idées?
ygoe
18
Dans VS 2015 Update 3, il existe un `` Initialiser interactif avec le projet '' lorsque vous cliquez avec le bouton droit sur un projet dans la solution (dans l'Explorateur de solutions).
Andrei Pana
44

Juste une mise à jour de la réponse @ Botz3000.

La commande que vous souhaitez rechercher s'appelle désormais "Initialiser Interactive with Project"

entrez la description de l'image ici

Il est également intéressant de noter que je n'ai pas pu trouver cette commande si ma fenêtre interactive C # n'était pas visible.

Luke Hammer
la source
11
Non ce n'est pas. Je l'ai exactement au même endroit que le montre la capture d'écran.
Tom
3
@Tom, il semble fonctionner ou non en fonction du type de projet avec lequel vous travaillez. quel était le type de projet avec lequel vous travailliez lorsque vous l'avez trouvé?
Luke Hammer
@WizardHammer Je crois Bibliothèque de classe
Tom
10
J'essaie de faire fonctionner cela avec une bibliothèque NetStandard et l'option n'est pas là dans le menu contextuel
ChadT
15

Il convient de noter que la fonctionnalité n'est pas encore prise en charge dans VS 2019 pour le projet .Net Core.

Vous ne trouverez pas l'option, et c'est un problème connu comme souligné dans cette réponse « « Initialiser interactif avec Project »est manquant pour les projets .Net Core dans Visual Studio 2019 »

La solution de contournement consiste à utiliser la commande #r (#r "Path / MyDll.dll") pour charger l'assembly manuellement comme indiqué dans la réponse ci-dessus.

Mahmoud Hanafy
la source
11

Tout à fait d'accord "Initialiser Interactive avec Project" est cool.

Mon approche consiste à pousser les classes dans une bibliothèque et à utiliser // css_reference dans un script C # ou #r dans une fenêtre interactive C #

Par exemple:

#r "D:\\dev\\DbHMonData\\LoadH2Stats\\bin\\Debug\\DbHMonStats.dll"
using DbHMonStats;
beloblotskiy
la source