【发布时间】:2017-10-14 13:38:50
【问题描述】:
有没有办法为 Roslyn C# Interactive/REPL 提供 .config 文件以供正在探索的代码使用?一个简单的示例场景是依赖于通常从 app.config/web.config 获得的连接字符串的代码。
【问题讨论】:
有没有办法为 Roslyn C# Interactive/REPL 提供 .config 文件以供正在探索的代码使用?一个简单的示例场景是依赖于通常从 app.config/web.config 获得的连接字符串的代码。
【问题讨论】:
目前还没有办法做到这一点,尽管我们正在为未来考虑。
与此同时,您能否将您的代码分解为将连接字符串作为参数,然后将其传递给交互式窗口中的方法?
【讨论】:
现在这实际上是可能的(并且可能在被问到这个问题的时候就已经实现了)。只需使用以下内容创建一个 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);
}
将文件保存在您会记住的位置,然后返回到您要在 Visual Studio 中加载的项目。右键单击项目并选择“从项目中重置 C# Interactive”。一旦 C# 交互式窗口完成加载调用:
#load "C:\path\to\LoadConfig.csx"
注意:您必须在加载项目后立即调用它。如果在加载此脚本之前发生任何配置查找,则此脚本将无法工作。
现在 C# 交互窗口应该可以访问您的项目设置了。
【讨论】:
已经接受的答案对我不起作用;根据接受答案的 cmets,它也不适用于其他 2 个。以下解决方案对我有用。
更新 C# Interactive (REPL) 的配置文件,位于
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
重新初始化 REPL。
【讨论】: