2012-06-06 13 views

Odpowiedz

3

Jest to obecnie możliwe (prawdopodobnie na czas zadawania tego pytania). Wystarczy utworzyć plik LoadConfig.csx z następujących czynności:

#r "System.Configuration" 

using System; 
using System.IO; 
using System.Linq; 


var paths = new[] { Path.Combine(Environment.CurrentDirectory, "Web.config"), Path.Combine(Environment.CurrentDirectory, "App.config") }; 
var configPath = paths.FirstOrDefault(p => File.Exists(p)); 

if (configPath != null) 
{ 
    // Set new configuration path 
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath); 

    // Reset current configuration load state 
    var t = typeof(System.Configuration.ConfigurationManager); 
    var f = t.GetField("s_initState", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); 
    f.SetValue(null, 0); 
} 

Zapisz plik gdzieś będziesz pamiętać i powrócić do projektu, który chcesz załadować w visual studio. Kliknij projekt prawym przyciskiem myszy i wybierz "Zresetuj C# Interactive z Project". Po zakończeniu działania interaktywnego okna ładowania C#: wywołanie:

#load "C:\path\to\LoadConfig.csx" 

UWAGA: Musisz zadzwonić natychmiast po załadowaniu projektu. Jeśli przed załadowaniem tego skryptu wystąpią jakiekolwiek wyszukiwania konfiguracji, ten skrypt przestanie działać.

Teraz interaktywne okno C# powinno mieć dostęp do ustawień projektu.

+1

Ciekawe, czy to działa dla kogokolwiek innego? Wydaje się nie działać dla mnie. Jest to tragedia, ponieważ renderuje wszystkie zestawy, które pobierają, powiedzmy, informacje o łańcuchach połączenia z pliku konfiguracyjnego jako niepoprawne z interaktywnego okna C#. To może być takie użyteczne narzędzie i od tej pory jest dla mnie prawie bezużyteczne. – esmoore68

+0

Nie działa również dla mnie. Używam Visual Studio 2017 – Jalal

4

Nie ma sposobu, aby zrobić to teraz, choć jest to coś, o czym myślimy w przyszłości.

W międzyczasie, czy możesz zinterpretować swój kod, aby wziąć ciąg połączenia jako parametr i po prostu przekazać go do metody w oknie interaktywnym?

+1

Dzięki Kevin, właśnie to zrobiłem. Mam nadzieję, że funkcjonalność .config sprawi, że będzie on wersją przyszłą REPL, ponieważ napotkam spory kawałek kodu, który ma zależności od pliku konfiguracyjnego. BTW - Jestem wielkim fanem tego, co robisz z Roslyn, to kołysze! – Stuart

+1

Jedna rzecz, którą chciałbym dodać: Posiadanie czegoś takiego jak język skryptowy C# może zastąpić takie rzeczy jak pliki .config i może być zastosowane do wtrysku zależności ogólnie. Wyobraź sobie, że plik skryptowy jest wdrażany za pomocą pliku binarnego, a po uruchomieniu może wykonać skrypt i załadować wszystko, co powróci do menedżera konfiguracji ConfigurationManager lub cokolwiek innego. Wstrzyknięcie zależne będzie działało podobnie, wystarczy wywołać skrypt, aby określić, który konstruktor/właściwości musi zostać wywołany, aby utworzyć instancję danego obiektu. Zasadniczo, + 1M zagłosuje na plik .config w Roslyn (to krok dla dziecka w dobrym kierunku). – gzak

1

Już przyjęta odpowiedź nie zadziałała; na podstawie komentarzy do zaakceptowanej odpowiedzi nie działało również dla 2 innych osób. Poniższe rozwiązanie działało dla mnie.

  1. Zaktualizuj plik konfiguracyjny C# interaktywnej (REPL), który znajduje się w

    AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

  2. Ponownie zainicjować REPL.

Powiązane problemy