我有一个 VS2008 Professional 解决方案,我今天尝试将其转换为 VS2010 Professional(来自 MSDN 下载的 RTM),我遇到了一些 C# 应用程序引用的非托管和托管 C++ DLL 的问题。
C# 应用程序设置为面向 .NET 3.5(就像在 VS2008 版本中一样),但是当我尝试编译它时,我收到很多警告,例如:
无法解析主要引用“xxxx.dll”,因为它间接依赖于 .NET Framework 程序集“(各种程序集名称)”,版本 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 框架?
如何更改/删除此定位?
解决方案
根据汉斯的回复和他提供的链接,我现在看到我有 3 个选择:
留在VS2008,一切正常
保持 VS2008 SP1和VS2010 的安装,以便我可以按照 Hans 提供的链接拥有 .Net 3.5 c# 应用程序和 c++ 托管代码。
将所有内容移至 VS2010,并为我的所有 c# 应用程序移至至少 .Net 4.0
我真的很生气不得不做出这样的选择,因为 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 allowed only assembly dll ”的路径,结果发现托管 c++ 项目的输出路径中有一个无关的“\”。原来的 VS2008 输出路径被指定为
$(SolutionDir)\$(ProjectName)\$(Configuration)\
但是在 VS2010 项目中,SolutionDir 宏有一个尾随的“\”(或者 VS2008 版本不关心它)给出一个类似的路径
c:\projects\thisproject\solution\\projectname\configuration\
当尝试添加对托管 c++ 代码的引用时,VS2010 会在该路径上大吃一惊。我的解决方案是将输出路径更改为
$(SolutionDir)$(ProjectName)\$(Configuration)\
现在我(有点)快乐