我正在开发我们的持续集成系统,并且我有兴趣模拟我们的系统处理意外长编译时间的情况。有什么办法可以让编译需要很长时间才能完成吗?或者可能会强制它进入某种需要大量时间来编译的循环?我正在寻找像 Thread.Sleep() 这样简单的东西,仅在编译而不是执行上。
使用预处理器指令怎么样?
有什么想法吗?
这是一个 MSBuild 睡眠任务,应该可以解决这个问题。 从 .csproj 文件中的 BeforeBuild 目标调用它,或者根据您的需要在任何合适的地方调用它。
MSBuild Community Tasks 也有一个睡眠任务,所以如果您需要使用他们的一些其他任务,我发现这非常有用。
显然,睡眠任务是正确的选择。但是,如果您对使 C# 编译器花费任意长时间的方法感兴趣,仅供参考,可以在源代码中编码问题,强制重载解析算法执行 O(n^m) 算法。选择足够大的 n 和 m,你可以让编译器做你喜欢做的工作。
如果您有兴趣,这是我关于该主题的文章。
我有一个同事曾经写过一个 16,000 行的 switch 语句。编译花了很长时间,然后当他进一步扩展它时,它实际上破坏了编译器。但不知怎的,我不确定这就是你的想法。