在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码

Posted

技术标签:

【中文标题】在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码【英文标题】:Check if a string contains valid C# code programatically in C#在 C# 中以编程方式检查字符串是否包含有效的 C# 代码 【发布时间】:2021-10-30 19:37:25 【问题描述】:

我有一个包含 C# 代码的字符串。如何检查字符串中的 C# 代码是有效的 C# 并且不包含构建错误?

我想在 C# 中以编程方式执行此操作。

我不希望字符串中的代码包含对字符串之外的其他代码的引用,因此不需要加载整个项目或解决方案,只需要考虑字符串中的代码。

我可以使用 Roslyn Api 或类似的东西吗?

【问题讨论】:

C# 还是 C# 脚本? ***.com/questions/475033/…docs.microsoft.com/en-us/dotnet/api/… 也许可以看看docs.microsoft.com/en-us/archive/msdn-magazine/2016/january/… 和cs-script.net 【参考方案1】:

你可以编译它,例如使用这种方法:https://www.kendar.org/?p=/dotnet/sharptemplate 你甚至可以在 WaybackMachine 上找到它:P 这是我几年前写的一个库。

您需要的示例如下:

    const string dllName = "CompileClassTemplate";
    const string resultDllName = "CompileResultingTemplate";
    var path = TestUtils.GetExecutionPath();
    var source = ResourceContentLoader.LoadText("ClassTemplate.cs", Assembly.GetExecutingAssembly());

    var pp = new SharpParser();
    var sharpClass = pp.ParseClass(source, "TestParserClass", "SharpTemplate.Test.Resources.Parsers");

    var loadedAssembly = BuildParserClass(dllName, path, sharpClass);

这里是SharpTemplate Nuget 和Git repo

【讨论】:

以上是关于在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中以编程方式编译打字稿?

如何在Java中以不区分大小写的方式检查一个字符串是不是包含另一个字符串?

如何在 C# 中以编程方式搜索 PDF 文档 [关闭]

通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)

如何检查我是不是在 android 4.4 及更高版本中以编程方式打开了 gps? [复制]

在 C# 中以编程方式杀死进程树