• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Visual Studio 2010中C++项目升级指南

发布: 2010-3-26 11:39 | 作者: 不详 | 来源: 领测软件测试网采编 | 查看: 228次 | 进入软件测试论坛讨论

领测软件测试网

  编辑vcxproj文件,并在第一组定义中加入以下内容:

  器v3.5“/ TargetFrameworkVersion”

  打开Visual Studio 2010的命令行,设置TargetFrameworkVersion = v3.5,然后从命令行运行devenv.exe。这将把所有C++应用的目标框架设为v3.5。

  在构建程序时传递/p:TargetFrameworkVersion = v3.5参数给MSBuild:MSBuild my.vcxproj /p:TargetFrameworkVersion =v3.5

  请注意,要在安装了Visual Studio 2008的情况下才能把应用程序的定向到2.0,3.0或3.5 Framework。

  对于C#/ VB应用程序,如果目标Framework已经安装在了计算机上,转换过程中则不会改变目标Framework。 如果目标Framework没有安装,你可以选择下载所需要的Framework或将目标Framework升级到4.0版。

  -如果在你的解决方案中混合有CSharp / VB/托管C++项目,你可能会碰到它们分别针对不同目标Framework的情况。如果被引用项目的目标Framework比引用它的项目的Framework版本还高,你可能会收到警告MSB3258:

  -The primary reference “foo, Version=x.x.xxx.xxxx, Culture=neutral, processorArchitecture=x86” has an indirect dependency on the .NET Framework assembly “mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” which has a higher version “4.0.0.0” than exists in the current target framework. The version found in the current target framework redist list is “2.0.0.0”. By including the primary reference you may get compile and/or runtime errors.

  -你也可能如C4691这样的警告:type referenced was expected in the unreferenced assembly ‘file’, type defined in current translation unit used instead, if the Framework version of the referencing project is higher.

  -你需要把解决方法中的所有项目设为同一个版本的Framework。

  2) 在makefile的"Output"属性中使用引号

  如果某个项目的makefile中"Output"属性里有引号,转换将无法进行。解决方法是在转换前把"Output"属性里的引号去掉。

  

  3) $(IntDir) 和 $(OutDir)中的反斜杠。

  $(IntDir)和$(OutDir)分别对应属性页中的“General -> Intermediate Directories”和“General -> Output Directories”。为了统一$(IntDir)和$(OutDir)的格式,如果没有以"\"结尾的话,转换过程中会自动在它们的属性值末尾追加“\”。如果末尾有“/”的话将会被删掉。

  不过,如果$(IntDir)或$(OutDir)用在makefile或自定义生成中,Exec任务会用到它,这就可能导致构建过程中断。

  在makefile中,如果它们以"\"结尾,nmake工具就无法评估它的值。例如,使用如下命令,

  BuildCommandLine="nmake /nologo "OUT=$(OutDir)" "OBJ=$(IntDir)""

  因为$(OutDir)和$(IntDir)末尾有“\”,nmake工具不能正确地将其展开,OUT和OBJ的值会被置为空。为了解决这个问题,你需要在属性页删除$(IntDir)和$(OutDir)中的"\"。

  如果$(OutDir)或$(IntDir)被传递给自定义生成,包括生成事件、自定义生成工具,以及自定义生成步骤,你可能会遇到构建失败,其原因是“\”可能被这些工具当成了转义字符。例如,如果你有一个跟下面类似的预生成事件:

   cl /c /Fo"$(IntDir)" "$(ProjectDir)\win32.cpp"

  命令行是:cl /c /Fo"Debug\" "C:\foo\win32.cpp" instead of cl /c /Fo"Debug\\" "C:\foo\win32.cpp"

  要解决这个问题,在传递给/Fo的值中的添加一个额外的“\”(C/C++ -> Output Files -> Object File Name),以补偿被当作转义字符的"\"。

  4) 解决方案资源管理器界面

  在Visual Studio 2010中,解决方案资源管理器里的文件和文件夹显示由.vcxproj.filters文件控制。如果你有名字相同但位置不同的文件夹,例如“Native\Include”和 "Include",那么在转换后,第二个"Include"和它里面的文件将不会显示在解决方案资源管理器中。若要解决此问题,你可以重新在解决方案资源管理器创建这个文件夹,并将相应的文件添加到文件夹中。

  5) 只读的项目文件或目录

  当你从一个只读目录中开始升级,或是对以前只读的项目文件进行重新转换时,都有可能碰到问题。务必确保这些目录和文件都是可写的,除非你能对这些文件自动进行检查,就像在集成资源管理系统(integrated source control system)中能做到的那样。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

44/4<1234

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网