不知道这是属于这里还是属于SO,但无论如何......
我们有一个 CruiseControl.NET 服务器,它每晚在应用程序上执行构建,然后将结果输出发布到同一个盒子上的 IIS 实例 - 这充当 QA 的测试部署。
几个月来一切都运行良好,直到我们转移到新服务器(Win2003 R2 SP1)——实际上是一个虚拟机。
现在,每当夜间构建发布到 IIS 时,我们都会在浏览器中收到一条错误消息,指出编译器失败,错误代码为 128。这在旧服务器上从未发生过!
运行aspnet_regiis -i将使站点重新上线,但我很困惑为什么 IIS 似乎因为一个简单的文件复制而忘记了所有关于 .NET 的内容。
我已经查看了构建过程的发布阶段,并从良好的老式批处理脚本转移到了“更干净”的 nAnt 脚本,但问题仍然存在。
如果我运行上述命令,请清除事件日志,然后访问该站点会出现一个新事件:
The configuration information of the performance library
"C:\WINDOWS\system32\infoctrs.dll" for the "InetInfo" service does not match
the trusted performance library information stored in the registry.
The functions in this library will not be treated as trusted.
但该网站仍然加载没有任何问题。如果我然后运行任何一个发布脚本(.bat 或 .build)然后访问该站点,则会出现另一个相同的事件并显示编译错误(尽管运行 aspnet_regiis 修复它)。
如果我手动删除旧文件并复制新文件,则编译器错误会再次显示在浏览器中。
现在快速修复是运行 aspnet_regiis 作为构建脚本的一部分,但坦率地说,这只是闻起来很糟糕。
[2009 年 12 月 11 日编辑]:我已经讨论了一段时间了,但仍然不知道为什么会这样。我重新安装了 IIS 和 .NET 2.0 & 3.0(不需要 3.5!),但问题仍然存在。最后,我尝试使用通过“发布”构建(而不是“调试”)构建的文件部署应用程序,这似乎解决了问题 - 但我不知道为什么。
明天早上我会在夜间构建愤怒运行后发现,所以希望我有一些好消息等着我。假设这是问题所在,为什么要有所作为?这个过程在物理服务器上运行了好几个月 - 为什么它会在 VM 上引起问题。?
任何人有任何想法,建议或解决方案..?提前致谢