【问题标题】:Create Class object from string containing source code从包含源代码的字符串创建类对象
【发布时间】:2014-11-24 22:32:51
【问题描述】:

我正在创建一个 C# 应用程序,其中代码在运行时编译,代码包含在一个字符串中(字符串从 ScintillaNET 控件获取其值,它只返回文本,带有代码的字符串按预期工作)。

我的问题是:有没有办法在运行时从这个源代码制作某种类对象?例如,字符串包含以下值:

namespace _Testing {

class Program {
    static void Main(string[] args) {
        Console.Title = "Program";
        Console.WriteLine("If you can read this, it's all good!");
        Console.ReadKey();
    }
  }
}

此代码由我的 CSharpCodeProvider 编译器在运行时编译(使用 CompileAssemblyFromSourceBatch - 因为我正在传递要编译的类数组)。 但是,我希望能够在运行时设置编译器的 MainClass 属性,这需要从类中获取命名空间。

所以我正在考虑为每个类源代码字符串创建某种对象,这将使我能够实现我的目标。当然也欢迎任何其他想法。

【问题讨论】:

  • support2.microsoft.com/kb/304655 可能会对您有所帮助。
  • 是的,你会想要 Lean Roslyn。它是一个仅适用于 C# 的动态编译器。警告,有点深...
  • @Sjips,我当前的应用程序已经具有完整的编译功能,我已经在我的项目开始时多次查阅过那篇文章;)。剩下的唯一问题是从字符串源中获取类的命名空间,所以我试图找出一个干净的方法来实现这一点

标签: c# codedom csharpcodeprovider runtime-compilation compileassemblyfromsource


【解决方案1】:

您想要的不是用于编译和加载动态代码的 CSharpCodeProver。在您的情况下,我建议使用 .Net Framework 中的 DLR(而不是 CLR)。

或者你可以看看.NET-Compiler-Plattform

你尝试什么都行不通。

【讨论】:

  • 嗯,Roslyn 编译器对于我要添加的小功能来说似乎有点重,对于从要编译的类中获取命名空间,您还有其他建议吗?这基本上是我在这里要做的唯一事情,也许我创建源代码字符串对象的想法太牵强了,但我认为这是一种干净的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多