访问Roslyn REPL中的.config文件

Stu*_*art 7 c# roslyn

使用2012年6月Roslyn CTP:

有没有办法为正在探索的代码提供带有.config文件的Roslyn C#Interactive/REPL?一个简单的示例场景是代码,它依赖于通常从app.config/web.config获取的连接字符串.

jus*_*tin 3

现在这实际上是可能的(并且在提出这个问题时可能已经是可能的)。只需使用以下内容创建 LoadConfig.csx 文件:

#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);
}
Run Code Online (Sandbox Code Playgroud)

将文件保存在您会记住的位置,然后返回到要在 Visual Studio 中加载的项目。右键单击该项目并选择“从项目重置 C# Interactive”。C# 交互窗口完成加载后调用:

#load "C:\path\to\LoadConfig.csx"
Run Code Online (Sandbox Code Playgroud)

注意:加载项目后必须立即调用此函数。如果在加载此脚本之前发生任何配置查找,则此脚本将无法工作。

现在,C# 交互窗口应该可以访问您的项目设置。

  • 只是好奇这对其他人是否有效?似乎对我不起作用。这是一个悲剧,因为它将所有从配置文件获取连接字符串信息的程序集呈现为无法从 C# 交互窗口进行测试。这可能是一个非常有用的工具,但到目前为止,它对我来说几乎毫无用处。 (2认同)