2

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

的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”为什么一个纯C++ DLL现在的目标是一个.Net框架,当它确实没有在VS2008版本中。然后我再加上这个惊叹号,因为似乎没有办法改变这种情况。我也看看托管的C++,看到同样的事情:瞄准.Net版本= 4.0版,并再次没有办法改变这一点。

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

所以我有两个问题:

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

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

解决方案

按照汉斯的答复,他提供的链接我现在看到我有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#项目的项目问题。我是越来越喜欢错误下面试图将引用添加到++托管代码项目

一提到“的Myproj”的C时,不能添加 。程序集必须具有'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)\ 

现在我(在某种程度上)快乐

回答

3

睁大你的眼睛在球上,你得到的警告是一个管理 C++组件。而对于非托管的 DLL的平台目标设置没有任何影响,它在构建时不会使用任何.NET引用。

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

+0

是的,该链接解释得很好。但现在我比任何事都更恼火。 – 2010-06-29 19:53:08

+0

你对我的疑惑是对的,但我仍然有点推迟,非托管C++的属性甚至提到.Net框架! – 2010-06-29 20:02:50