【发布时间】: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++ 常规属性中有一个“公共语言运行时支持”条目,我已将其设置为“无公共语言运行时支持”,但似乎没有做任何事情。
所以我有两个问题:
为什么我的纯 C++ DLL 现在被标记为针对 .Net 框架?
如何更改/删除此定位?
解决方案
根据 Hans 的回复和他提供的链接,我现在看到我有 3 个选择:
留在 VS2008,一切正常
同时保留 VS2008 SP1 和 VS2010 安装以便我可以拥有.Net 3.5 c# 应用程序和 c++ 托管代码,根据 Hans 提供的链接。
将所有内容移至 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