不确定这是否属于这里或 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!)但问题仍然存在。最后,我尝试使用通过“发布”版本(而不是“调试”)构建的文件部署应用程序,这似乎解决了问题 - 但我不知道为什么。
我将会在明天早上夜间构建运行后发现这个问题,希望有一些好消息等着我。假设这是问题所在,那为什么会有影响呢?这个过程在物理服务器上运行了几个月都没问题——为什么它会在虚拟机上造成问题呢?
有人有任何想法、建议或解决方案吗?提前致谢
答案1
它可能与网站的默认框架 1.1 或 2.0 相关。aspnet_regiis 设置框架版本。
如果你:
- 安装窗口
- 运行所有 Windows 更新
- 添加应用程序角色
或者
- 安装窗口
- 添加应用程序角色
- 运行所有 Windows 更新
那么默认框架就不一样了。也可能是你安装时设置的框架版本不对。
答案2
VM 本身并没有被回滚,是吗?