【问题标题】:Problems upgrading VS2008 to VS2010 with Managed and Unmanaged C++使用托管和非托管 C++ 将 VS2008 升级到 VS2010 时出现问题
【发布时间】:2010-06-29 18:58:50
【问题描述】:

我有一个 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++ 常规属性中有一个“公共语言运行时支持”条目,我已将其设置为“无公共语言运行时支持”,但似乎没有做任何事情。

所以我有两个问题:

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

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

解决方案

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

  1. 留在 VS2008,一切正常

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

  3. 将所有内容移至 VS2010 并移动 对于我所有的人来说,至少 .Net 4.0 c# 应用程序

我真的很生气不得不做出这样的选择,因为 MS 在从 VS2008 迁移到 VS2010 时故意选择破坏功能。这不是我所期望的那种行为。我期待转换项目并让它编译没有问题,就像从 VS2005 迁移到 VS2008 一样。

幸运的是,我确实需要使用 .Net 4.0,但我只是没想到这么快就必须这样做。

更新

我决定迁移到 .Net 4 框架,但在从 c# 项目中引用托管 c++ 项目时遇到了问题。尝试添加对 c++ 托管代码项目的引用时遇到如下错误

不能引用“myproj” 添加。程序集必须有一个“dll” 或“exe”扩展名,以便 参考。

Google 引导我找到“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)\

现在我(有点)快乐

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,该链接解释得很好。但现在我比什么都烦。
    • 你说得对,我的困惑是对的,但我仍然有点犹豫,非托管 c++ 的属性甚至提到了 .Net 框架!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多