2

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

所以我有两个问题:

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

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

解决方案

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

  1. 留在VS2008,一切正常

  2. 保持 VS2008 SP1VS2010 的安装,以便我可以按照 Hans 提供的链接拥有 .Net 3.5 c# 应用程序和 c++ 托管代码。

  3. 将所有内容移至 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)\

现在我(有点)快乐

4

1 回答 1

3

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

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

于 2010-06-29T19:38:05.657 回答