如何解决如何使用 Microsoft.CodeAnalysis.Diagnostic 获取错误行
希望你有美好的一天。 我有一段用于在运行时评估代码的代码:
const favOrUnfav = async (e) => { // Patch method to favorite or unfavorite a pokemon
e.preventDefault();
try {
console.log(putArr);
const updateUser = {id,putArr};
await axios.patch("http://localhost:5000/users/favorite",updateUser).then(() => {
setIsFav(!isFav);
});
} catch(err) {
err.response.data.msg && setError(err.response.data.msg)
}
};
当我收到错误时,例如它只显示:SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText("Code goes here...");
string assemblyName = Path.GetRandomFileName();
string corePath = Path.GetDirectoryName(typeof(object).GetTypeInfo().Assembly.Location);
MetadataReference[] references = new MetadataReference[]
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location),MetadataReference.CreateFromFile("Newtonsoft.Json.dll"),MetadataReference.CreateFromFile(Path.Combine(corePath,"System.Net.dll")),"System.Text.RegularExpressions.dll"))
};
CSharpCompilation compilation = CSharpCompilation.Create(
assemblyName,syntaxTrees: new[] { syntaxTree },references: references,options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
using (var ms = new MemoryStream())
{
EmitResult result = compilation.Emit(ms);
if (!result.Success)
{
IEnumerable<Diagnostic> failures = result.Diagnostics.Where(diagnostic =>
diagnostic.IsWarningAsError ||
diagnostic.Severity == DiagnosticSeverity.Error);
string errors = "";
foreach (Diagnostic diagnostic in failures)
{
errors += "<span style=\"text-align: center;\">Error <b>" + diagnostic.Id + "</b>: " + diagnostic.GetMessage() + "</span><br>";
}
return errors;
}
else
{
ms.Seek(0,SeekOrigin.Begin);
Assembly assembly = Assembly.Load(ms.ToArray());
Type type = assembly.GetType("NoteBoxCode.Program");
object obj = Activator.CreateInstance(type);
return type.InvokeMember("Main",BindingFlags.InvokeMethod,null,obj,null);
}
}
如何获得类似 Error CS1520: Method must have a return type
的输出?
我尝试过 Error on line 2 CS1520: Method must have a return type
,但我认为它返回了我不需要的装配线位置。有什么帮助吗?
解决方法
因此,CSharpCompilationOptions
不能返回错误行,因为它是运行时错误。我需要一个高级调试类,来分别调试和运行每一行代码,这就是(我认为)visual studio 所做的。
您可以使用 SyntaxTree.GetDiagnostics()
来概览语法错误。但是这不会返回编译错误,例如 Console.WritLine
而不是 Console.WriteLine
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。