CSharpCodeProvider.CompileAssemblyFromFile中的最大错误数

Pio*_*fer 12 c# runtime-compilation

CSharpCodeProvider用来编译我的应用程序的即时插件.

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

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

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

是否可以设置这样的限制?

如果可以避免的话,我真的不想在第一时间仔细检查文件.

Mic*_*ann 1

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

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

“你的代码太糟糕了,不到5分钟就编译不完。” :P

至于安全性,您可以尝试通过 Application.Run 在单独的 AppDomain 中运行东西?不知道您的应用程序有多复杂,但您可能会使用注入的插件启动主表单的新实例。