目前,我正在构建一个 C#-Console,它允许我将任何 C# 代码输入到 CMD 中以便即时执行。对于这种方法,我使用 Roslyn 编译器,因为它允许我在每个命令的会话对象中添加更多代码,因此它允许我在第一个命令中初始化任何内容并在第二个命令中使用它。
在这个控制台中,我希望能够访问整个 .NET 框架,因此我将所有引用添加到我的控制台项目并尝试迭代这些引用以将它们添加到 Roslyn 会话中:
Assembly assembly = Assembly.GetExecutingAssembly();
AssemblyName[] references = assembly.GetReferencedAssemblies().Where(x => !x.Name.StartsWith("Roslyn.")).ToArray();
ScriptEngine engine = new ScriptEngine();
Session session = engine.CreateSession();
foreach (AssemblyName reference in references)
{
session.AddReference(reference.FullName);
}
不幸的是,我的控制台实际使用的参考资料很少。我怀疑 MSBuild 编译器非常简洁,检测到我的几乎所有引用都不会在我的控制台中使用,因此它根本不会包含它们。我怎样才能摆脱它?
我真的不想解析.proj
文件并单独维护这个列表。