Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ <;msbuild/>;任务失败,而<;devenv/>;CruiseControl.NET中的MFC应用程序是否成功?_Visual C++_Visual Studio 2010_Mfc_Msbuild_Cruisecontrol.net - Fatal编程技术网

Visual c++ <;msbuild/>;任务失败,而<;devenv/>;CruiseControl.NET中的MFC应用程序是否成功?

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

概述

我正在通过CruiseControl.net和VS2010进行MFC应用程序的持续集成构建。构建my.sln时,“Visual Studio”CCNet任务(
)可以工作,但通过CCNet
任务运行的简单MSBuild包装脚本(请参见下文)会失败,并出现以下错误:

  • 错误RC1015:无法打开包含文件“winres.h”
  • 错误C1083:无法打开包含文件:“afxwin.h”:没有此类文件或目录
  • 错误C1083:无法打开包含文件:“afx.h”:没有此类文件或目录
问题

如何调整msbuild包装器的生成环境,以便正确生成应用程序?(很明显,MFC路径不适用于msbuild环境,但如何修复msbuild+VS2010+MFC+CCNet的路径?)

背景细节

  • 我们已经成功地将MFC应用程序(.exe和一些MFC扩展名.dll)升级到Visual Studio 2010,并且可以在开发人员机器上编译该应用程序而不会出现问题
  • 现在,我正在CI服务器环境中编译应用程序
  • 我在构建服务器上完整安装了VS2010(Professional)。通过这种方式,我知道我需要的所有东西都会在机器上(这样或那样),这与开发人员的机器是一致的
  • VS2010已正确安装在CI服务器上,并且devenv任务按预期工作
  • 现在,我有了一个包装器MSBuild脚本,它执行一些扩展版本处理,然后通过MSBuild任务为应用程序生成.sln
  • 此包装器脚本通过CCNet的MSBuild任务运行,失败并出现上述错误
简单的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
  • 构建一个解决方案吗?
但是我该怎么做呢?我正在设置环境变量吗?注册表设置?我可以看到在某些情况下如何注入额外的目录,但这似乎需要在编译器默认值级别进行更系统的配置

更新1

这似乎只有在两种情况下才会发生:资源编译(rc.exe)和预编译头(stdafx.h)编译,并且仅适用于某些项目?我认为这是全面的,但事实上,这似乎只是在这些情况下。我想我会继续挖掘,希望有人有一些见解,他们愿意分享

解决方案

我做了两次调整以使其正常工作。第一个是从我的解决方案中提取一个第三方项目,并独立构建它(其中错误最多)。通过将它的二进制文件签入到源代码管理(就像许多其他第三方库一样),我可以毫无疑问地链接到它。然而,正如许多人指出的那样,这只是为了避免这个问题


该解决方案的第二部分是偶然发现的,但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服务器上执行此操作,会有什么变化


我的解决方案最终融合了您的一些建议,但此清单解决了我的最终问题(尽管我独立找到了解决方案)。感谢您花时间就这样一个难看的开放式问题提出建议。对不起,我之前没有看到这个问题。