我使用CSharpCodeProvider为我的应用程序编译即时插件。

现在,可以尝试编译一个看起来不错,但会产生许多错误的文件,例如,粘贴了二进制文件的C#代码。有许多字符,用error CS1056: Unexpected character处理。

这种行为是预期的,但是这种“恶意”文件的编译过程非常耗时。

我认为合理的一种解决方案是限制错误的数量,然后CSharpCodeProvider.CompileAssemblyFromFile返回。

可以设置这样的限制吗?

如果可以避免的话,我真的不想一开始就非常仔细地检查文件。

最佳答案

我不知道CSharpCodeProvider是否存在可以控制此属性的属性或字段,但是可能的解决方案是更改您要询问的问题-问题是否是尝试编译所需的时间,而不是错误的数量,我的解决方案是在单独的任务上运行CSharpCodeProvider,但如果完成时间太长,则终止该任务。

然后,您可以提供自己的错误消息:

“您的代码太糟糕了。不能在不到5分钟的时间内进行编译。” :P

至于安全性,您可以尝试通过Application.Run在单独的AppDomain中运行事物。 Dunno您的应用程序有多复杂,但是您可以在插入插件的情况下启动主窗体的新实例。

关于c# - CSharpCodeProvider.CompileAssemblyFromFile中的最大错误数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17109140/

10-12 07:39