Visual c++ <;msbuild/>;任务失败,而<;devenv/>;CruiseControl.NET中的MFC应用程序是否成功?
概述 我正在通过CruiseControl.net和VS2010进行MFC应用程序的持续集成构建。构建my.sln时,“Visual Studio”CCNet任务(Visual c++ <;msbuild/>;任务失败,而<;devenv/>;CruiseControl.NET中的MFC应用程序是否成功?,visual-c++,visual-studio-2010,mfc,msbuild,cruisecontrol.net,Visual C++,Visual Studio 2010,Mfc,Msbuild,Cruisecontrol.net,概述 我正在通过CruiseControl.net和VS2010进行MFC应用程序的持续集成构建。构建my.sln时,“Visual Studio”CCNet任务()可以工作,但通过CCNet任务运行的简单MSBuild包装脚本(请参见下文)会失败,并出现以下错误: 错误RC1015:无法打开包含文件“winres.h” 错误C1083:无法打开包含文件:“afxwin.h”:没有此类文件或目录 错误C1083:无法打开包含文件:“afx.h”:没有此类文件或目录 问题 如何调整msbuil
)可以工作,但通过CCNet
任务运行的简单MSBuild包装脚本(请参见下文)会失败,并出现以下错误:
- 错误RC1015:无法打开包含文件“winres.h”
- 错误C1083:无法打开包含文件:“afxwin.h”:没有此类文件或目录
- 错误C1083:无法打开包含文件:“afx.h”:没有此类文件或目录
- 我们已经成功地将MFC应用程序(.exe和一些MFC扩展名.dll)升级到Visual Studio 2010,并且可以在开发人员机器上编译该应用程序而不会出现问题李>
- 现在,我正在CI服务器环境中编译应用程序
- 我在构建服务器上完整安装了VS2010(Professional)。通过这种方式,我知道我需要的所有东西都会在机器上(这样或那样),这与开发人员的机器是一致的
- VS2010已正确安装在CI服务器上,并且devenv任务按预期工作
- 现在,我有了一个包装器MSBuild脚本,它执行一些扩展版本处理,然后通过MSBuild任务为应用程序生成.sln李>
- 此包装器脚本通过CCNet的MSBuild任务运行,失败并出现上述错误
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<!-- Doing some versioning stuff here-->
<MSBuild Projects="target.sln"
Properties="Configuration=ReleaseUnicode;Platform=Any CPU;..." />
</Target>
</Project>
我的假设
- 这似乎是MFC说服的标准头资源的include路径配置缺失/错误
- 我应该能够强制MSBube环境来考虑VS2010安装中的相关资源文件并使该方法有效。
- 鉴于VisualC++项目(.vcxPROJ)支持VS2010 MSBug,不应该通过VisualStudio 构建一个解决方案吗?
该解决方案的第二部分是偶然发现的,但W.Craig Trader的建议清单明确暗示了这一点。也就是说,我手动将源代码拉到服务器上的工作目录,并在VisualStudio中手动构建解决方案。无论存在什么路径/环境/配置状态问题,都可以通过为ccnet服务用户实际启动VisualStudio来解决。回顾过去,这当然是有道理的 有太多的变量无法准确预测问题所在,但下面列出了一些我要检查/做的事情,以便将其付诸实施:
- 确保CC.net服务以域用户的身份运行(因此它可以访问网络资源),并且该用户具有与普通开发人员相同的权限。CC.net服务用户应该是唯一的用户(而不是开发人员之一)(我更喜欢以尽可能严格的权限运行CC.net,以便在单元测试期间消除开发人员引起的错误。因为大多数开发人员都是其开发PC上的管理员,这可能导致代码需要以管理员身份运行。)
- 您是否以CC.net服务用户的身份安装了VS2010?如果没有,请检查安装用户的环境设置——可能需要为CC.net服务用户添加其他路径设置
- 打开CC.net控制台日志记录并将日志级别增加到最大值,然后观察构建启动时发生的情况。这将是冗长的,但可以包括有关构建环境的有用细节
- 当开发人员登录到CC.net服务器,签出您的解决方案并在本地构建它时会发生什么情况。它构建正确吗
- 在过去,我发现有必要运行VisualStudio(使用命令行参数)来生成解决方案,因为没有针对所有项目类型(尤其是非WiX安装程序项目)的msbuild任务。如果在CC.net服务器上执行此操作,会有什么变化