代码之家  ›  专栏  ›  技术社区  ›  el2iot2

当CruiseControl.NET中的MFC应用程序的<devenv/>成功时,<msbuild/>任务失败?

  •  4
  • el2iot2  · 技术社区  · 16 年前

    概述

    我正在通过CruiseControl.net和VS2010进行MFC应用程序的持续集成构建。在构建my.sln时,一个“visualstudio”CCNet任务( <devenv/> )工作正常,但通过CCNet运行一个简单的MSBuild包装器脚本(见下文) <msbuild/>

    • 错误RC1015:无法打开包含文件“winres.h”。。
    • 错误C1083:无法打开包含文件:“afxwin.h”:没有这样的文件或目录
    • 错误C1083:无法打开包含文件:“afx.h”:没有这样的文件或目录

    问题

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

    • 我们已经成功地将MFC应用程序(.exe和一些MFC扩展名.dll)升级到VisualStudio2010,并且可以在开发人员机器上编译应用程序而不会出现问题。
    • 现在我正在CI服务器环境中编译应用程序
    • 我在构建服务器上完整安装了VS2010(Professional)。通过这种方式,我知道我所需要的一切都会在机器上(以这种或那种方式),并且这与开发人员机器是一致的。
    • 我现在有了一个包装器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路径的丢失/错误配置
    • 我应该能够强制MSBuild环境考虑VS2010安装中的相关资源文件,并使此方法起作用。

    但我该怎么做呢?我正在设置环境变量吗?注册表设置?在某些情况下,我可以看到如何注入额外的目录,但这似乎需要在编译器默认值级别进行更系统的配置。

    更新1

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

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

    这个解决方案的第二部分是偶然发现的,但是在W。Craig Trader的建议。也就是说,我将源代码手动拉入服务器上的工作目录,并在visualstudio中手动构建解决方案。无论存在什么路径/环境/配置状态问题,都可以通过为ccnet服务用户实际启动visualstudio来解决。回想起来,这当然是有道理的。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Craig Trader    16 年前

    有太多的变量无法准确预测问题所在,但下面列出了一些我要检查/执行的操作,以便将此操作落到实处:

    • 您是否以CC.net服务用户的身份安装了VS2010?如果没有,请检查安装用户的环境设置--可能需要为CC.net服务用户添加其他路径设置。

    • 打开CC.net控制台日志记录并将日志级别增加到最大值,然后观察生成启动时发生的情况。这将是冗长的,但可以包括有关构建环境的有用细节。

    • 当开发人员登录到CC.net服务器,签出您的解决方案并在本地构建它时会发生什么。是否正确构建?

    推荐文章