【问题标题】: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#
roslyn
roslyn-code-analysis
【解决方案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