我使用CSharpCodeProvider
为我的应用编译即时插件。
现在可以尝试编译一个看起来不错的文件,但会生成许多错误,例如粘贴二进制文件的C#代码。有许多字符,使用error CS1056: Unexpected character
处理。
这种行为是预料之中的,但是这种“恶意”文件的编译过程非常耗时。
我认为合理的一个解决方案是限制错误的数量,之后CSharpCodeProvider.CompileAssemblyFromFile
返回。
是否可以设置这样的限制?
如果可以避免,我真的不想非常小心地检查文件。
答案 0 :(得分:1)
我不知道是否有CSharpCodeProvider的属性或字段可以控制它,但可能的解决方案是更改您要问的问题 - 如果问题是尝试编译所花费的时间,而不是错误的数量,我的解决方案是在单独的任务上运行CSharpCodeProvider,但如果完成任务需要很长时间就终止任务。
然后您可以提供自己的错误消息:
“你的代码太糟糕了。它不能在不到5分钟的时间内完成编译。” :P
至于安全性,您可以尝试通过Application.Run在单独的AppDomain中运行东西? Dunno您的应用程序有多复杂,但您可以在插入插件的情况下启动主表单的新实例。