<msbuild/> task fails while <devenv/> succeeds for MFC application in CruiseControl.NET?
Posted
by ee
on Stack Overflow
See other posts from Stack Overflow
or by ee
Published on 2010-06-13T03:40:43Z
Indexed on
2010/06/16
22:02 UTC
Read the original article
Hit count: 1037
The Overview
I am working on a Continuous Integration build of a MFC appliction via CruiseControl.net and VS2010. When building my .sln, a "Visual Studio" CCNet task (<devenv/>
) works, but a simple MSBuild wrapper script (see below) run via the CCNet <msbuild/>
task fails with errors like:
- error RC1015: cannot open include file 'winres.h'..
- error C1083: Cannot open include file: 'afxwin.h': No such file or directory
- error C1083: Cannot open include file: 'afx.h': No such file or directory
The Question
How can I adjust the build environment of my msbuild wrapper so that the application builds correctly? (Pretty clearly the MFC paths aren't right for the msbuild environment, but how do i fix it for MSBuild+VS2010+MFC+CCNet?)
Background Details
- We have successfully upgraded an MFC application (.exe with some MFC extension .dlls) to Visual Studio 2010 and can compile the application without issue on developer machines.
- Now I am working on compiling the application on the CI server environment
- I did a full installation of VS2010 (Professional) on the build server. In this way, I knew everything I needed would be on the machine (one way or another) and that this would be consistent with developer machines.
- VS2010 is correctly installed on the CI server, and the devenv task works as expected
- I now have a wrapper MSBuild script that does some extended version processing and then builds the .sln for the application via an MSBuild task.
- This wrapper script is run via CCNet's MSBuild task and fails with the above mentioned errors
The Simple MSBuild Wrapper
<?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>
My Assumptions
- This seems to be a missing/wrong configuration of include paths to standard header resources of the MFC persuasion
- I should be able to coerce the MSBuild environment to consider the relevant resource files from my VS2010 install and have this approach work.
- Given the vs2010 msbuild support for visual c++ projects (.vcxproj), shouldn't msbuilding a solution be pretty close to compiling via visual studio?
But how do I do that? Am I setting Environment variables? Registry settings? I can see how one can inject additional directories in some cases, but this seems to need a more systemic configuration at the compiler defaults level.
Update 1
This appears to only ever happen in two cases: resource compilation (rc.exe), and precompiled header (stdafx.h) compilation, and only for certain projects? I was thinking it was across the board, but indeed it appears only to be in these cases. I guess I will keep digging and hope someone has some insight they would be willing to share...
© Stack Overflow or respective owner