代码之家  ›  专栏  ›  技术社区  ›  Peter M

用托管和非托管C++将VS2008升级到VS2010的问题

  •  2
  • Peter M  · 技术社区  · 15 年前

    我有一个VS2008专业的解决方案,我试图转换为VS2010专业(RTM从MSDN下载)今天,我遇到一些问题与一些非托管和管理的C++ DLL,这是引用C语言应用程序。

    C应用程序被设置为目标.NET 3.5(就像在VS2008版本中一样),但当我尝试编译它时,会收到很多警告,例如:

    主引用“XXXX.dll”可以 因为它有一个 对.NET的间接依赖 框架组件”(各种组件 名称)”,版本4.0.0.0…哪个有 版本“4.0.0.0”高于 当前版本“3.5.0.0” 目标框架

    最终我会失败。

    由此我了解到.NET框架版本不匹配。因此,我研究非托管C++ DLL项目的属性,在“公共属性-gt;框架和引用”下,我可以看到“目标框架:NetFramework,版本=v4.0”。

    所以我去WTF!?!?!?为什么纯C++ DLL现在的目标是.NETFramework,因为它肯定没有在VS2008版本中运行。然后我又加了一句感叹词,因为似乎没有办法改变这句话。我还查看了托管C++并看到了同样的事情:目标.NET版本= v4.0,而且根本没有办法改变这一点。

    在C++通用属性中,有一个“公共语言运行时支持”的条目,我将其设置为“没有公共语言运行时支持”,但似乎没有做任何事情。

    所以我有两个问题:

    1. 为什么我的纯C++ DLL现在被标记为以.NET框架为目标?

    2. 如何更改/删除此目标?

    解决方案

    根据汉斯的回复和他提供的链接,我现在看到我有三个选择:

    1. 留在VS2008,一切正常

    2. 保留两个VS2008 SP1 VS2010 安装以便我可以使用.NET 3.5汉斯应用程序和C++托管代码,由链接提供。

    3. 将所有内容移至VS2010并移动 对于所有我的 C应用程序

    我真的很恼火必须作出选择,因为微软故意选择打破功能,从VS2008移动到VS2010。这不是我所期望的那种行为。我希望转换这个项目,让它以从VS2005到VS2008的相同方式编译,而不产生任何问题。

    幸运的是,我确实需要转到.NET 4.0,但我只是没想到这么快就要这么做。

    更新

    我决定移动到.NET 4框架,并且遇到了引用C++项目中的托管C++项目的问题。当试图将引用添加到C++托管代码项目时,我会遇到如下错误

    无法引用“myproj” 补充。程序集必须具有“dll” 或“exe”扩展,以便 引用。

    谷歌引领我走向 cli c project cannot be referenced from c project allowing only assembly dll “在管理C++项目的输出路径中,出现了一个无关的”。原始VS2008输出路径被指定为

    $(SolutionDir)\$(ProjectName)\$(Configuration)\
    

    但是在vs2010项目中,solutiondir宏有一个尾随的\”(或者vs2008版本不关心它),给出了如下路径

    c:\projects\thisproject\solution\\projectname\configuration\
    

    当试图添加对托管C++代码的引用时,VS2010会在该路径上运行。我的解决方案是将输出路径更改为

    $(SolutionDir)$(ProjectName)\$(Configuration)\
    

    现在我很高兴

    1 回复  |  直到 15 年前
        1
  •  3
  •   Hans Passant    15 年前

    注意球,你得到的警告是 管理 C++汇编语言。平台目标设置 非受管的 DLL不起作用,它在生成时不会使用任何.NET引用。

    是的,它们不能使平台目标设置在C++ IDE中可编辑,VS2008工具链需要构建3.5的C++/CLI程序集。这个 blog post 解释解决方法。你可以投反对票 feedback article 如果你不满意的话。