2012-06-06 6 views

Respuesta

3

Esto es realmente posible ahora (y puede haber sido en el momento en que se hizo esta pregunta). Basta con crear un archivo LoadConfig.csx con lo siguiente:

#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); 
} 

guardar el archivo en algún lugar que recordará y volver al proyecto que desea cargar en el estudio visual. Haga clic con el botón derecho en el proyecto y seleccione "Restablecer C# interactivo desde el proyecto". Una vez que la ventana interactiva C# ha terminado de cargar la llamada:

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

NOTA: debe llamar a esto inmediatamente después de cargar el proyecto. Si se realizan búsquedas de configuración antes de cargar este script, este script no funcionará.

Ahora la ventana interactiva C# debe tener acceso a la configuración de su proyecto.

+1

¿Es curioso si esto funciona para alguien más? No parece funcionar para mi Esto es una tragedia, ya que hace que todos los ensamblajes que obtienen, por ejemplo, información de cadena de conexión de un archivo de configuración como no comprobable desde la ventana interactiva de C#. Esta podría ser una herramienta tan útil, y hasta ahora, se ha vuelto casi inútil para mí. – esmoore68

+0

No funciona para mí también. Estoy usando Visual Studio 2017 – Jalal

4

No hay forma de hacer esto ahora, aunque es algo en lo que estamos pensando para el futuro.

Mientras tanto, ¿podría factorizar su código para tomar la cadena de conexión como un parámetro, y simplemente pasarlo al método en la ventana interactiva?

+1

Gracias Kevin, eso es lo que terminé haciendo. Espero que la funcionalidad .config lo convierta en una versión futura de REPL, ya que encuentro un poco de código que tiene dependencias en un archivo de configuración. Por cierto, soy un gran admirador de lo que tu chico está haciendo con Roslyn, ¡es genial! – Stuart

+1

Una cosa que me gustaría agregar: Tener algo así como un lenguaje de scripts C# puede reemplazar cosas como archivos .config y se puede aplicar a la inyección de dependencia en general. Imagine el archivo de script que se implementa con el binario, y al inicio puede ejecutar el script y cargar lo que devuelve en un ConfigurationManager o lo que sea. La inyección de dependencias funcionaría de forma similar, basta con invocar el script para resolver qué constructores/propiedades se deben invocar para crear una instancia de un objeto en particular. Básicamente, + 1 millón de votos por tener .config en Roslyn (es un pequeño paso en la dirección correcta). – gzak

1

Ya aceptado La respuesta no funcionó para mí; basado en los comentarios a la respuesta aceptada, tampoco funcionó para otros 2. La siguiente solución funcionó para mí.

  1. actualización del archivo de configuración de C# interactivo (REPL) que se encuentra en

    AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

  2. Re-inicializar REPL.

Cuestiones relacionadas