使用托管和非托管C ++将VS2008升级到VS2010时出现问题

时间:2010-06-29 18:58:51

标签: c++ visual-studio-2010 managed-c++ visual-studio-2008-sp1

我有一个VS2008 Professional解决方案,我今天尝试转换为VS2010 Professional(从MSDN下载RTM),我遇到了一些由C#应用程序引用的非托管和托管C ++ DLL的问题。

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

  

主要参考“xxxx.dll”可以   没有解决因为它有一个   间接依赖于.NET   框架组装“(各种组装   名称)“,版本4.0.0.0 ...有   更高版本“4.0.0.0”比   版本“3.5.0.0”在当前   目标框架

最终我失败了。

据此我了解到,它与.Net框架版本不匹配。所以我看一下非托管C ++ DLL项目的属性,在“Common Properties-> Framework and References”下,我可以看到“Targeted framework:.NetFramework,Version = v4.0”

所以我去WTF!?!?!?,为什么纯粹的C ++ DLL现在以.Net框架为目标,当它确定在VS2008版本中没有。然后我加入了感叹,因为似乎没有办法改变这一点。我还看一下托管C ++并看到同样的事情:定位.Net version = v4.0,再也无法改变这一点。

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

所以我有两个问题:

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

  2. 如何更改/删除此定位?

  3. 解决方案

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

    1. 留在VS2008,一切正常

    2. 同时保留VS2008 SP1 VS2010 安装,以便我可以拥有.Net 3.5个c#应用程序和c ++托管代码,根据Hans提供的链接。

    3. 将所有内容移至VS2010并移动 至少为.Net 4.0 c#apps

    4. 由于MS在从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 个答案:

答案 0 :(得分:3)

密切关注球,你得到的警告是托管的 C ++程序集。 非托管 DLL的平台目标设置无关紧要,它在构建时不会使用任何.NET引用。

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