在 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# 代码的主要内容,如果未能解决你的问题,请参考以下文章
如何在Java中以不区分大小写的方式检查一个字符串是不是包含另一个字符串?
通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)